どうやらClone()メソッドは自前で用意する必要があるようです。
調べたところ、オブジェクトをコピー(Clone)する場合MemberwiseClone()が便利そうなので動作確認をしてみます。
ソースコード
using System;
using System.Reflection.Metadata.Ecma335;
using System.Security.Cryptography.X509Certificates;
namespace OpenCVFilters3.Console;
class Program1
{
class DeepCopyTest
{
public string Name { get; set; } = "DeepCopyTest Class";
public Guid Id { get; set; }
public int Ksize { get; set; } = 3;
public DeepCopyTest()
{
Id = Guid.NewGuid();
}
public DeepCopyTest DeepCopy()
{
var obj = (DeepCopyTest)this.MemberwiseClone();
obj.Id = Guid.NewGuid();
obj.Name = new string(Name);
return obj;
}
}
static void Main()
{
var obj = new DeepCopyTest();
System.Console.WriteLine($"original Id:{obj.Id} Ksize:{obj.Ksize} Name:{obj.Name} ");
var clone = obj.DeepCopy();
obj.Name = "Foo";
obj.Ksize = 9;
System.Console.WriteLine($"original2 Id:{obj.Id} Ksize:{obj.Ksize} Name:{obj.Name} ");
System.Console.WriteLine($" clone Id:{clone.Id} Ksize:{clone.Ksize} Name:{clone.Name} ");
}
}
実行結果
original Id:36bb2a70-6133-4e04-9d0b-a0ae8e8c9824 Ksize:3 Name:DeepCopyTest Class original2 Id:36bb2a70-6133-4e04-9d0b-a0ae8e8c9824 Ksize:9 Name:Foo clone Id:542bf739-d15d-487b-aa75-bfa460039c96 Ksize:3 Name:DeepCopyTest Class
Idは重複すると具合が悪いプロパティなので、コピーせずに別の値のオブジェクトを生成しています。
オリジナルのオブジェクトのプロパティの値を変更してもコピー先のオブジェクトに影響がないことが確認出来ました。
以上
コメント