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