日期:2014-05-18  浏览次数:20921 次

自定义值类型时(比如结构体),为什么最好让这个结构体“不可改变呢?”
自定义值类型时(比如结构体),为什么最好让这个结构体“不可改变呢?”
-----------------------------------
看c#本质论 中,有这种描述,但是,我没有理解是什么意思?
为何自定义的值类型,最好不可改变呢?

值类型,也要可以改变呀?比如 整型,也是可以改变的呀?
int i;
i=8;
i=9;

所以我不明白,值类型不可改变是什么意思?


------解决方案--------------------
效率、原子性。

比如
struct PersonInfo
{
public string City { get; set; }
public string Province { get; set; }
...
}

PersonInfo p = new PersonInfo() { City = "珠海", Province = "广东" };
p.Province = "四川";
... //这里出错了,下面没有执行。
if (false) p.City = "成都";
这时候 p 的结果就让人迷惑了。。。四川珠海是什么地方?
------解决方案--------------------
个人理解,结构是保存在栈结构上的
比如定义一个结构
struct S
{
int a;
int b;
}
那很容易得出,这个结构占8个字节,所以在栈结构上,如果连续定义 S[10],那么很容易通过S[0]+8个字节的存储位置得出S[1]的位置
而如果你经常改变结构里面的成员,那么以上的实现就要不停修改了