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

ผู้เขียน: Laura McKinney
วันที่สร้าง: 2 เมษายน 2021
วันที่อัปเดต: 5 พฤษภาคม 2024
Anonim
UPBOX July “Be Sweet” Box Unboxing 🍍 +Coupon
วิดีโอ: UPBOX July “Be Sweet” Box Unboxing 🍍 +Coupon

เนื้อหา


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

  1. แผนภูมิเปรียบเทียบ
  2. คำนิยาม
  3. ความแตกต่างที่สำคัญ
  4. ข้อสรุป

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

พื้นฐานสำหรับการเปรียบเทียบมวย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 เป็นการแปลงประเภทของวัตถุเป็นประเภทของค่า ในการเลิกทำกล่องค่าชนิดของวัตถุชนิดบรรจุกล่องที่เก็บไว้ในฮีปจะถูกถ่ายโอนไปยังชนิดของค่าที่เก็บอยู่ในสแต็ก ซึ่งแตกต่างจากการชกมวย Unboxing จะต้องทำอย่างชัดเจน ชนิดของวัตถุนั้นจะถูกส่งไปยังประเภทของค่าอย่างชัดเจนและชนิดของค่าจะต้องเหมือนกับค่าที่ชนิดของวัตถุนั้นอ้างถึง มาทำความเข้าใจแนวคิดของ Unboxing ด้วยตัวอย่าง

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

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

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

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

สรุป:

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