บ้าน พัฒนาการ สำเนาลึกคืออะไร? - คำจำกัดความจาก techopedia

สำเนาลึกคืออะไร? - คำจำกัดความจาก techopedia

สารบัญ:

Anonim

คำจำกัดความ - Deep Copy หมายถึงอะไร

สำเนาลึกใน C # หมายถึงเทคนิคที่มีการสร้างสำเนาของวัตถุดังกล่าวซึ่งประกอบด้วยสำเนาของสมาชิกอินสแตนซ์และวัตถุที่ชี้ไปโดยสมาชิกอ้างอิง


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

Techopedia อธิบาย Deep Copy

สำเนาลึกนั้นแตกต่างจากสำเนาตื้น ๆ ในลักษณะที่สมาชิกประเภทอ้างอิงของวัตถุถูกคัดลอก ในขณะที่การคัดลอกสมาชิกฟิลด์ของประเภทค่าในทั้งสองกรณีจะทำการคัดลอกฟิลด์แบบทีละบิต เมื่อคัดลอกฟิลด์ประเภทอ้างอิงสำเนาตื้น ๆ จะเกี่ยวข้องกับการคัดลอกเฉพาะการอ้างอิงเท่านั้นในขณะที่สำเนาลึกจะมีการดำเนินการคัดลอกใหม่ของวัตถุที่อ้างอิง


สำเนาลึกสามารถแสดงพร้อมกับตัวอย่างโดยพิจารณาอ็อบเจ็กต์พนักงานที่มี AddressInfo เป็นสมาชิกของชนิดการอ้างอิงพร้อมกับสมาชิกประเภทค่าอื่น สำเนาลึกของพนักงานสร้างวัตถุใหม่ Employee2 ที่มีสมาชิกของประเภทค่าเท่ากับพนักงาน แต่อ้างอิงวัตถุใหม่ AddressInfo2 ซึ่งเป็นสำเนาของ AddressInfo


การทำสำเนาแบบลึกสามารถทำได้โดยใช้วิธีใด ๆ ต่อไปนี้:

  • ตัวสร้างการคัดลอกของคลาสสามารถนำไปใช้กับตรรกะที่จำเป็นสำหรับการคัดลอกสมาชิกของทั้งค่าและการอ้างอิง (หลังจากการจัดสรรหน่วยความจำที่เหมาะสม) ประเภท วิธีนี้น่าเบื่อและผิดพลาดง่าย
  • วิธีการ System.Object.MemberwiseClone สามารถใช้เพื่อคัดลอกสมาชิก nonstatic ของชนิดค่า สำเนาของวัตถุประเภทอ้างอิงสามารถสร้างและกำหนดด้วยชุดค่าเดียวกันกับต้นฉบับ
  • วัตถุที่จะต้องมีการทำสำเนาอย่างลึกสามารถทำให้เป็นอนุกรมและทำให้เป็นวัตถุที่ไม่ต่อเนื่องเป็นวัตถุใหม่โดยการกู้คืนมัน วิธีนี้เป็นไปโดยอัตโนมัติและไม่จำเป็นต้องมีการเปลี่ยนแปลงรหัสสำหรับการแก้ไขในสมาชิกวัตถุ แต่ช้ากว่าวิธีอื่นและต้องการให้วัตถุที่โคลนได้ต่อเนื่องกัน
  • การสะท้อนด้วยการเรียกซ้ำสามารถใช้เพื่อรับสำเนาตื้นซึ่งเป็นจุดที่สามารถเพิ่มรหัสเพิ่มเติมที่จำเป็นสำหรับการทำสำเนาลึก วิธีการนี้เป็นไปโดยอัตโนมัติและไม่ต้องการการเปลี่ยนแปลงโค้ดสำหรับการเพิ่มหรือลบฟิลด์ในวัตถุ มันช้าลงและไม่ได้รับอนุญาตในสภาพแวดล้อมที่เชื่อถือได้บางส่วน
  • สามารถใช้รหัสภาษาระดับกลางซึ่งเร็วขึ้น แต่ส่งผลให้รหัสอ่านน้อยลงและบำรุงรักษาได้ยาก

ในการติดตั้งสำเนาลึก:

  • วัตถุต้องมีการกำหนดอย่างดีและไม่สามารถกำหนดเองได้
  • คุณสมบัติของวัตถุจะไม่ได้รับการพิจารณา
  • การโคลนนิ่งต้องเป็นแบบอัตโนมัติพร้อมด้วยความฉลาดสำหรับกรณีพิเศษ (เช่นวัตถุที่มีการอ้างอิงที่ไม่มีการจัดการ)
สำเนาลึกคืออะไร? - คำจำกัดความจาก techopedia