C#getters,setters声明

kos*_*osh 15 c# syntax getter getter-setter

可能重复:
为什么要使用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;}
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*eet 26

区别:

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

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

要知道,自动属性不会允许您指定默认值,有没有这样的事,作为一个真正的只读属性会自动(即一个没有吸气).你最接近的是一个带有私人二传手的公共吸气者,例如

public string Name { get; private set; }
Run Code Online (Sandbox Code Playgroud)

它并不完全相同,但在很多情况下它足够接近.

  • 或者"自动财产"更短;) (3认同)