2014-12-20 3 views
-1

Я нашел следующий фрагмент кода во время поиска по боксу и распаковке в C#.boxing unboxing

class TestBoxing 
{ 
    static void Main() 
    { 
     int i = 123; 

     // Boxing copies the value of i into object o. 
     object o = i; 

     // Change the value of i. 
     i = 456; 

     // The change in i does not effect the value stored in o. 
     System.Console.WriteLine("The value-type value = {0}", i); 
     System.Console.WriteLine("The object-type value = {0}", o); 
    } 
} 
/* Output: 
    The value-type value = 456 
    The object-type value = 123 
*/ 

А здесь он говорит, что несмотря на то, что он значение I изменяется величина O остается same.If так, то о ссылаются на значение «123», а не i.Is это так? Если о хранящемся значение i, то при изменении значения I значение o также изменилось бы. Пожалуйста, поправьте меня, если я ошибаюсь.

+2

'// Бокс копирует значение –

+0

Вам нужно различать тип значения и ссылочный тип. Тип значения всегда копируется при назначении, если вы не используете ключевое слово ref или out при переходе в метод. Типы ссылок не получают копии, но указывают на. –

ответ

6

Бокс - это процесс преобразования типа значения в объект типа или в любой тип интерфейса, реализованный этим типом значений. Когда CLR вводит тип значения, он переносит значение внутри объекта System.Object и сохраняет его на управляемой куче. Unboxing извлекает тип значения из объекта. Бокс неявный; unboxing является явным. Концепция бокс и unboxing лежит в основе унифицированного представления C# системы типов , в которой значение любого типа можно рассматривать как объект.


int i = 123; 
// The following line boxes i. 
object o = i; 

enter image description here


o = 123; 
i = (int)o; // unboxing 

enter image description here

пожалуйста, прочитайте full article on MSDN.

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