Как се прилага хешът в .NET?

Възможен дубликат:
Как работи Object.GetHashCode, когато GC премества обект?

Събирачът на отпадъци в .NET премества обекти, така че адресът на обекта не е стабилен. Как е внедрен методът GetHashCode() на Object?

Благодаря!


person fish    schedule 03.08.2010    source източник
comment
Методът GetHashCode няма нищо общо с местоположението на обекта. Това също е виртуален метод, така че всеки тип може да го дефинира според нуждите.   -  person John Saunders    schedule 03.08.2010


Отговори (1)


Събирачът на отпадъци присвоява на всеки обект уникален идентификатор и това е, което внедряването на GetHashCode по подразбиране използва вместо местоположението на паметта.

Редактиране Всъщност е малко по-сложно от това. Не искам да подвеждам никого, така че вие ​​трябва да предпочетете Отговорът на Джон Скийт по темата.

person zneak    schedule 03.08.2010
comment
+1 както за верния отговор, така и за връзката ви :) - person SqlRyan; 03.08.2010
comment
Не мисля, че връзката съдържа правилна информация, поне не и с най-новата версия на .NET. Когато извикам заключване на обект, виждам, че използването на паметта му се увеличава, в съответствие със създаването на блок за синхронизиране. Но не виждам увеличение на използването на паметта, когато извикам GetHashCode, така че не мисля, че създава блок за синхронизиране. - person fish; 03.08.2010
comment
@fish: според мен това не е много научен начин да се тества. Откъде знаете, че увеличаването на паметта е свързано с блока за синхронизиране, а не с каквото и да е друго, което .NET създава, когато използвате Monitor.Enter? - person zneak; 03.08.2010
comment
@fish: В .net 2.0 значението на думата sync-block беше променено, така че може или да съдържа индекс на sync-block, или неизменен идентификатор на обект, използваем от GetHashCode (има малко, което идентифицира какво е представено). Ако думата на синхронизиращия блок съдържа индекс на синхронизиращ блок, тогава дума в рамките на синхронизиращия блок ще съдържа гореспоменатия идентификатор на обект. - person supercat; 22.01.2013