העתקה עמוקה

מְחַבֵּר: Lewis Jackson
תאריך הבריאה: 8 מאי 2021
תאריך עדכון: 25 יוני 2024
Anonim
Deep Copying vs Shallow Copying
וִידֵאוֹ: Deep Copying vs Shallow Copying

תוֹכֶן

הגדרה - מה המשמעות של העתקה עמוקה?

העתקה עמוקה, ב- C #, מתייחסת לטכניקה שבאמצעותה נוצר עותק של אובייקט כך שהוא מכיל עותקים של שני חברי המופע וגם האובייקטים שאליהם מפנים חברי הפניה.

העתקה עמוקה מיועדת להעתיק את כל האלמנטים של אובייקט, הכוללים אלמנטים שהופנו ישירות (מסוג ערך) ואת האלמנטים שהפנו בעקיפין מסוג הפניה המחזיק הפניה (מצביע) למיקום זיכרון המכיל נתונים במקום להכיל את הנתונים עצמם. העתקה עמוקה משמשת בתרחישים שבהם נוצר עותק חדש (שיבוט) ללא כל התייחסות לנתונים מקוריים.


מבוא ל- Microsoft Azure ו- Microsoft Cloud | במהלך מדריך זה תוכלו ללמוד על אודות מיחשוב ענן וכיצד Microsoft Azure יכולה לעזור לכם להעביר ולנהל את העסק שלכם מהענן.

Techopedia מסביר Deep Copy

עותק עמוק שונה מהעתקה רדודה באופן בו מועתקים חברי ההפניה מסוג ההפניה. בעת העתקת חברי השדה מסוג הערך בשני המקרים, מבוצעת עותק אחר-אחד של השדה. בעת העתקת שדות מסוג הפניה, העתקה רדודה כוללת העתקה של ההפניה בלבד, ואילו בהעתקה עמוקה מבוצע עותק חדש של האובייקט המופנה.

ניתן להמחיש עותק עמוק באמצעות דוגמה על ידי התייחסות לאובייקט שכיר שיש לו AddressInfo כחבר מסוג הפניה יחד עם חברים אחרים מסוג הערך. עותק עמוק של עובד יוצר אובייקט חדש, Employee2, עם חברים מסוג ערך השווה לעובד אך מתייחס לאובייקט חדש, AddressInfo2, שהוא העתק של AddressInfo.

ניתן ליישם עותק עמוק באמצעות אחת מהשיטות הבאות:

  • ניתן ליישם בנאי העתקה של הכיתה עם ההיגיון הדרוש להעתקת חברים משני הערך וההפניה (לאחר הקצאת זיכרון נאותה). שיטה זו מייגעת ומועדת לטעות.
  • ניתן להשתמש בשיטת System.Object.MemberwiseClone להעתקת החברים הלא-סטטיים מסוג הערך.ניתן ליצור עותקים של אובייקטים מסוג הפניה ולהקצות אותם עם ערכים זהים למקור
  • ניתן לסדר את האובייקט שצריך להעתיק אותו בצורה עמוקה ולבצע מחדש את ההמשכים לאובייקט חדש על ידי שחזורו. שיטה זו הינה אוטומטית ואינה דורשת שינויי קוד לצורך שינויים בחברי האובייקט, אך היא איטית יותר משיטות אחרות ומחייבת את האובייקט המשובט להיות מסידרוני.
  • ניתן להשתמש בהשתקפות עם רקורסיה לקבלת עותק רדוד, ובשלב זה ניתן להוסיף את הקוד הנוסף הדרוש להעתקה עמוקה. שיטה זו היא אוטומטית ואינה דורשת שינויי קוד לצורך כל הוספה או הסרה של שדות באובייקט. זה איטי יותר ואסור בסביבת אמון חלקית
  • ניתן להשתמש בקוד שפה ביניים, שהוא מהיר יותר אך מביא לקריאת קוד פחות ותחזוקה קשה

ליישום העתק עמוק:


  • האובייקט צריך להיות מוגדר היטב ולא יכול להיות שרירותי
  • תכונות של אובייקט לא ייחשבו
  • יש לבצע אוטומציה של השיבוט בעזרת אינטליגנציה למקרים מיוחדים (כמו חפצים המכילים הפניות לא מנוהלות)