自动实施的属性有什么意义?即{get; set;}语法

时间:2015-07-24 03:59:48

标签: properties

我意识到{get; set;}语法正在Auto-Implemented Properties上的这个链接上进行。

我不明白的是,除了混淆新C#程序员的地狱之外还有什么意义?

我的意思是,首先我们要了解属性和访问器的重点是防止客户端无法控制访问类中的字段。

但这不是与自动实现的属性完全一致吗?

我的意思是,如果没有为属性访问器实现任何逻辑,则只能使用此语法。实际上,您甚至无法访问由类对象本身中的编译器创建的私有匿名支持字段?

那么仅仅在类中声明一个名为Name的公共字段有什么不同呢?

我认为

之间没有区别
class Foo
{
   public string Name {get; set;}
}

和这个

class Foo
{
   public string Name;
}

其他事实上,自动实现的属性版本更长,更令人困惑,并让我花了3个小时试图理解它并让我头痛欲裂让我想写这个咆哮!

此外,在我看来,自动实现的属性版本实际上效率较低,因为编译器在幕后做了很多工作。它必须创建私有匿名后备字段,get和set访问器,最后调用访问器。第二个版本只是直接读取和写入公共字段。

1 个答案:

答案 0 :(得分:0)

这只是为了简化。编译器将自动生成常规实现。

private string _name;

public string Name
{
    get { return _name; }
    set { _name = value; }
}