Типы ссылок в глубине - PullRequest
       9

Типы ссылок в глубине

0 голосов
/ 21 декабря 2009

Я понимаю, что семантика проверки на равенство изменяется в зависимости от того, проверяете ли вы типы значений или типы ссылок. Разве ссылочные типы не являются просто указателем более высокого уровня? Что именно происходит при использовании ссылочного типа? Все ли разыменование, апскейтинг и т. Д. Просто обрабатываются средой выполнения сейчас?

Ответы [ 5 ]

4 голосов
/ 21 декабря 2009

Да, именно, ссылочные типы являются просто «указателями» на память, которой управляет сборщик мусора.

C ++:

MyClass* mc = new MyClass();
Myclass* mc2 = mc;

mc == mc2 // true, points at the same memory address

C #:

MyClass mc = new MyClass();
MyClass mc2 = mc;

mc == mc2 // also true for the same reason
2 голосов
/ 21 декабря 2009

C # оператор равенства для ссылочных типов проверяет, ссылаются ли два операнда на один и тот же объект, если только оператор равенства не переопределен:

http://msdn.microsoft.com/en-us/library/53k8ybth.aspx

Для получения дополнительной информации о Object.Equals и операторе равенства == посмотрите здесь:

http://msdn.microsoft.com/en-us/library/ms173147.aspx

0 голосов
/ 21 декабря 2009

Ссылка - это структура данных, которая используется для управления объектом в памяти. Если вы знакомы с C, то, возможно, вы использовали буферизованные процедуры ввода-вывода, такие как fprintf (). Если вы посмотрите на дескриптор FILE fprintf в отладчике, то увидите, что указатель на данные является только одной зависимой от реализации деталью структуры данных. Библиотека C управляет всем выделением памяти, необходимой для fprintf ().

То же самое верно для ссылок. Расположение фактических данных может измениться, если вы не закрепите объект с помощью GCHandle. Однако закрепление объекта делает систему менее эффективной. Вы только сделаете это, чтобы связать буферы с неуправляемым кодом. Также: я согласен с timvw насчет поста Эрика Липперта, который он связал, но мне не хватает представителя, чтобы голосовать.

0 голосов
/ 21 декабря 2009

У Эрика Липперта отличный пост (также объясняющий связь между ссылкой, указателем и адресом) ... http://blogs.msdn.com/ericlippert/archive/2009/02/17/references-are-not-addresses.aspx

0 голосов
/ 21 декабря 2009

Проверьте здесь: http://www.albahari.com/valuevsreftypes.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...