Бокс распаковка

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

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 остается тем же. Если так, то o ссылается на значение "123", а не на i. Так ли это? Если o хранит значение i, то когда Значение меня было изменено значение O тоже изменилось бы. Пожалуйста, поправьте меня, если я ошибаюсь.

1 ответ

Решение

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


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


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

пожалуйста, прочитайте полную статью на MSDN.

Бокс:- процесс преобразования из типа значения в тип ссылки Например

int val = 10;
object Obj = val;

UnBoxing:- Это полностью противоположно упаковке. Это процесс преобразования ссылочного типа в тип значения. Например

int val2 = (int)Obj;
Другие вопросы по тегам