Операции упаковки и распаковки
Упаковка
Упаковка-преобразование представляет собой процесс преобразования типа значения в тип object или любой другой тип интерфейса, реализуемый этим типом значения.
Упаковка-распаковка
Когда тип значения упаковывается средой CLR, она создает программу-оболочку значения внутри System.Object и сохраняет ее в управляемой куче.
Операция распаковки-преобразования извлекает тип значения из объекта.
Упаковка-преобразование является неявной; распаковка-преобразование является явной.
Упаковка
int i = 123;
// The following line boxes i. object o = i;
Распаковка
o = 123;
i = (int)o; // unboxing
Производительность
По сравнению с простыми операциями присваивания операции упаковки-преобразования и распаковки-преобразования являются весьма затратными процессами с точки зрения вычислений.
При выполнении упаковки-преобразования типа значения необходимо создать и разместить новый объект.
Объем вычислений при выполнении операции распаковки- преобразования, хотя и в меньшей степени, но тоже весьма значителен.
Упаковка
Упаковка используется для хранения типов значений в куче "сбора мусора".
Упаковка представляет собой неявное преобразование типа значения в тип object или любой другой тип интерфейса, реализуемый этим типом значения.
При упаковке типа значения в куче выделяется экземпляр объекта и выполняется копирование значения в этот новый объект.
Упаковка
int i = 123;
// The following line boxes i. object o = i;
Упаковка-преобразование
явй.
Распаковка
Распаковка является явным преобразованием из типа object в тип значения или из типа интерфейса в тип значения, его реализующее.Операция распаковки состоит из следующих действий.
Проверка экземпляра объекта на то, что он является упакованным значением заданного типа значения.
Копирование значения из экземпляра в переменную типа- значения.
Распаковка
o = 123;
i = (int)o; // unboxing
Распаковка-преобразование