这个简单的问题困扰了我一段时间,我看到了两种声明属性的形式,我想知道有什么不同,有什么理由让我更喜欢一种吗?
第一种形式:
public int Age { get; set; }
第二种形式:
private int _Age;
public int Age
{
get { return _Age; }
set { _Age = value; }
}
我一直使用第二种形式,而且我看过这个MSDN 教程只讨论了第二种形式,所以我在这里有点困惑,首选哪一种?
这个简单的问题困扰了我一段时间,我看到了两种声明属性的形式,我想知道有什么不同,有什么理由让我更喜欢一种吗?
第一种形式:
public int Age { get; set; }
第二种形式:
private int _Age;
public int Age
{
get { return _Age; }
set { _Age = value; }
}
我一直使用第二种形式,而且我看过这个MSDN 教程只讨论了第二种形式,所以我在这里有点困惑,首选哪一种?
第一种形式相当“新”。所以你会发现很多包含第二种形式的“旧”代码。
今天,使用现代版本的 C#,使用第二种形式的唯一原因是在 getter 或 setter 中连接更多的逻辑。
例如:
private int myPropertyValue;
public int MyProperty
{
get
{
return myPropertyValue;
}
set
{
if (value >= 0 && value <= 100)
{
myPropertyValue = value;
}
else
{
// throw exception here.
}
}
}
当您不对财产进行任何额外的处理或访问控制时,第一个很好。这只是一种更快的方法,在 C# 3 中引入。
看看这里。
这真的是一个偏好问题。第一种格式只是语法糖,您可以让编译器为您生成第二种格式。如果我不进行任何操作或评估,我更喜欢使用第一种形式,因为它更短更整洁。但正如其他人指出的那样,如果你正在做 C# 3 之前的版本,那么你别无选择,只能做第二种形式
只有当我有一个对字段本身不做任何事情的哑类时,我才会使用第一种形式,即它只是存储一个值。
因此,在大多数情况下,我会使用第二种形式。这允许您将验证逻辑添加到外部(类)消费者的 getter/setter,但是当从类内部的方法访问字段时,我认为它更像是一个封闭的生态系统,其中如此多的验证通常只是浪费处理器周期。