logo search
CSharp_Prog_Guide

Упаковка-преобразование4

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

Рассмотрим следующее объявление переменной типа значения.

int i = 123;

Следующий оператор неявно применяет операцию упаковки к переменной i.

object o = i; // implicit boxing

Результат этого оператора создает ссылку на объект o в стеке, которая ссылается на значение типа int в куче. Это значение является копией значения типа значения, назначенного переменной i. Разница между двумя этими переменными, i и o, продемонстрирована на рисунке ниже.

Упаковка-преобразование

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

int i = 123;

object o = (object)i; // explicit boxing

Description

This example converts an integer variable i to an object o by using boxing. Then, the value stored in the variable i is changed from 123 to 456. The example shows that the original value type and the boxed object use separate memory locations, and therefore can store different values.

Example

class TestBoxing

{

static void Main()

{

int i = 123;

object o = i; // implicit boxing

i = 456; // change the contents of i

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