Рекомендуем, 2024

Выбор редакции

Разница между боксом и распаковкой в ​​C #

В C # все типы значений являются производными от объекта класса. Таким образом, ссылочная переменная типа object может ссылаться на любой другой тип значения. C # представляет два метода для Boxing и Unboxing, которые связывают тип значения с ссылочным типом. Основное различие между Boxing и Unboxing заключается в том, что Boxing - это преобразование типа значения в тип объекта, тогда как, с другой стороны, термин Unboxing относится к преобразованию типа объекта в тип значения. Давайте изучим другие различия между боксом и распаковкой.

Сравнительная таблица

Основа для сравненияЗаниматься боксомРаспаковка
основнойТип объекта относится к типу значения.процесс получения значения из упакованного объекта.
Место храненияЗначение, хранящееся в стеке, копируется в объект, хранящийся в памяти кучи.Значение объекта, хранящееся в памяти кучи, копируется в тип значения, хранящийся в стеке.
преобразованиеНеявное преобразование.Явное преобразование.
примерint n = 24;
объект ob = n;
int m = (int) ob;

Определение бокса

Бокс - это процедура преобразования типа значения в тип объекта. Здесь тип значения хранится в стеке, а тип объекта хранится в памяти кучи. Это преобразование типа значения в тип объекта является неявным преобразованием. Вы можете напрямую присвоить значение объекту, а C # будет обрабатывать остальное преобразование. Давайте разберем бокс на примере.

 int i = 24; объект ob = i; // Помещаем целочисленный тип n в тип объекта ob. или объект ob1 = 21; // здесь также объектный тип ob1 ссылается на целочисленный тип 

В приведенном выше коде целочисленный тип i, содержащий значение 24, сохраняется в стеке и копируется в объектный тип ob. Тип объекта теперь ссылается на целочисленное значение. Теперь «int i» также содержит значение 24, а «тип объекта ob» также содержит значение 24, но оба значения не зависят друг от друга, т. Е. Если вы измените значение i, оно не будет отражать изменение в стоимость об.

Бокс потребляет дополнительную память вместе с дополнительным временем. Причина в том, что новый объект, который будет ссылаться на тип значения, должен выделять пространство памяти в куче. Затем значение типа значения, которое хранится в стеке, будет передано объекту типа ob в ячейку памяти кучи.

Определение распаковки

Реверс Бокса - Распаковка. Распаковка - это преобразование типа объекта в тип значения. При распаковке значение типа объекта в штучной упаковке, хранящегося в куче, переносится в тип значения, который хранится в стеке. В отличие от бокса, распаковка должна быть сделана явно. Тип объекта явно приведен к типу значения, и тип значения должен совпадать со значением, на которое ссылается тип объекта. Давайте разберемся в концепции Unboxing на примере.

 int i = 24; объект ob = i; // Помещаем целочисленный тип n в тип объекта ob. int j = (int) ob; // Распаковываем целочисленное значение, хранящееся в типе объекта ob, в целочисленный тип y. 

Значение, хранящееся в объекте ob, извлекается путем приведения его к типу, аналогичному тому, на который ссылался объект, то есть целочисленный тип «j».

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

Ключевые различия между боксом и распаковкой

  1. В боксе объект сделан ссылаться как тип значения. С другой стороны, процесс извлечения значения обратно из упакованного объекта называется распаковкой.
  2. Тип значения, хранящийся в стеке, копируется в объект, хранящийся в памяти кучи. С другой стороны, при распаковке объект, сохраненный в памяти кучи, копируется в тип значения, хранящийся в памяти стека.
  3. Бокс - это неявное преобразование, тогда как распаковка - это явное преобразование.

Заключение:

Как упаковка, так и распаковка занимают больше времени и памяти, а также требуют больших вычислительных ресурсов. Они также испытывают недостаток в безопасности типа и увеличивают накладные расходы времени выполнения. Всегда рекомендуется избегать слишком частого использования бокса и распаковки в программе.

Top