对于C#中b=a的N种情况分析
本文旨在验证一个容易混淆的概念,从而为玩转WPF/Silverlight中INotifyProperty做铺垫。
两个相同类型的变量a和b,并且有如下关系:
b = a;
如果a发生改变,b是否也发生改变呢?
情况很复杂,分以下几种情况谈论:
1) 单个实体
1. 简单类型
先考察int:
int a = 1;
int b = a;
a = 2;
Console.WriteLine("b: " + b);
int b = a;
a = 2;
Console.WriteLine("b: " + b);
输出结果:
再考察一下string:
string a = "1";
string b = a;
a = "2";
Console.WriteLine("b: " + b);
string b = a;
a = "2";
Console.WriteLine("b: " + b);
输出结果:
如果不放心,还可以测试一下Enum,结果类似,详见Demo。
结论:简单类型是组成复合类型的最基本单位,是原子,不可再拆分,所以不管是值类型double、int还是引用类型string,b都不随a的改变而改变,因为它们指向全局堆栈(对于string而言是托管堆)上的同一个地址。
2. 复合类型
复合类型是由string、int、double这些简单类型组成的。
分别定义一个复合的引用类型(class)和一个复合的值类型(struct)。
class UserInfo
{
public string UserName;
public int Age;
}
struct UserInfo2
{
public string UserName;
public int Age;
}
{
public string UserName;
public int Age;
}
struct UserInfo2
{
public string UserName;
public int Age;
}
先讨论引用类型:
 
补充:软件开发 , C# ,