Maison >développement back-end >C++ >Comment créer une copie profonde ou superficielle d'un objet en C# ?
Clonage d'objets en C#
Le code suivant illustre la différence de comportement des types référence (classes) et des types valeur (structures) en C#. Plus précisément, la question est la suivante : comment créer une copie d'un objet en C# qui pointe vers une zone différente de la mémoire ?
Les classes en C# sont des types référence, ce qui signifie que lorsque vous affectez un objet de classe à un autre objet, vous attribuez en fait une référence au même objet sous-jacent. Par conséquent, toute modification apportée à l’un ou l’autre objet affectera les deux instances. Dans le code fourni, lorsque vous affectez objectA à objectB, vous créez un alias d'objectA plutôt qu'une instance distincte.
Pour créer une copie fidèle d'un objet, vous devez implémenter l'interface ICloneable
dans votre classe. Cette interface fournit la méthode Clone()
, qui crée une nouvelle instance de l'objet. En remplaçant la méthode Clone()
, vous pouvez contrôler le processus de clonage et définir les champs et propriétés à copier.
Dans le code fourni, l'extrait de code suivant montre comment implémenter le clonage :
<code class="language-csharp">class myClass : ICloneable { public String test; public object Clone() { return this.MemberwiseClone(); } }</code>
Une fois qu'une classe implémente ICloneable
, vous pouvez créer une vraie copie en utilisant le code suivant :
<code class="language-csharp">myClass a = new myClass(); myClass b = (myClass)a.Clone();</code>
Il convient de noter que MemberwiseClone()
crée une copie superficielle, qui copie les valeursde tous les champs et propriétés, mais ne copie aucun objet imbriqué. Si vous devez créer une copie complète, vous devez implémenter un processus de clonage personnalisé qui prend en compte les objets imbriqués.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!