Je souhaite attribuer à une classe un ID unique chaque fois qu'une nouvelle ID est instanciée. Par exemple, avec une classe nommée Foo je voudrais être en mesure de faire ce qui suitAttribution d'un ID unique de classe à l'instanciation: .Net
dim a as New Foo()
dim b as New Foo()
et recevrais un identifiant unique et b obtiendrais un ID unique. Les identifiants doivent seulement être uniques au cours de l'exécution, donc je voudrais juste utiliser un nombre entier. J'ai trouvé un moyen de le faire MAIS (et voici la mise en garde) Je ne veux pas être en mesure de changer l'ID de n'importe où. Mon idée actuelle un moyen de mettre en œuvre c'est le suivant:
Public Class test
Private Shared ReadOnly _nextId As Integer
Private ReadOnly _id As Integer
Public Sub New()
_nextId = _nextId + 1
_id = _nextId
End Sub
End Class
Cependant, cela ne compile pas parce qu'il renvoie une erreur sur _nextId = _nextId + 1 Je ne vois pas pourquoi ce serait une erreur (parce que _Id est aussi en lecture seule, vous êtes supposé être capable de changer une variable en lecture seule dans le constructeur.) Je pense que cela a quelque chose à voir avec le fait qu'il soit partagé aussi. Toute solution (espérons pas kludgy hehe) ou une explication de pourquoi cela ne fonctionnera pas sera acceptée. La partie importante est que je veux que les deux variables (ou s'il y a un moyen d'en avoir un qui serait encore mieux mais je ne pense pas que cela soit possible) soient immuables après l'initialisation de l'objet. Merci!
Verrouiller sur l'objet type est une mauvaise idée. Tout le monde peut obtenir l'objet type et le verrouiller. Les objets de verrouillage doivent rester privés dans une instance de classe. En outre, le verrouillage et l'utilisation d'Interlocked.Increment sont redondants. les méthodes de classe Interlocked sont atomiques et ne nécessitent pas de verrouillage. – Will