Сравнительная таблица
Основа для сравнения | Заниматься боксом | Распаковка |
---|---|---|
основной | Тип объекта относится к типу значения. | процесс получения значения из упакованного объекта. |
Место хранения | Значение, хранящееся в стеке, копируется в объект, хранящийся в памяти кучи. | Значение объекта, хранящееся в памяти кучи, копируется в тип значения, хранящийся в стеке. |
преобразование | Неявное преобразование. | Явное преобразование. |
пример | 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».
Распаковка также занимает больше памяти и больше времени. Так как, когда тип объекта должен быть распакован, тогда значение типа объекта, сохраненного в куче, должно быть перенесено в новый тип значения, хранящийся в стеке. Тип объекта, значение которого было получено, теперь будет доступен для сборки мусора.
Ключевые различия между боксом и распаковкой
- В боксе объект сделан ссылаться как тип значения. С другой стороны, процесс извлечения значения обратно из упакованного объекта называется распаковкой.
- Тип значения, хранящийся в стеке, копируется в объект, хранящийся в памяти кучи. С другой стороны, при распаковке объект, сохраненный в памяти кучи, копируется в тип значения, хранящийся в памяти стека.
- Бокс - это неявное преобразование, тогда как распаковка - это явное преобразование.
Заключение:
Как упаковка, так и распаковка занимают больше времени и памяти, а также требуют больших вычислительных ресурсов. Они также испытывают недостаток в безопасности типа и увеличивают накладные расходы времени выполнения. Всегда рекомендуется избегать слишком частого использования бокса и распаковки в программе.