แนะนำ, 2024

ตัวเลือกของบรรณาธิการ

ความแตกต่างระหว่าง Boxing และ Unboxing ใน C #

ใน C # ชนิดของค่าทั้งหมดจะได้รับมาจากคลาสอ็อบเจ็กต์ ดังนั้นตัวแปรอ้างอิงของวัตถุชนิดสามารถอ้างถึงประเภทค่าอื่น ๆ C # แนะนำวิธีการสองอย่างคือ Boxing และ Unboxing ซึ่งเชื่อมโยงประเภทของค่ากับประเภทการอ้างอิง ความแตกต่างพื้นฐานระหว่าง Boxing และ Unboxing คือ Boxing คือการแปลงค่าประเภทเป็นประเภทวัตถุในขณะที่คำว่า Unboxing หมายถึงการแปลงประเภทวัตถุเป็นประเภทค่า ให้เราศึกษาความแตกต่างอื่น ๆ ระหว่าง Boxing และ Unboxing

แผนภูมิเปรียบเทียบ

พื้นฐานสำหรับการเปรียบเทียบมวยunboxing
ขั้นพื้นฐานประเภทวัตถุหมายถึงประเภทค่ากระบวนการดึงค่าจากวัตถุชนิดบรรจุกล่อง
การเก็บรักษาค่าที่เก็บไว้ในสแต็กจะถูกคัดลอกไปยังวัตถุที่เก็บไว้ในหน่วยความจำฮีปค่าของวัตถุที่เก็บไว้ในหน่วยความจำฮีปจะถูกคัดลอกไปยังประเภทของค่าที่เก็บไว้ในสแต็ก
การแปลงการแปลงโดยนัยการแปลงที่ชัดเจน
ตัวอย่างint n = 24;
วัตถุ ob = n;
int m = (int) ob;

ความหมายของมวย

Boxing เป็นกระบวนการของการแปลงประเภทของมูลค่าเป็นประเภทของวัตถุ ที่นี่ประเภทค่าจะถูกเก็บไว้ในสแต็กและประเภทวัตถุจะถูกเก็บไว้ในหน่วยความจำฮีป การแปลงค่าประเภทนี้เป็นประเภทวัตถุเป็นการแปลงโดยนัย คุณสามารถกำหนดค่าให้กับวัตถุโดยตรงและ C # จะจัดการการแปลงที่เหลือ มาทำความเข้าใจกับตัวอย่างของมวยกันเถอะ

 int i = 24; วัตถุ ob = i; // ใส่จำนวนเต็มชนิด n ลงในอ็อบเจกต์ ob หรือวัตถุ ob1 = 21 // นี่คือประเภทของวัตถุ ob1 หมายถึงประเภทจำนวนเต็ม 

ในโค้ดด้านบนประเภทจำนวนเต็ม i ที่มีค่า 24 จะถูกเก็บไว้ในสแต็กและถูกคัดลอกไปยังประเภทวัตถุ ob ขณะนี้ประเภทวัตถุหมายถึงค่าจำนวนเต็ม ตอนนี้“ int i” ยังมีค่า 24 และ“ ประเภทวัตถุ ob” ยังมีค่า 24 แต่ค่าทั้งสองเป็นอิสระจากกันเช่นถ้าคุณเปลี่ยนค่าของ i มันจะไม่สะท้อนการเปลี่ยนแปลงใน ค่าของ ob

Boxing ใช้หน่วยความจำเพิ่มเติมพร้อมกับเวลาพิเศษ เหตุผลก็คือวัตถุใหม่ซึ่งจะอ้างถึงประเภทของค่าจะต้องจัดสรรพื้นที่หน่วยความจำบนฮีป ถัดไปค่าของประเภทค่าที่เก็บไว้ในสแต็กจะถูกโอนไปยังประเภทวัตถุในตำแหน่งหน่วยความจำฮีป

คำจำกัดความของ Unboxing

การพลิกกลับของ Boxing คือ Unboxing Unboxing เป็นการแปลงประเภทออบเจคเป็นประเภทค่า ในการเลิกทำกล่องค่าชนิดของวัตถุชนิดบรรจุกล่องที่เก็บไว้ในฮีปจะถูกถ่ายโอนไปยังประเภทค่าที่เก็บอยู่ในสแต็ก ไม่เหมือนกับ Boxing การ Unboxing จะต้องทำอย่างชัดเจน ชนิดของวัตถุนั้นจะถูกส่งไปยังประเภทของค่าอย่างชัดเจนและประเภทของค่าจะต้องเหมือนกับค่าที่ชนิดของวัตถุนั้นอ้างถึง มาทำความเข้าใจกับแนวคิดของ Unboxing ด้วยตัวอย่าง

 int i = 24; วัตถุ ob = i; // ใส่จำนวนเต็มชนิด n ลงในอ็อบเจกต์ ob int j = (int) ob; // Unbox ค่าจำนวนเต็มเก็บไว้ในประเภทวัตถุ ob เป็นจำนวนเต็มชนิด y 

ค่าที่เก็บไว้ในอ็อบเจกต์ ob จะถูกดึงกลับมาโดยการหล่อมันให้เป็นชนิดเดียวกันกับที่วัตถุนั้นอ้างถึงเช่นจำนวนเต็ม“ j”

การแกะกล่องยังใช้หน่วยความจำมากขึ้นและมีเวลามากขึ้น ตั้งแต่เมื่อชนิดของวัตถุจะต้องถูก unboxed ค่าของประเภทวัตถุที่เก็บไว้ในกองจะต้องมีการถ่ายโอนไปยังประเภทค่าใหม่ที่เก็บไว้ในกอง ชนิดของวัตถุที่มีค่าที่ถูกดึงมาจะสามารถใช้งานได้สำหรับการรวบรวมขยะ

ความแตกต่างที่สำคัญระหว่าง Boxing และ Unboxing

  1. ในการชกมวยวัตถุถูกอ้างถึงเป็นประเภทของค่า ในทางตรงกันข้ามกระบวนการดึงค่ากลับจากวัตถุชนิดบรรจุกล่องเรียกว่า unboxing
  2. ชนิดของค่าที่เก็บไว้ในสแต็กจะถูกคัดลอกไปยังวัตถุที่เก็บไว้ในหน่วยความจำฮีป ในทางกลับกันใน unboxing วัตถุที่เก็บไว้ในหน่วยความจำฮีปจะถูกคัดลอกไปยังประเภทค่าที่เก็บไว้ในหน่วยความจำสแต็ค
  3. Boxing คือการแปลงโดยปริยายในขณะที่ unboxing เป็นการแปลงที่ชัดเจน

สรุป:

ทั้งการชกมวยและ unboxing ใช้เวลาและความทรงจำมากขึ้นและมีค่าใช้จ่ายในการคำนวณ พวกเขายังขาดความปลอดภัยประเภทและเพิ่มค่าใช้จ่ายรันไทม์ ขอแนะนำเสมอเพื่อหลีกเลี่ยงการใช้มวยและ unboxing มากเกินไปในโปรแกรม

Top