值类型与引用类型的区别
引用类型持有的是对对象的引用,而值类型变量持有的是完整的对象。
引用类型和值类型应用中最本质的区别在于当你把引用类型b的值赋值给了引用类型a后,再对引用类型b的值进行了改变后,引用类型a和b的
值都是改变了以后的值,但是对于值类型a和b进行相同的操作后,a的值将会是值类型b的值改变前的值,当然值类型b的值是改变以后的值。
具体实例见下面代码:(原因:引用类型持有的是对对象的引用,当引用类型b的值改变时,由于之前将引用类型b的值赋值给a的过程,已经
将b的对象的引用赋值给了a,所以b的值改变,a的值一样会随着改变,图解见:C#揭秘 pg59页的4.7,4.8,4.9)
引用类型赋值的实例:
1 Custom cust1=new Custom();//Custom是一个类名:即cust1是引用类型
2 cust1.Name="John Smith";
3 Custom cust2=new Custom();
4 cust2.Name="Jane Doe";
5 Console.WriteLine("赋值之前:");
6 Console.WriteLine("cust1:{0}",cust1.Name);
7 Console.WriteLine("cust2:{0}",cust2.Name);//输出的是:赋值之前:cust1:John Smith cust2:Jane Doe
8 cust1=cust2;//对引用类型进行了赋值,把cust2对象的引用赋值给了cust1,并不是把对象赋值给cust1.所以改变cust2的值时,cust1也会随
9 //之改变
10 Console.WriteLine("赋值之后:");
11 Console.WriteLine("cust1:{0}",cust1.Name);
12 Console.WriteLine("cust2:{0}",cust2.Name);//输出的是: 赋值之后:cust1:Jane Doe cust2:Jane Doe ,这里是cust对对象的引用已
13 //经指向了cust2的了,并不是像值类型一样把对象进行赋值。
14
15 cust2.Name="Mark Jordon";//引用类型被改变了,
16 Console.WriteLine("引用类型被改变后:");
17 Console.WriteLine("cust1:{0}",cust1.Name);
18 Console.WriteLine("cust2:{0}",cust2.Name);//输出的是: 引用类型被改变后:cust1:Mark Jordon cust2:Mark Jordon ,因为cust1和
19 //cust2一样他们的值都是指向cust2对象。
上面的代码如果Custom是一个结构体,则cust1,cust2就是值类型,则最后输出的结果会改变为Jane Doe和Mark Jordon,因为值类型赋值时
赋的是对象本身,不是对对象的引用。
posted on 2012-03-08 16:45 xuelang1225 阅读(214) 评论(0) 收藏 举报
浙公网安备 33010602011771号