Тип ссылки является объектом? - PullRequest
1 голос
/ 19 января 2011

В моем предыдущем вопросе (касающемся добавления элементов в ArrayList) один из авторов написал, что «ссылка уже является объектом» - как это подразумевалось? Я не понимаю этого. Я думал, что ссылка - это просто адрес объекта, который я могу передать:

object X=5;

object A=X; //here I am assigning reference to X so both are pointing to copy of 5

Также с примером ArrayList, он на самом деле хранит ссылки ... но я опять запутался с типом ссылки "System.Object". Что это значит?

Буду очень признателен за простые примеры. Я понимаю разницу между типами значений и типами ref.types, однако я не могу понять это, хотя знаю, что это работает.

Ответы [ 2 ]

4 голосов
/ 19 января 2011

То, что вы сделали в своем коде, получает тип значения и помещает его в «коробку», так что теперь это ссылочный тип в куче, который содержит значение «5». Я бы порекомендовал вам начать с попытки понять значения / ссылочные типы в C #, изменчивость / неизменность и бокс / распаковка .

Вот хорошая ссылка для начала: http://msdn.microsoft.com/en-us/library/yz2be5wk.aspx

Книга Джона Скита "C # подробно" также хорошо справляется с этим (раздел 2.3.4).

Надеюсь, это поможет.

1 голос
/ 19 января 2011

Первая строка - это операция упаковки, которая создает коробочную копию целого числа 5. Ссылка на этот новый объект хранится в X

Во второй строке значение ссылки (в широком смысле это адрес, но адреса и ссылки логически отличаются) копируется в A, так как это просто копия "ldloc, stloc" , В этом сценарии есть только один объект; объект в штучной упаковке, созданный в первой строке.

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