«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > C# Boxing и распаковка: когда и зачем они нам нужны?

C# Boxing и распаковка: когда и зачем они нам нужны?

Опубликовано в 2025-01-29
Просматривать:778

C# Boxing and Unboxing: When and Why Do We Need Them?

Установка и бокс в C#: Сценарии причин и приложений

]

введение

в C#, загрузка и бокс являются необходимым механизмом для различных поведений скоординированных значений и ссылочных типов. Тем не менее, их цели и варианты использования могут сбить с толку программистов. Это руководство разъясняет, почему эти концепции имеют решающее значение, и приведены примеры практических применений.

Важность

boxing and boxing

инвафки и бокс позволяет C#для поддержания unified Type System

, чтобы тип значения и тип ссылки можно было последовательно взаимодействовать и обрабатываться. Типы значений (такие как короткие и Int) непосредственно хранят свои данные в переменных. Вместо этого ссылочный тип ссылается на основные объекты в других позициях в памяти.

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

сценарии приложения для бокса и бокса

]

Классический вариант использования для упаковки is оставлен , который принимает только объекты. Эти наборы должны быть упакованы для хранения типа значения, как показано в примере ArrayList:

Short s = 25; Object objShort = s; В эпоху в современном спрос на бокс снизился. Тем не менее, это все еще важно в конкретных сценариях:

]
short s = 25;
object objshort = s;  // 装箱
]]

double e = 2,718281828459045; int ee = (int) e;

Сравнение того же природы:
    тип ссылки по умолчанию по умолчанию по умолчанию. Чтобы сравнить нижнее значение, вам необходимо демонтировать и явно преобразование:
  • ] double e = 2,718281828459045; Объект O = E; // Упаковка int ee = (int) (двойной) o;
передача значения и ссылочная передача:
double e = 2.718281828459045;
int ee = (int)e;  // 从double到int的隐式转换(需要装箱)
подробности, которые необходимо обратить внимание на
  • ссылка, равное равному значению: тип ссылки использует ту же ссылку на сравнение, и в нем проверяется, является ли ссылка одинаковой, а не базовое значение. Это может привести к неожиданным результатам:
double e = 2.718281828459045;
object o = e;  // 装箱
int ee = (int)(double)o;  // 拆箱和显式转换
Копировать поведение:
    При установке структуры (тип значения) будет создана копия. Вместо этого при загрузке (тип ссылки) будет создана ссылка на исходный объект. Эта разность поведения повлияет на результаты расчета значения установки коробки:
  • ] [struct | Точка P = новая точка (1, 1); объект O = P; p.x = 2; Console.WriteLine (((((((()))) .x); // output: 1 (если это структура)/ 2 (если это класс)
  • ]
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3