通过以下方式定义属性是否有区别 -
// private, with getter & setter
private string fName;
public string Name
{
get { return this.fName }
set { this.fName = value }
}
// define as a Property
public string Name { get; set;}
据我所知,它看起来只是一种风格偏好。我错过了什么吗?
通过以下方式定义属性是否有区别 -
// private, with getter & setter
private string fName;
public string Name
{
get { return this.fName }
set { this.fName = value }
}
// define as a Property
public string Name { get; set;}
据我所知,它看起来只是一种风格偏好。我错过了什么吗?
差异:
第二个版本是所谓的自动实现属性(或简称“自动属性”)。它们是在 C# 3 中引入的。如果您只编写看起来像第一个版本的代码 - 即不涉及逻辑 - 那么自动属性非常好。您可以随时通过将其转换为第一种形式来添加逻辑。在源代码和二进制兼容性方面,您的所有代码都将与该更改兼容。
请注意,在 C# 6 之前的版本中,自动属性不允许您指定默认值,并且不存在真正的只读自动属性(即没有 getter 的属性)。最接近的是带有私人二传手的公共吸气剂,例如
public string Name { get; private set; }
它并不完全相同,但在许多情况下它已经足够接近了。
第一个是标准属性。您必须定义一个字段来存储值。第二个是自动实现的属性,仅在 C# 3.0 及更高版本中可用。
答案在 IL 中。使用 ildasm 并进行比较。
http://msdn.microsoft.com/en-us/library/f7dy01k1%28v=VS.90%29.aspx
最终,在这种情况下,它的结果是相同的。当您想将任何规则应用于获取/设置时,差异就出现了,在这种情况下,您需要使用私有/受保护变量并将其隐藏在公共属性后面。
不会。实际上,当您使用较短的版本 ( public string Name { get; set; }
) 时,编译器会自动为该属性生成一个私有字段。