自定义值类型时(比如结构体),为什么最好让这个结构体“不可改变呢?”
-----------------------------------------------------------------------
看c#本质论 中,有这种描述,但是,我没有理解是什么意思?
为何自定义的值类型,最好不可改变呢?值类型,也要可以改变呀?比如 整型,也是可以改变的呀?
int i;
i=8;
i=9;所以我不明白,值类型不可改变是什么意思?

解决方案 »

  1.   

    效率、原子性。比如
    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 的结果就让人迷惑了四川珠海是什么地方?
      

  2.   

    个人理解,结构是保存在栈结构上的
    比如定义一个结构
    struct S
    {
    int a;
    int b;
    }
    那很容易得出,这个结构占8个字节,所以在栈结构上,如果连续定义 S[10],那么很容易通过S[0]+8个字节的存储位置得出S[1]的位置
    而如果你经常改变结构里面的成员,那么以上的实现就要不停修改了
      

  3.   

    不是你理解的意思,结构成员当然不能改了。
    c#本质论中的意思是:不能修改成员的值
    S sss;
    sss.a=45;
    sss.b=78;
      

  4.   

    我也正看到这里有点困惑,Mark一下,同等结果。