Maison >développement back-end >C++ >Comment créer une copie profonde ou superficielle d'un objet en C# ?

Comment créer une copie profonde ou superficielle d'un objet en C# ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-13 12:14:44232parcourir

How to Create a Deep or Shallow Copy of an Object in 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 valeurs​​de 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn