我有以下样本。
namespace sample
{
public class Customer
{
public int ID { get; set; }
public string Name { get; set; }
}
class Program
{
static void Main(string[] args)
{
Customer C1 = new Customer();
C1.ID = 100;
C1.Name = "Mary";
Customer C2 = C1;
C2.Name = "Sandra";
Console.WriteLine("C1.Name ={0} && C2.Name = {1}", C1.Name, C2.Name);
}
}
}
为C2分配新值时,为什么C1的值会发生变化。所以最后得到以下结果:C1.Name = Sandra&& C2.Name =桑德拉
答案 0 :(得分:2)
因为它们都是对同一个对象的引用!
相反的是:
Customer C1 = new Customer();
C1.ID = 100;
C1.Name = "Mary";
// New instance stored on C2 reference
// so now both are different references to also
// different objects
Customer C2 = new Customer();
C2.Name = "Sandra";
答案 1 :(得分:0)
C1
和C2
都是引用到Customer
的同一个实例。
C2.Name = "Sandra";
通过引用C2
您可以<{>} 将Customer
更改为值类型,方法是将其设为struct
而不是class
,或者使用语法Customer C2 = new Customer();
用于创建新的Customer
对象。
答案 2 :(得分:0)
您观察到的现象称为aliasing。您已创建参考C1
和C2
。但是,这些不是指不同的对象,而是指一个对象,即构造函数调用new Customer()
创建的对象。显然你期待声明
Customer C2 = C1;
创建新客户对象,然后为其分配与C1
相同的值。情况并非如此 - 您创建一个名为C2
的新引用,它引用与C1
相同的对象。