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