Бокс распаковка
Я нашел следующий фрагмент кода при поиске бокса и распаковки в 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;