比如有这样一个类型public class A
{
private string b;
public string B
{
get {return b;}
set{b=value;}
}
}public class C
{
private A d;
public A D
{
get{return d;}
}
}如果调用代码是这样
C c = new C();
c.D.B = "1000";
这样就修改了c.D的值,虽然D的地址没有变,但是内容已经变了
如果我想保证该GET属性是一个只读属性不能被任何外部代码修改,应该怎样做呢

解决方案 »

  1.   

    除非你把A的B属性设置为只读的:public class A
    {
    private string b;
    public string B
    {
    get {return b;}
    }
    }
      

  2.   

    private string b;
    public string B
    {
    get {return b;}
    }
    }
      

  3.   

    只有get{}     只读
    只有set{}     只写
    get{}和set{}  可读可写
      

  4.   

    public String Text{get;private set;}  //只能在类中修改其值,如果在类外修改其值,声明为只读有何意义?
      

  5.   

    除了二楼的,其他兄弟好象还没怎么明白你的意思呢!如果你的类型A在多处使用(即不限于只在类C中声明属性D)并且每处都要求其属性B不被更改,那最好将B属性声明为常量或用readonly修饰,
    同上,但并非所有情况都有类似的要求,那最好是在里面设个开关变量如allowModified什么的?然后在B属性里先检查该开关变量,如果为false,就拒绝更改!还有一个方法,就是实现INotifyPropertyChanging接口,然后在类型C中为d关联其PropertyChanging事件,在该事件中视情况将e.Cancel设置为true。但在B属性的定义中要检查事件的参数e,看事件是否被取消,如果取消了,就拒绝更改!我还是觉得后一种方法比较好!
      

  6.   

    可能是我出题有点乱,ABCD没有什么依据,不过还是谢谢各位热心的网友.1楼与6楼的说法应该是对的.但是因为我不想修改A类,因为A类已经被很多类依赖了,而且其属性已经被很多地方利用到了,所以我不想改了,在文档中警告就好了.谢谢各位