我意识到{get;set;}语法是在自动实现属性的链接中执行的。
我不明白的是,除了让新的c#程序员感到困惑之外,还有什么意义?
我的意思是,首先我们学到属性和访问器的全部意义是防止客户端对类中的字段进行不受控制的访问。
但是这不正是与自动实现属性正在做的吗?
我的意思是,如果你不为属性访问器实现任何逻辑,你只能使用这种语法。事实上,你甚至不能访问由编译器在类对象本身中创建的私有匿名支持字段?
那么在类中声明一个名为Name的公共字段有什么区别呢?
我看不出
class Foo
{
public string Name {get; set;}
}
和
class Foo
{
public string Name;
}
除此之外,自动实现的属性版本更长,更令人困惑,让我花了3个小时试图理解它,让我头痛欲裂,让我想写这个咆哮!
此外,在我看来,自动实现的属性版本实际上效率较低,因为编译器在幕后做了更多的工作。它必须创建私有匿名支持文件、get和set访问器,并最终调用这些访问器。而第二个版本只是直接读写公共字段。
这只是为了简化。编译器将自动生成常规实现。
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}