ホームページ >バックエンド開発 >C++ >参照型を扱う場合、C# でオブジェクトの真のコピーを作成するにはどうすればよいですか?

参照型を扱う場合、C# でオブジェクトの真のコピーを作成するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-13 12:33:52979ブラウズ

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

C# でのオブジェクトの複製: 参照型について理解する

C# では、オブジェクトは主に参照型であり、データが保存されているメモリの場所を参照することを意味します。これは、データを変数に直接含む値型とは対照的です。参照型のコピーが作成されるときは、参照のコピーのみが作成され、それが指す実際のデータは作成されません。

例: 参照型を理解する

次のコードを考えてみましょう:

<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>

このコードの出力は、変更にもかかわらず、objectA と objectB が同じ値を持ち、同じメモリ位置を参照していることを示しています。

参照型オブジェクトのクローン

元のオブジェクトとは異なる参照型オブジェクトのコピーを作成するには、オブジェクトのクローンを作成する必要があります。これには、元のオブジェクトと同じプロパティと値を持つ新しいオブジェクトを作成することが含まれますが、別のメモリ場所に保存されます。

ICloneable インターフェイスを使用する

C# では、ICloneable インターフェイスを使用してオブジェクトのクローンを作成できます。このインターフェイスを実装するクラスは、オブジェクトのコピーを作成する Clone メソッドを提供します。

次に、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>

この例では、ICloneable インターフェイスによって提供される Clone メソッドがオーバーライドされ、元のオブジェクトと同じプロパティを持つ新しいオブジェクトが作成され、オブジェクトのクローンが効果的に作成されます。

以上が参照型を扱う場合、C# でオブジェクトの真のコピーを作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。