一直认为定义属性的格式是:
 private int m_mp;
          public int MyProperty
          {
              get { return m_mp; }
              set { m_mp = value; }
          }
可是在用VS2008的"prop"自动实现属性代码段时出来的却是
public int MyProperty { get; set; }
想问一下这样写可以吗?
还有就是这样做把属性这样封装起来有什么好处,直接调用类里的字段不行吗?

解决方案 »

  1.   


    public int MyProperty { get; set; }这样写只是vs2008提供的“懒人写法” 呵呵 等同于
    public int MyProperty
              {
                  get { return m_mp; }
                  set { m_mp = value; }
              }这样使用属性可以控制其读写性,如果让属性只能读就只提供get
      

  2.   

    就和:
    public int MyProperty 
              { 
                  get { return m_mp; } 
                  set { m_mp = value; } 
              } 
    一样用法。值取得还是字段的值,字段的值当然要你赋啦,属性只是2个方法而已。
      

  3.   

    .NET3.0就是那样的,写个属性就隐含字段了,还可以set或者get上添加private或protected呢
      

  4.   

    的C#语言特性:自动属性(Automatic Properties)如果你现在是C#开发人员的话,你大概非常习惯编写象下面这个代码片段一样带有基本属性的类型:
        public class Person {        private string _firstName;
            private string _lastName;
            private int _age;
            
            public string FirstName {            get {
                    return _firstName;
                }
                set {
                    _firstName = value;
                }
            }        public string LastName {            get {
                    return _lastName;
                }
                set {
                    _lastName = value;
                }
            }        
            
            public int Age {            get {
                    return _age;
                }
                set {
                    _age = value;
                }
            }
        } 注意,我们在属性的geter/setter中实际上并没有添加什么逻辑,我们只是将get/set实施到了一个成员变量。我们不禁要问这样一个问题:为什么不直接使用成员变量而使用属性呢?这是因为,向外面呈现公开的成员变量有很多不好的地方。二个最大的问题是:1) 你无法轻易地对成员变量做数据绑定,2) 如果你从类中向外呈现成员变量的话,之后,你不重新编译那些引用老的类的任何程序集,就无法将它们改成属性(譬如,要添加验证逻辑到setter里)。 Orcas中发布的新C#编译器通过一个叫“自动属性(automatic properties)”的语言特性提供了一个优雅的方式来使得你的编码更加简洁,同时还保持属性的灵活性。自动属性允许你避免手工声明一个私有成员变量以及编写get/set逻辑,取而代之的是,编译器会自动为你生成一个私有变量和默认的get/set 操作。譬如,使用自动属性,我现在可以将上面的代码改写成:
        public class Person {
        
            public string FirstName {
                get; set;
            }        public string LastName {
                get; set;
            }        
            
            public int Age {
                get; set;
            }
        } 或者,我想更简明的话,我可以将空白的地方做进一步压缩,象这样: 
        public class Person {
            public string FirstName { get; set; }
            public string LastName  { get; set; }        
            public int    Age       { get; set; }
        } 当Orcas版中的C#编译器遇上象上面这样的空的get/set属性的话,它会自动为你在类中生成一个私有成员变量,对这个变量实现一个公开的getter 和setter。这么做的好处是,从类-合同(type-contract)的角度来看,这个类跟我们上面第一个有点冗长的实现看上去完全一样,这意味着,不象公开的成员变量,在将来,我可以在我的属性setter实现中添加验证逻辑,而不用对引用我的类的任何外部组件做改动。
      

  5.   

    public int a ;
    public int A
    {
        get{return a;}
        set{
        a=value ; 
    }
    }
    VS2008 没有看过的
      

  6.   

    private string _firstName;         
    public string FirstName { 
     get { 
          return _firstName; 
         } 
     set { 
          _firstName = value; 
         } 
    }
    上面的代码可以添加属性,但是并没有帮助属性添加说明
    在设计器得属性中可以看到 FirstName 但是没有对于这个属性得说明文字