2013-05-14 56 views
0

这个简单的问题已经有一段时间令我感到困扰,我已经看到了两种形式的声明属性,我在想,它们有什么不同,是否有任何理由让我更喜欢另一种?哪种形式的财产申报更合适?

1表格:

public int Age { get; set; } 

第二形态:

private int _Age; 
public int Age 
{ 
    get { return _Age; } 
    set { _Age = value; } 
} 

我一直使用的第二种形式,也是我已经看到了这个MSDN Tutorial关于第二个形式只是谈判,所以我这里有点困惑,哪一个是首选?

回答

2

第一种形式相当“新”。所以你会发现很多包含第二种形式的“旧”代码。

今天,使用C#现代版本,使用第二形式的唯一原因是挂钩吸气剂或setter内部更多的逻辑。

例如:

private int myPropertyValue; 

public int MyProperty 
{ 
    get 
    { 
     return myPropertyValue; 
    } 
    set 
    { 
     if (value >= 0 && value <= 100) 
     { 
      myPropertyValue = value; 
     } 
     else 
     { 
      // throw exception here. 
     } 
    } 
} 
+0

非常感谢Jan – Mehran

+0

不客气:) –

+1

使用显式字段的另一个原因是对于只读属性,您可以使后台字段只读 - 对于不可变类很好 –

1

第一个是罚款时,你是不是做对财产的任何额外处理或访问控制。这只是一个做的更快的方式,在C#中引入了3

看一看here

+0

谢谢Colm for your帮助 – Mehran

1

这确实是一个偏好问题。第一种格式只是语法上的糖,在这种格式中,编译器会为您生成第二种格式。如果我没有做任何操纵或评估,我宁愿选择第一种形式,因为它更短更整洁。但是,正如其他人所指出的,如果你正在做前期C#3,那么你别无选择,只能做第二形式

+0

感谢您的帮助杰森,我很感激 – Mehran

1

我只用,如果我有一个愚蠢的类,它没有与该领域的第一种形式本身即它只是存储一个值。

因此,在大多数情况下,我会使用第二种形式。这使您可以将验证逻辑添加到外部(对类)消费者的getter/setter中,但是当从该类的内部方法访问该字段时,我会将它更加封闭的生态系统进行验证,其中经常只是验证浪费处理器周期。