结构类型,枚举类型都是值类型;类,字符串,委托都是引用类型。
int a = 1;
int b = a;
a = 2;
Console.WriteLine("a:{0};b:{1}", a, b);//a:2;b:1
string aa = "123";
string bb = aa;
aa = "234";
Console.WriteLine("aa:{0};bb:{1}", aa, bb);//aa:234;bb:123
Test2 aaa = new Test2();//Test2是结构体,包含一个属性a;
aaa.a = 1;
Test2 bbb = new Test2();
bbb = aaa;
aaa.a = 2;
Console.WriteLine("aaa:{0};bbb:{1}", aaa.a,bbb.a);//aaa:2;bbb:1
Test aaaa = new Test();//Test是类3,包含一个属性a;
aaaa.a = 1;
Test bbbb = new Test();
bbbb = aaaa;
aaaa.a = 2;
Console.WriteLine("aaa:{0};bbb:{1}", aaaa.a, bbbb.a);//aaaa:2;bbbb:2
对于string类型,每次改变其值,都是重新赋予一个新的地址,所以虽然string是引用类型,bb的值却仍然指向之前aa的地址。