2016-11-17 8 views
0

Я читал о passing by reference in C# и при этом читаю следующее предложение, которое меня смущает.Передача по ссылке/значению - Соотношение бокса/беспорядка

«Нет бокса типа значения, когда он передается по ссылке».

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

+2

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

+2

Я не согласен, что это дублированный вопрос. Они говорят об одном и том же, но ответа на вопрос, который обращается к вопросу ОП, нет. Голосование для повторного открытия. – itsme86

+1

[Этот ответ] (http://stackoverflow.com/a/4807391/1141432) более непосредственно связан с вопросом ОП. – itsme86

ответ

0

Если вы передаете типы значений по ссылке, не задействован бокс и unboxing. Есть псевдоним памяти, как сказано в C# в двух словах. Вы даже можете попробовать его в Linqpad. После отображения его в IL-коде вы увидите, что не задействован бокс/unboxing.

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