Пожалуйста, уточните мое понимание относительно объекта и ссылки, а тип значения актуален? - PullRequest
4 голосов
/ 23 февраля 2010

Пожалуйста, уточните мое понимание относительно объекта и ссылки, а тип значения актуален?

Объект означает область памяти в ОЗУ, где мы выделяем память при выполнении программы

Ссылка означает местоположение (адрес) в памяти.

Передача с помощью эталонного средства - мы передаем или указываем область памяти для функции, чтобы получить значения для функции, из которой был передан адрес памяти.

Передача по значению означает, что мы не даем никакого адреса, который мы даем действительному значению функции. Откуда это значение берется из ОЗУ? это не трогает баран во время казни? Он поступает только из другой области памяти ... но в чем разница в терминах исполнения в визуальном контексте? как я могу представить?

Ответы [ 2 ]

3 голосов
/ 23 февраля 2010

Я бы не беспокоился об оперативной памяти и т. Д.

Основным отличием здесь является то, что вы передаете в метод.

Когда вы передаете по ссылке (ref или out в C #), вы передаете местоположение в памяти исходного объекта.

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

Если переменная является ссылочным типом, передаваемое значение является ссылкой на объект, который в основном является ячейкой памяти. Ссылка копируется в метод.

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

1 голос
/ 23 февраля 2010

object является экземпляром class. Память для объекта и любых членов хранится в куче. Обычно это называется [Reference Type][2], что означает, что он обрабатывается как ссылка (указатель) на местоположение.

В отличие от struct - это Value Type, который обрабатывается напрямую.

Передача предмета By Reference (ключевое слово ref или ключевое слово out, как указывает Рид) передает ссылку (указатель) на рассматриваемый предмет. Это означает, что если вы передаете object по ссылке, вы передаете указатель на указатель на объект в памяти.

Объект

    arg(stack) -> oRef(heap) -> oData(heap)

Это означает, что мы можем изменить указатель на другое место (то есть на совершенно другой объект).

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

    arg(stack) -> oData(heap)
...