public class NullTest
 {
        private string _id = string.Empty;        public string Id
        {
            get { return _id; }
            set { _id = value; }
        }        public static readonly NullTest Null = new NullTest();
 }我这样发现,只有项目组里只要有人写过这样的代码NullTest.Null.Id = "Little Pig";那么NullTest.Null.Id就不再是string.Empty了除了约定大家都不对Null的成员赋值,还有什么办法可以限制变更Null的成员

解决方案 »

  1.   


    public class NullTest 

            private string _id = string.Empty;         public string Id 
            { 
                get { return _id; } 
            }         public static readonly NullTest Null = new NullTest(); 

      

  2.   

    public class NullTest 

            private string _id = string.Empty;         public string Id 
            { 
                get { return _id; } 
              //  set { _id = value; }  去掉可写属性呗~
            }         public static readonly NullTest Null = new NullTest(); 
      

  3.   

    这样的写法本身就有问题,单件模式又不是(构造函数默认),类本身自引用,照楼主说的应该是,不管new多少遍都是指向一个实体
      

  4.   

    除了约定大家都不对Null的成员赋值,还有什么办法可以限制变更Null的成员 
    你就把不允许赋值的属性都定义为只读嘛
    或用单例模式
      

  5.   

    Id 这个属性在其他的地方是要赋值的public static readonly NullTest Null = new NullTest(); 这个不就是最简单的单例吗?
    单例好象也不能防止你修改属性的
      

  6.   


    const 只能用作值类型和string
      

  7.   

    还可以这样
    public class NullTest 

            private string _id = string.Empty;         public string Id 
            { 
                get { return _id; } 
            }         public static NullTest Null
           {
                get{
                      return new NullTest(); 
                   }
           }

      

  8.   

    Id 这个属性在其他的地方是要赋值的
    ---------------------------------
    那你得确定,哪些地方只读,哪些地方可写。比如,对外只读,对内可写  public string Id{get;internal set;}
    public class NullTest 

         private NullTest(){}     public string Id{get;internal set;}     //下面每次返回的都是同一个,并不是每次获取就是一个新实例(这样的话我觉得直接让他们构造得了)
         NullTest nullTest;
         public static NullTest Null
         {
             get
             {
                  if (nullTest==null)
                     nullTest=new NullTest();              return nullTest;
              }
         }
    }