Получить строковое представление ссылки на объект в vb.net
Я хочу создать хеш-таблицу ссылок на объекты и хочу, чтобы ключом была ссылка на другой объект. Как я могу сделать это в vb.net?
В Java (при условии, что я использую метод toString по умолчанию, а add() принимает строку в качестве ключа и объект ref в качестве значения), это будет что-то вроде:
hashtable.add(obj1.toString(), obj2)
Я не хочу использовать функцию getbashcode() vb.net, потому что я хочу, чтобы глубокие клоны объектов имели разные идентификаторы.
С этим связан вопрос: что такое по умолчанию toString в vb.net?
Вкратце: как я могу получить строку, которая представляет ссылку на объект в vb.net?
3 ответа
Если вы хотите, чтобы ссылка на объект была ключом хеш-таблицы, просто используйте сам объект.
hashtable.Add(obj1, obj2)
Чтобы ответить на ваш второй вопрос, реализация по умолчанию ToString
в VB.Net это позвонить в Object.ToString
, В.Net это распечатает имя типа базового экземпляра
Одна из возможностей (хотя я не могу сказать, что рекомендую это по целому ряду причин) - использовать.net-эквивалент функции VB6 ObjPtr. По сути, вы закрепляете объект в памяти, а затем можете получить адрес памяти для этого объекта (который гарантированно будет уникальным).
увидеть это сообщение
http://forums.devx.com/showthread.php?t=122407
С другой стороны, если бы мне действительно нужен уникальный идентификатор для объекта, я бы, вероятно, расширил объект и добавил бы свойство "ObjectID" только для чтения, которое всегда возвращает сгенерированный GUID для этого конкретного экземпляра объекта.
Если эти идентификаторы нигде не были сохранены, вы также можете создать одноэлементный объект "IDGenerator", который просто раздает инкрементные целочисленные значения, и использовать эти int как идентификаторы для своих объектов. Но опять же, вы не захотите сохранять эти int-идентификаторы, потому что они не будут уникальными для всех ваших приложений. Кроме того, в зависимости от того, сколько объектов вы создаете, вам может потребоваться сделать его длинным целым, а не просто целым.
Вам было бы гораздо лучше использовать строго типизированный словарь:
Dim myDict As New Dictionary(Of myObject1Type,myObject2Type)
myDict(obj1) = obj2