C#获取者、设定者宣言
可能的重复项:C#获取者、设定者宣言,c#,syntax,getter,getter-setter,C#,Syntax,Getter,Getter Setter,可能的重复项: 以下方式定义属性之间是否有区别- // 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;}
据我所知,这只是一种风格偏好。我遗漏了什么吗?答案在IL中。使用ildasm并进行比较 差异:
- 第二种形式只能使用C#3编译器或更高版本编译
- 第二种形式不允许任何代码(即使在同一个类中)直接访问该字段,因为实际字段有一个“无法说出的名称”
公共字符串名称{get;private set;}
这并不完全相同,但在许多情况下都足够接近。最终,在这种情况下,它的结果是相同的。当您想要对获取/设置应用任何规则时,就会出现这种差异,在这种情况下,您需要使用private/protected变量并将其隐藏在公共属性后面。第一个是标准属性。必须定义用于存储值的字段。第二个是,仅在C#3.0及更高版本中可用。否。实际上,当您使用较短版本(
公共字符串名称{get;set;}
)时,编译器会自动为属性生成一个私有字段 事实上不是——这个问题以前已经被问过很多次了。@ChrisF这肯定是个骗局,但我认为你得到的不太正确duplicate@Daniel-这是我发现的第一个,由于系统允许多个可能的副本,所以这不是一个真正的问题。或者“自动属性”更简短;)