Boxing là việc gói một value type (int, struct...) vào một object trên heap để coi nó như reference type. Unboxing là thao tác ngược lại: lấy value type ra khỏi box, cần ép kiểu tường minh và phải đúng kiểu gốc.
csharp
int n = 42;
object boxed = n; // boxing: cấp phát trên heap, copy giá trị vào
int back = (int)boxed; // unboxing: kiểm tra kiểu + copy raChi phí:
- Boxing cấp phát bộ nhớ trên heap → tạo áp lực cho GC.
- Unboxing tốn một lần kiểm tra kiểu; sai kiểu ném InvalidCastException.
Boxing hay xảy ra âm thầm khi đưa value type vào API kiểu object (vd ArrayList, string.Format). Tránh nó bằng generics (List<int> thay ArrayList) để giữ dữ liệu ở dạng value type, không cấp phát heap.