2012-10-15 3 views
4

Мы собираем специальный инструмент сериализации в наш проект и сталкиваемся с необходимостью однозначно идентифицировать каждый объект с помощью примитивного типа значений, который может использоваться как синоним его «идентичности». Значение не должно иметь никакого смысла или организации, а просто потому, что оно является уникальным и постоянным, по крайней мере, на протяжении процедуры сериализации. В идеале .net внутренне поддерживал бы уникальный и постоянный идентификатор объекта, который мы могли бы хранить как идентификатор объекта. Я знаю, что у каждого объекта есть метод GetHashCode, но мы не уверены в глобальной уникальности ценности. Другим критерием доступа к ID является то, что этот метод должен быть очень эффективным.Возможно ли получить эквивалент «адреса памяти» объекта .net?

Я посмотрел на GetHashCode, сборщик мусора и сортировку идей, еще не достиг чего-то твердого.

ответ

4

Вы ищете ObjectIDGenerator class, что делает именно то, что вы пытаетесь сделать.

+0

Является ли это основанным на Object> Integer словаре? –

+0

На самом деле это похоже на Hashtable, означает ли это, что метод 'GetHashCode' объекта в корне несет ответственность за уникальность идентификатора? –

+0

Дальнейшие исследования, согласно http://stackoverflow.com/questions/7789430/objectidgenerator-implementation, 'ObjectIDGenerator' использует метод' RuntimeHelpers.GetHashCode (Object) ', который на http://msdn.microsoft.com/en -us/library/system.runtime.serialization.objectidgenerator.aspx использует «HashTable», а затем http://msdn.microsoft.com/en-us/library/system.runtime.serialization.objectidgenerator.aspx использует Метод Object.GetHashCode', который сам по себе http://stackoverflow.com/questions/7458139/net-is-type-gethashcode-guaranteed-to-be-unique не обязательно уникален. –