Упаковка\Распаковка | Boxing\Unboxing

Boxing\Unboxing

Упаковка-преобразование - процесс преобразования структурного(значимого) типа в ссылочный тип ValueType, Object или любой другой тип интерфейса, реализуемый этим типом, для сохранения значения в куче. (Подробнее о структурах: Структура | Structure).

Зачастую лучше использовать изначальное создание структуры сразу либо на стеке (если она небольшая), либо в управляемой куче (если она большая), так как создание\упаковка множества мелких структур ссылочного типа в памяти может привести к задержкам выполнения программы (особенности работы Garbage Collector, которому нужно будет проверить актуальность использования всех ссылок в управляемой куче).

Создание переменной структурного типа:

int a = 42;

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

Tip: Упаковка-преобразование является неявной.

object b = a;

Распаковка-преобразование. Извлечение структурного типа из Object.

Tip: Распаковка-преобразование является явной.

int c = (int)b;

Важно! Распаковка может производиться исключительно в тот тип, из которого была осуществлена упаковка. Так как при распаковке среда выполнения проверяет совместимость между объектом и структурой, в которую будет происходить распаковка.

Концепция упаковки и распаковки лежит в основе единой системы типов C#, в которой значение любого типа можно рассматривать как объект.

Упаковка (boxing) предполагает преобразование объекта значимого типа (например, типа int) к типу object. При упаковке общеязыковая среда CLR обертывает значение в объект типа System.Object и сохраняет его в управляемой куче (хипе). Распаковка (unboxing), наоборот, предполагает преобразование объекта типа object к значимому типу. Упаковка и распаковка ведут к снижению производительности, так как системе надо осуществить необходимые преобразования.

results for ""

    No results matching ""