请看下面的代码(摘自一本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
我对输出的最后两行没有问题,但前两行告诉我objectA
和objectB
指向同一内存块(由于在C#中,对象是引用类型)。
问题是如何使objectB
成为objectA
的副本,以便它指向内存中不同的区域。我明白尝试分配它们的成员可能不起作用,因为这些成员可能也是引用。那么我该怎么做才能使objectB
成为与objectA
完全不同的实体呢?