คัดลอกลึก

ผู้เขียน: Lewis Jackson
วันที่สร้าง: 8 พฤษภาคม 2021
วันที่อัปเดต: 25 มิถุนายน 2024
Anonim
Shallow and Deep Copy Python Programming Tutorial
วิดีโอ: Shallow and Deep Copy Python Programming Tutorial

เนื้อหา

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

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

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


ข้อมูลเบื้องต้นเกี่ยวกับ Microsoft Azure และ Microsoft Cloud | ในคู่มือนี้คุณจะได้เรียนรู้ว่าการประมวลผลแบบคลาวด์คืออะไรและ Microsoft Azure สามารถช่วยคุณในการโยกย้ายและดำเนินธุรกิจจากคลาวด์อย่างไร

Techopedia อธิบาย Deep Copy

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

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

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

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

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


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