以下のコードを見てください (C# の本からの抜粋):
public class MyClass
{
public int val;
}
public struct myStruct
{
public int val;
}
public class Program
{
private static void Main(string[] args)
{
MyClass objectA = new MyClass();
MyClass objectB = objectA;
objectA.val = 10;
objectB.val = 20;
myStruct structA = new myStruct();
myStruct structB = structA;
structA.val = 30;
structB.val = 40;
Console.WriteLine("objectA.val = {0}", objectA.val);
Console.WriteLine("objectB.val = {0}", objectB.val);
Console.WriteLine("structA.val = {0}", structA.val);
Console.WriteLine("structB.val = {0}", structB.val);
Console.ReadKey();
}
}
以下の出力が生成されることを理解しています。
objectA.val = 20
objectB.val = 20
structA.val = 30
structB.val = 40
出力の最後の 2 行は問題ありませんが、最初の 2 行はobjectA
とobjectB
が同じメモリ ブロックを指していることを示しています (C# ではオブジェクトは参照型であるため)。
問題は、メモリ内の別の領域を指すようobjectB
に のコピーを作成する方法です。objectA
それらのメンバーも参照である可能性があるため、メンバーを割り当てようとするとうまくいかない場合があることを理解しています。objectB
では、 とはまったく異なるエンティティを作成するにはどうすればよいobjectA
でしょうか?