Что такое boxing и unboxing

boxing и unboxing — это два важных процесса, связанных с преобразованием типов между значимыми типами (value types) и ссылочными типами (reference types). Эти процессы играют ключевую роль в работе с обобщенными коллекциями и при взаимодействии между различными частями .NET Framework.

Boxing

Это процесс преобразования переменной значимого типа (например, `int` или `struct`) в тип `object` или в любой другой тип интерфейса, реализуемый этим значимым типом. При боксинге переменная значимого типа оборачивается в объект ссылочного типа, и её значение копируется в новый объект на управляемой куче. Это необходимо, потому что все элементы в .NET в конечном итоге должны быть объектами.

```csharp
int num = 123;
object obj = num;  // Boxing
```


В этом примере переменная `num` типа `int` (значимый тип) помещается внутрь объекта `obj`. При этом создаётся объект в куче, и значение `num` копируется в этот новый объект.

Unboxing

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

```csharp
object obj = 123;  // Boxing
int num = (int)obj;  // Unboxing
```


Здесь объект `obj`, содержащий значение `123`, преобразуется обратно в переменную значимого типа `int`.

  • Производительность: Боксинг и анбоксинг могут негативно сказаться на производительности, поскольку они влекут за собой операции с памятью, включая выделение памяти и сборку мусора. Поэтому рекомендуется минимизировать их использование, особенно в критичных по производительности частях приложения.
  • Нужда: Несмотря на возможное негативное влияние на производительность, боксинг и анбоксинг необходимы для работы со значимыми типами в контекстах, где требуются объекты (например, при работе с коллекциями типа `ArrayList`).

Хотя боксинг и анбоксинг полезны для обеспечения совместимости между значимыми и ссылочными типами, их следует использовать осознанно и с осторожностью из-за потенциального влияния на производительность.

April 13, 2024, easyoffer