2015-08-28 3 views
0

Как мы все знаем, классы в .NET передаются по ссылке и структурируются по значению.Как классы могут передаваться по ссылке в .NET?

В небезопасном коде вы можете иметь указатели на структуры, но не на классы, так как они перемещаются GC. Например, если у вас есть указатель на массив, вы либо должны поместить его в оператор fixed (если вы выделили его в кучу), либо stackalloc (для размещения в стеке).

С учетом сказанного, как можно передать классы по ссылке, если они перемещены GC?

+0

@SamAxe Все параметры передаются по значению по умолчанию, включая объект –

+0

@ johnny5: err, yes. Моя ошибка в этой части. Я его подкорректирую. –

+1

«classes» - это языковая конструкция, которая не имеет значения за пределами исходного кода. Класс компилируется в тип. Тип может быть создан как объект и передан. –

ответ

3

Что движется GC? GC фиксирует. Поскольку GC имеет , найдите все ссылки на объект в любом случае (чтобы увидеть, является ли это GC'able), это небольшой дополнительный шаг до смените эти ссылки, чтобы указать на новый адрес.

1

Вы можете представить экземпляр класса как дескриптор, тогда ссылка на дескриптор будет всего лишь еще одной косвенностью (вид указателя на дескриптор) по вызову метода. Поскольку сам объект остается скрытым за ручкой, он может быть перемещен без видимого эффекта.

Смежные вопросы