Ich möchte jeder Klasse eine eindeutige ID geben, wenn eine neue Instanz instanziiert wird. Zum Beispiel mit einer Klasse namens Foo i möchte folgendeGeben Sie die eindeutige ID der Klasse bei Instanziierung ein: .Net
dim a as New Foo()
dim b as New Foo()
und eine bekommen würde eine eindeutige ID und b in der Lage sein würde, eine eindeutige ID erhalten zu tun. Die IDs müssen nur während der Laufzeit eindeutig sein, daher möchte ich nur eine Ganzzahl verwenden. Ich habe einen Weg gefunden, dies zu tun (und den Vorbehalt) Ich möchte nicht in der Lage sein, die ID von überall zu ändern. Meine aktuelle Idee für einen Weg, dies zu implementieren ist der folgende:
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
Allerdings wird dies nicht kompilieren, weil es einen Fehler auf wirft _nextId = _nextId + 1 Ich sehe nicht, warum dies ein Fehler sein würde (Da _Id auch nur gelesen werden kann, sollte es möglich sein, eine schreibgeschützte Variable im Konstruktor zu ändern.) Ich denke, das hat etwas damit zu tun, dass es auch geteilt wird. Jede Lösung (hoffentlich nicht kludgy hehe) oder eine Erklärung, warum das nicht funktioniert, wird akzeptiert. Der wichtige Teil ist, dass ich will, dass beide Variablen (oder wenn es einen Weg gibt, nur einen zu haben, der sogar besser wäre, aber ich denke nicht, dass das möglich ist) nach der Initialisierung des Objekts unveränderlich sind. Vielen Dank!
Das Sperren des Typs Objekt ist eine schlechte Idee. Jeder kann das Typ-Objekt bekommen und es sperren. Lock-Objekte sollten innerhalb einer Klasseninstanz privat gehalten werden. Außerdem ist das Sperren und anschließende Verwenden von Interlocked.Increment überflüssig. Die Interlocked-Klassenmethoden sind atomar und müssen nicht gesperrt werden. – Will