下面两端代码,一个是标准写法,一个是自己写的简化代码,请问大家不用属性构造器直接用公共变量可以么?差别在哪里呢
ListItem自己定义的
public class ListItem2
    {
        public string ID;
        public string Name;
        public override string ToString()
        {
            return "[" + ID.ToString () + "]" + Name.ToString ();
        }
    }
ListItem标准写法
public class ListItem1
    {
        private string id = string.Empty;
        private string name = string.Empty;
        public ListItem1(string sid, string sname )
        {
            id = sid;
            name = sname;
 
        }
        public override string ToString()
        {
            return "[" + id + "]" + name ;
        }
        public string ID
        {
            get
            {
                return this.id;
            }
            set
            {
                this.id = value;
            }
        }
        public string Name
        {
            get
            {
                return this.name;
            }
            set
            {
                this.name = value;
            }
        }
    }

解决方案 »

  1.   

    好处在封装
    对你的例子来说
    外界不能访问id,而只能通过ID来访问,也就是说外界并不知道你内部有个叫id的string,这样就达到了
    对外界封装关于id信息的好处
      

  2.   

    读写都要有而且不要求控制的时候,直接用变量编写代码速度快多了。是追求高效而且懒惰程序员的首选!尤其是写 DEMO 程序,或者TEST 程序的时候。
      

  3.   

    1,没有强行比较的必要性,看使用场景
    2,两者有根本性区别
        public static void GetValue(out int oId)
        {
           oId = 5;
        }
        public class Bean
        {
            public int idField;
            private int idPropertyField_;
            public int IdProperty
            {
                get { 
                      return id_; 
                      // todo 楼上所说的灵活性就体现于此
                }
                set { 
                     id_ = value;
                     // todo  楼上所说的灵活性就体现于此
                }
            }
        }
        Bean bean = new Bean();
        XXX.GetValue(out bean.idField);  // OK
        XXX.GetValue(out bean.IdProperty); // Error3,数据绑定则用Property
    4,...
      

  4.   

    return id_; >> return idPropertyField_;
    id_ = value; >> idPropertyField_ = value;
      

  5.   


    还有就是你这个只是简单的
    但是有些是有特殊要求的比如只读的
    只有一个get或者只有一个set等等
    比如单一模式用到的属性
    set赋值处就可以判断这个属性是否被实例化了还有一点 用属性规范点
      

  6.   

    up,写get,set的最主要目的就是封装~所以lz要说有什么好处,可以去看看封装的好处是什么
      

  7.   

    直接定义叫字段,封装以下叫属性,如果你不封装一下就可能带来很多的问题。
    我们就可以随时地改变字段的值了,因为有时有些字段是不允许修改的,这时
    就可以直接设置get{}就行了,而如果只需修改而不允许查看是就直接设置
    set{}。这些都是出于安全考虑。
      

  8.   

    将字段封装成属性,也方便你封装一些逻辑属性就相当于get 和 set两个函数
      

  9.   

    既是类的封装,使用户通过get、set方法进行访问,而用户不必知道是如何实现的,增加安全性。