получить строковое представление ссылки на объект в vb.net - PullRequest
2 голосов
/ 03 июня 2011

Я хочу создать хеш-таблицу ссылок на объекты и хочу, чтобы ключом была ссылка на другой объект.Как я могу сделать это в vb.net?

В Java (при условии, что я использую метод toString по умолчанию и что add () принимает строку в качестве ключа и объект ref в качестве значения), это будет что-тонапример:

hashtable.add(obj1.toString(), obj2)

Я не хочу использовать функцию getbashcode () vb.net, потому что я хочу, чтобы глубокие клоны объектов имели разные идентификаторы.

Смежный вопрос: что такое toString по умолчанию в vb.net?

Вкратце: как получить строку, представляющую ссылку на объект в vb.net?

Ответы [ 3 ]

2 голосов
/ 03 июня 2011

Если вы хотите, чтобы ссылка на объект была ключом хеш-таблицы, просто используйте сам объект.

hashtable.Add(obj1, obj2)

Чтобы ответить на ваш второй вопрос, реализация по умолчанию ToString в VB.Net заключается в вызове Object.ToString.В .Net это выведет имя типа базового экземпляра

0 голосов
/ 03 июня 2011

Одна из возможностей (хотя я не могу сказать, что рекомендую это по целому ряду причин) - использовать .net-эквивалент функции VB6 ObjPtr.По сути, вы закрепляете объект в памяти, а затем можете получить адрес памяти для этого объекта (который гарантированно будет уникальным).

см. Эту запись

http://forums.devx.com/showthread.php?t=122407

С другой стороны, если бы мне действительно нужен уникальный идентификатор для объекта, я бы, вероятно, расширил объект и добавил бы свойство «ObjectID» только для чтения, которое всегда возвращает сгенерированный GUID для этого конкретного экземпляра объекта.

Если эти идентификаторы нигде не были сохранены, вы также можете создать одноэлементный объект «IDGenerator», который просто раздает инкрементные целочисленные значения, и использовать эти int в качестве идентификаторов для ваших объектов.Но опять же, вы не захотите сохранять эти int-идентификаторы, потому что они не будут уникальными для всех ваших приложений.Кроме того, в зависимости от того, сколько объектов вы создаете, вам может потребоваться сделать его длинным целым, а не просто целым.

0 голосов
/ 03 июня 2011

Вам было бы гораздо лучше использовать строго типизированный словарь:

Dim myDict As New Dictionary(Of myObject1Type,myObject2Type)
myDict(obj1) = obj2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...