Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

Boxing และ Unboxing ใน C#

Boxing (การบรรจุ)

การแปลง Value Type → Reference Type (Object) แบบ Implicit (อัตโนมัติ)

int val = 12;
object boxed = val; // Boxing: คัดลอกค่า 12 ไป Heap, boxed ชี้ไปที่นั่น

กระบวนการ: จองหน่วยความจำบน Heap → คัดลอกค่า Value type ไป → Reference ชี้ไปที่ Object บน Heap

Unboxing (การแปรงกลับ)

การแปลง Reference Type (Object) → Value Type แบบ Explicit (ต้อง Cast)

int unboxed = (int)boxed; // Unboxing: ตรวจสอบ Type แล้วคัดลอกค่ากลับ Stack

กระบวนการ: ตรวจสอบว่า Object เป็น Type ที่ถูกต้อง → คัดลอกค่าจาก Heap กลับ Stack

ตัวอย่างเพิ่มเติม: ArrayList (เก่า)

int a = 5;
ArrayList list = new ArrayList();
list.Add(a);        // Boxing: int → object
int b = (int)list[0]; // Unboxing: object → int

ผลกระทบประสิทธิภาพ

  • Boxing - จอง Heap, Copy ค่า, GC pressure
  • Unboxing - Type check, Copy ค่า
  • หลีกเลี่ยงด้วย Generics (List<int> แทน ArrayList)

สรุป

หัวข้อBoxingUnboxing
ทิศทางValue → ReferenceReference → Value
Implicit/ExplicitImplicitExplicit (Cast)
MemoryStack → HeapHeap → Stack
Performanceช้ากว่าช้ากว่า