Maison >développement back-end >C++ >Comment créer de véritables copies d'objets en C# lorsqu'il s'agit de types référence ?

Comment créer de véritables copies d'objets en C# lorsqu'il s'agit de types référence ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-13 12:33:52979parcourir

How Do I Create True Copies of Objects in C# When Dealing with Reference Types?

Clonage d'objets en C# : Comprendre les types de référence

En C#, les objets sont principalement des types référence, ce qui signifie qu'ils font référence à l'emplacement mémoire où leurs données sont stockées. Cela contraste avec les types valeur, qui contiennent leurs données directement dans leurs variables. Lorsqu'une copie d'un type référence est créée, elle crée uniquement une copie de la référence, pas les données réelles vers lesquelles elle pointe.

Exemple : Comprendre les types de référence

Considérez le code suivant :

<code class="language-csharp">public class MyClass
{
    public int val;
}

public struct myStruct
{
    public int val;
}

public class Program
{
    public static void Main(string[] args)
    {
        MyClass objectA = new MyClass();
        MyClass objectB = objectA;

        objectA.val = 10;
        objectB.val = 20;

        Console.WriteLine($"objectA.val = {objectA.val}");
        Console.WriteLine($"objectB.val = {objectB.val}");
    }
}</code>

La sortie de ce code montre que malgré les modifications, objectA et objectB ont la même valeur, indiquant qu'ils font référence au même emplacement mémoire.

Cloner un objet de type référence

Pour créer une copie d'un objet de type référence différent de l'objet d'origine, vous devez cloner l'objet. Cela implique la création d'un nouvel objet qui possède les mêmes propriétés et valeurs que l'objet d'origine, mais qui est stocké dans un emplacement mémoire distinct.

Utiliser l'interface IClonable

En C#, vous pouvez utiliser l'interface ICloneable pour cloner des objets. Les classes qui implémentent cette interface fournissent une méthode Clone qui crée une copie de l'objet.

Ce qui suit est un exemple d'utilisation de l'interface ICloneable :

<code class="language-csharp">public class MyClass : ICloneable
{
    public string test;

    public object Clone()
    {
        return this.MemberwiseClone();
    }
}</code>
<code class="language-csharp">MyClass a = new MyClass();
MyClass b = (MyClass)a.Clone();</code>

Dans cet exemple, la méthode Clone fournie par l'interface ICloneable est remplacée pour créer un nouvel objet avec les mêmes propriétés que l'objet d'origine, clonant ainsi l'objet.

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