Copie Profonde

Auteur: Lewis Jackson
Date De Création: 8 Peut 2021
Date De Mise À Jour: 25 Juin 2024
Anonim
Copie profonde
Vidéo: Copie profonde

Contenu

Définition - Que signifie copie profonde?

Copie profonde, en C #, fait référence à une technique selon laquelle une copie d'un objet est créée de telle sorte qu'elle contienne des copies des deux membres d'instance et des objets pointés par les membres de référence.

La copie en profondeur est destinée à copier tous les éléments d’un objet, y compris les éléments directement référencés (de type valeur) et les éléments indirectement référencés d’un type référence qui contient une référence (pointeur) dans un emplacement mémoire contenant des données plutôt que les éléments correspondants. les données elles-mêmes. La copie complète est utilisée dans les scénarios dans lesquels une nouvelle copie (clone) est créée sans aucune référence aux données d'origine.


Introduction à Microsoft Azure et au nuage Microsoft | Tout au long de ce guide, vous apprendrez ce qu'est le cloud computing et comment Microsoft Azure peut vous aider à migrer et à exploiter votre entreprise à partir du cloud.

Techopedia explique Deep Copy

La copie profonde diffère de la copie superficielle par la manière dont les membres de type référence de l'objet sont copiés. Lors de la copie des membres de champ de type valeur dans les deux cas, une copie bit par bit du champ est effectuée. Lors de la copie de champs de type référence, la copie superficielle consiste à ne copier que la référence, tandis qu'en copie profonde, une nouvelle copie de l'objet référencé est effectuée.

La copie en profondeur peut être illustrée à l'aide d'un exemple en considérant un objet Employé ayant AddressInfo comme membre de type référence avec d'autres membres de type valeur. Une copie complète de Employee crée un nouvel objet, Employee2, avec des membres de type de valeur égaux à Employee, mais fait référence à un nouvel objet, AddressInfo2, qui est une copie de AddressInfo.

La copie en profondeur peut être implémentée en utilisant l’une des méthodes suivantes:


  • Le constructeur de copie de la classe peut être implémenté avec la logique nécessaire à la copie de membres de types valeur et référence (après une allocation de mémoire appropriée). Cette méthode est fastidieuse et sujette aux erreurs.
  • La méthode System.Object.MemberwiseClone peut être utilisée pour copier les membres non statiques du type valeur.Des copies d'objets de type référence peuvent être créées et affectées avec le même ensemble de valeurs que l'original.
  • Un objet qui doit être copié en profondeur peut être sérialisé et désérialisé en un nouvel objet en le restaurant. Cette méthode est automatisée et ne nécessite pas de modifications de code pour les modifications dans les membres d'objet, mais est plus lente que les autres méthodes et nécessite que l'objet cloné soit sérialisable.
  • La réflexion avec la récursion peut être utilisée pour obtenir une copie superficielle, auquel cas le code supplémentaire nécessaire à la copie profonde peut être ajouté. Cette méthode est automatisée et ne nécessite aucune modification de code pour l'ajout ou la suppression de champs dans l'objet. Il est plus lent et non autorisé dans un environnement de confiance partielle
  • Le code de langue intermédiaire peut être utilisé, ce qui est plus rapide mais entraîne une lisibilité moindre du code et une maintenance difficile

Pour implémenter la copie en profondeur:


  • L'objet doit être bien défini et ne peut être arbitraire
  • Les propriétés de l'objet ne seront pas considérées
  • Le clonage doit être automatisé avec intelligence pour des cas particuliers (comme des objets contenant des références non gérées)