Βαθύ αντίγραφο

Συγγραφέας: Lewis Jackson
Ημερομηνία Δημιουργίας: 8 Ενδέχεται 2021
Ημερομηνία Ενημέρωσης: 25 Ιούνιος 2024
Anonim
Αντίγραφο του EΠΙΤΑΦΙΟΣ ΒΑΘΥ ΚΑΛΥΜΝΟΥ 2013
Βίντεο: Αντίγραφο του EΠΙΤΑΦΙΟΣ ΒΑΘΥ ΚΑΛΥΜΝΟΥ 2013

Περιεχόμενο

Ορισμός - Τι σημαίνει Deep Copy;

Το βαθύ αντίγραφο, στο C #, αναφέρεται σε μια τεχνική με την οποία δημιουργείται ένα αντίγραφο ενός αντικειμένου έτσι ώστε να περιέχει αντίγραφα και των δύο μελών στιγμιότυπων και τα αντικείμενα που υποδεικνύονται από μέλη αναφοράς.

Το βαθύ αντίγραφο προορίζεται για την αντιγραφή όλων των στοιχείων ενός αντικειμένου, τα οποία περιλαμβάνουν άμεσα αναφερόμενα στοιχεία (τύπου τιμής) και τα έμμεσα αναφερόμενα στοιχεία ενός τύπου αναφοράς που περιέχει μια αναφορά (δείκτη) σε μια θέση μνήμης που περιέχει δεδομένα αντί να περιέχει δεδομένα. Το βαθύ αντίγραφο χρησιμοποιείται σε σενάρια όπου δημιουργείται ένα νέο αντίγραφο (κλώνος) χωρίς καμία αναφορά στα αρχικά δεδομένα.


Εισαγωγή στη Microsoft Azure και το Microsoft Σε αυτό τον οδηγό θα μάθετε τι είναι το cloud computing και πώς η Microsoft Azure μπορεί να σας βοηθήσει να μεταφέρετε και να εκτελέσετε την επιχείρησή σας από το cloud.

Η Techopedia εξηγεί το Deep Copy

Το βαθύ αντίγραφο διαφέρει από το ρηχό αντίγραφο με τον τρόπο με τον οποίο αντιγράφονται τα μέλη τύπου αναφοράς του αντικειμένου. Κατά την αντιγραφή των μελών πεδίου του τύπου τιμής και στις δύο περιπτώσεις, εκτελείται αντίγραφο bit του πεδίου. Κατά την αντιγραφή πεδίων αναφοράς, το ρηχό αντίγραφο περιλαμβάνει την αντιγραφή μόνο της αναφοράς, ενώ σε βαθιά αντίγραφα γίνεται ένα νέο αντίγραφο του αναφερόμενου αντικειμένου.

Το βαθύ αντίγραφο μπορεί να απεικονιστεί με ένα παράδειγμα εξετάζοντας ένα αντικείμενο Εργαλείου που έχει διεύθυνση AddressInfo ως μέλος τύπου αναφοράς μαζί με άλλα μέλη τύπου τύπου. Ένα βαθύ αντίγραφο του Employee δημιουργεί ένα νέο αντικείμενο, Employee2, με μέλη τύπου τύπου ίσο με τον Employee, αλλά αναφέρει ένα νέο αντικείμενο, AddressInfo2, το οποίο είναι ένα αντίγραφο του AddressInfo.

Το βαθύ αντίγραφο μπορεί να υλοποιηθεί χρησιμοποιώντας οποιαδήποτε από τις ακόλουθες μεθόδους:


  • Ο κατασκευαστής αντιγράφων της κλάσης μπορεί να εφαρμοστεί με την απαραίτητη λογική για την αντιγραφή των μελών τόσο της τιμής όσο και της αναφοράς (μετά από κατάλληλη κατανομή μνήμης). Αυτή η μέθοδος είναι κουραστική και επιρρεπής σε σφάλματα.
  • Η μέθοδος System.Object.MemberwiseClone μπορεί να χρησιμοποιηθεί για την αντιγραφή των μη στατικών μελών του τύπου τιμής.Αντίγραφα αντικειμένων τύπου αναφοράς μπορούν να δημιουργηθούν και να αντιστοιχιστούν με το ίδιο σύνολο τιμών με το πρωτότυπο
  • Ένα αντικείμενο που πρέπει να αντιγραφεί βαθιά μπορεί να σειριοποιηθεί και να απο-σειριοποιήσει το σε ένα νέο αντικείμενο επαναφέροντάς το. Αυτή η μέθοδος είναι αυτοματοποιημένη και δεν απαιτεί αλλαγές κώδικα για τροποποιήσεις στα μέλη του αντικειμένου, αλλά είναι πιο αργή από άλλες μεθόδους και απαιτεί το κλωνοποιημένο αντικείμενο να είναι σειριοποιήσιμο
  • Η αντανάκλαση με αναδρομή μπορεί να χρησιμοποιηθεί για να πάρει ένα ρηχό αντίγραφο, οπότε μπορεί να προστεθεί ο πρόσθετος κώδικας που απαιτείται για βαθιά αντίγραφα. Αυτή η μέθοδος είναι αυτοματοποιημένη και δεν απαιτεί αλλαγές κώδικα για οποιαδήποτε προσθήκη ή αφαίρεση πεδίων στο αντικείμενο. Είναι πιο αργή και δεν επιτρέπεται σε περιβάλλον μερικής εμπιστοσύνης
  • Μπορεί να χρησιμοποιηθεί ενδιάμεσος κωδικός γλώσσας, ο οποίος είναι ταχύτερος αλλά οδηγεί σε λιγότερη ανάγνωση του κώδικα και δύσκολη συντήρηση

Για να εφαρμόσετε το βαθύ αντίγραφο:


  • Το αντικείμενο πρέπει να είναι καλά καθορισμένο και δεν μπορεί να είναι αυθαίρετο
  • Οι ιδιότητες του αντικειμένου δεν θα ληφθούν υπόψη
  • Η κλωνοποίηση πρέπει να είναι αυτοματοποιημένη με ευφυΐα για ειδικές περιπτώσεις (όπως αντικείμενα που περιέχουν μη διαχειριζόμενες αναφορές)