the important thing is not to stop questioning

导航

 

由于值类型存在装箱和拆箱的过程,所有导致在修改值类型对象内部数据时,有可能会出现一些与预想不同的结果。

比如

 1             Point p = new Point(1, 1);
 2             Console.WriteLine(p);
 3             p.Change(2, 2);
 4             Console.WriteLine(p);
 5             Object o = p;
 6             Console.WriteLine(o);
 7             ((Point)o).Change(3, 3);
 8             Console.WriteLine(o);
 9             ((IChangeBoxedPoint)p).Change(4, 4);
10             Console.WriteLine(p);
11             ((IChangeBoxedPoint)o).Change(5, 5);
12             Console.WriteLine(o);

第9行,如果p是引用类型,则没有任何问题,值会被修改为4,4,但是p是值类型,所以输出的仍然是原来的值2,2

所以值类型最好是immutable,声明的时候都声明为readonly

posted on 2016-04-22 11:17  qook  阅读(241)  评论(0编辑  收藏  举报