Просто чтобы добавить к тому, что Хенк сказал в своем ответе о GetHashCode
, и смягчить некоторые отрицательные комментарии, которые он получил по этому ответу:
Существует способ вызвать GetHashCode
для любого объекта, который не зависит от значения этого объекта, независимо от того, переопределен ли его тип GetHashCode
.
Взгляните на System.Runtime.CompilerServices.RuntimeHelpers.GetHashCode
.
Конечно, это значение не обязательно должно быть уникальным. Также Guid
(хотя для того, чтобы не был уникальным, требовались микроскопические шансы).
Я бы сказал, что ваш инстинкт был прав насчет статической переменной counter. Однако следует отметить, что простое увеличение его с помощью оператора ++
в конструкторе каждого объекта не является потокобезопасным. Если это возможно, вы можете создавать экземпляры класса из нескольких потоков, которые вы хотите использовать вместо Interlocked.Increment
.