我是C++客串。net的新手我看到C#程序员是否喜欢这样写类的一个属性啊?
class a
{
   private int name;
   public int Name
   {
      get{ return name;}
      set{ name = value;}
   }
}为何不愿意这样呢?
class a
{
   public int Name
   {
      get; set;
   }
}
下面的写法有神马坏处么?

解决方案 »

  1.   

    C#3.0才有这种“自动属性”的写法。有简便的谁不愿意这样写啊。在C#3.0以前的VS2005及较早的VS2003的IDE中,只能如第一种那样的写法。C#3.0以后的VS2008及VS2010中我们都向第二种写法那样写,多简便。
      

  2.   

    get;   set;
    3.0前不支持
      

  3.   

    第一个里面可以写自己的逻辑比如:
          private   int   name; 
          public   int   Name 
          { 
                get{   return   name;} 
                set
                {  
                   if(value!="allenhiman" )
                   {   
                   name="allenhiWoman";
                   }
                   else
                   {
                     name=value; 
                   } 
                } 
          } 
      

  4.   

    因为许多人看的书是早年间的葵花宝典,或者他们的vs确实还没有升级到新版本。别以为.net程序员都是一样的。
      

  5.   

    我用老版本,加上有用refactor工具
    直接按右键产生属性
    就不习惯用自动属性了
      

  6.   

    第一种写法可以控制熟悉逻辑,简单判断等,访问控制,只读(只写,读写控制)等.
    第二种写法只能公有,get和set成对出现,不能有任何较验逻辑.3.0以后支持
      

  7.   

    有时要控制赋值和读取的,直接写get set,那还不如把变量public
      

  8.   

    class   a 

          public   int   Name 
          { 
                get;   set; 
          } 

    这样的确简单,但只读属性建议采用第一种需不是如下代码,除非这个对象不会用到反射填充,否则会出错,
    因为反射时通常判断是否是可写属性,而以下代码则会判断出是可以代码.
    public   int   Name 
          { 
                get;  private set; 
          } 
      

  9.   

    看情况而定,第一种方法可以预设值,要用第二种方法就不行,只能在Constructor里设默认值
      

  10.   

    其实我更想问,为什么不只用
    public   int   Name;就完事了?
      

  11.   

    除了版本问题以外 我们还可能这样写class   a 

    private   string   name; 
    private   string   firstName; 
    private   string   lastName;       public   string   Name 
          { 
                get{   return   name;} 
                set{   
                    name   =   value;
                    firstName = value.split(' ')[0];
                    lastName= value.split(' ')[1];            } 
          }       public   string   LastName 
          { 
                get{   return   lastName;} 
          }       public   string   FirstName 
          { 
                get{   return   firstName;} 
          } } 
    这种情况经常见的 比如改变窗体面板的颜色 只需要设定属性值即可 o.BackColor = Color.Gary;
    BackColor 属性的set中就有破坏原有背景 强制重绘操作
      

  12.   

    get; set; 
    写法3.0才支持,写上面的方式可能是希望受更多ide支持或者希望直接操作私有变量。
      

  13.   

    up 写法3.0才支持,写上面的方式可能是希望受更多ide支持或者希望直接操作私有变量。
      

  14.   

    没写过类,都是抄别人的,修改下,不算软件开发人员啊。
    --reply by CSDN Study V1.0.0.3 (starts_2000)
      

  15.   

    打死我,我也不会写成 int name的,我还想多活几天呢
    int name;string 已经被int代替了吗?好先进啊,好久没来我out了
      

  16.   


    只能公有不对吧,可以private get/set...
      

  17.   

    公司用的是VS2005,.NET Framework 2.0 ;只能用第一种啦
      

  18.   


    get;set; 前是可以加访问修饰符的,并不一定就public
      

  19.   

    我虽然知道第二种,但我还是用第一种。
    不是怀旧,而是vs有个快捷键ctrl+R+E
    自动将字段提取为属性。自动提取的是按第一种写法写的
      

  20.   


    这个的效果是不一样的。
    比如public int A;
    未来你要在给A赋值的时候进行一些特定操作的时候
    你就得改成
    public int A
    {
    get;
    set{//Do Sth.;}
    }这个时候对外公开的内容已经由Field变为Property了,使用了这个类所在的DLL的库都必须要重新编译才能正常工作。如果有反射之类的代码依赖于此,则会因为这个修改而不能正常工作,必须改代码。所以,不推荐将成员公开,而是使用属性的方式访问更加安全也更具扩展性。
      

  21.   

    C#这样还是不方便,要是像C++/CLI那样用一个property关键字修饰字段就自动变成属性就好了。这个应该在C#4.0推出。
    public ref class C {
    public:
       // property data member
       property String ^ Simple_Property;
    };
      

  22.   

    貌似那个属性是自动生成的代码。
    而且那么写,可以将数据处理写在get,set里面。
    楼主的写法简介,但是要扩展,又得改。
      

  23.   

    第二种方便 微软的功能只会越来越体贴,所有的IDE中微软的最人性化,特别是那些海量的帮助文档,是别的所不具备的 细节决定胜败 微软有今天的局面 不是偶然的啊
      

  24.   

    vs2008+.net2.0里面也可以这样写,IDE支持即可所以建议尽量使用高版本的IDE
      

  25.   

    如果没有逻辑,两种都是可以的,如果有逻辑,第一种可以在Get,Set中写逻辑,第二种就不可以啦!