C#getters,setters声明

可能重复:
为什么要使用getter和setter?
C#3.0自动属性 ​​- 有用与否?

以下方式定义属性之间是否存在差异 –

// 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;} 

据我所知,它看起来只是一种风格偏好。 我错过了什么吗?

区别:

  • 第二种forms只能用C#3编译器或更高版本编译
  • 第二种forms不允许任何代码(即使在同一个类中)直接访问该字段,因为真实字段具有“难以形容的名称”

第二个版本是所谓的自动实现的属性 (或简称“自动属性”)。 它们是在C#3中引入的。如果你只编写看起来像第一个版本的代码 – 即没有涉及逻辑 – 那么自动属性就很棒。 您可以随后通过将逻辑转换为第一个表单来添加逻辑。 您的所有代码都将与源代码和二进制兼容性术语中的更改兼容。

请注意,自动属性不允许您指定默认值,并且不存在真正的只读自动属性(即没有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

最终,在这种情况下,它可以达到同样的效果。 当您想要将任何规则应用于获取/设置时,就会产生差异,在这种情况下,您需要使用private / protected变量并将其隐藏在公共属性后面。

实际上,当您使用较短版本( public string Name { get; set; } )时,编译器会自动为该属性生成一个私有字段。