为什么自动属性需要getter和setter?

时间:2008-12-03 14:15:59

标签: c# .net automatic-properties

在C#中,如果我声明一个自动实现的属性,为什么我必须同时声明get和set部分?

public string ThisWorks { get; set; }

public string ThisDoesnt { get; }

这不仅仅是语法糖 - 即编译器为属性插入私有字段吗?那问题为什么呢?

好奇。

5 个答案:

答案 0 :(得分:29)

如果你没有一个二传手 - 那么你将如何设置该属性?

顺便提一下,您可以指定辅助功能,例如:

public string Foo
{
  get;
  private set;
}

答案 1 :(得分:12)

如果没有setter,您将永远无法提供值 - 因为您无法指定支持变量的名称。

我已经请求了一个只读的自动属性,声明如下:

public string ReadonlyProperty { get; readonly set; }

它将创建一个只读备份变量,一个只有一个getter的属性,并将对setter的所有调用转换为对该变量的直接访问。你只能在构造函数中调用setter - 就像普通的只读变量一样。

我们将看到这个请求是否有任何好处...现在不是真的很遗憾,因为它使得实现不可变类型比实现可变类型更难:(

答案 2 :(得分:11)

自动实现的属性没有可访问的私有存储,因此没有setter就无法设置该值,这使得它完全没用。

答案 3 :(得分:3)

您需要一套 - 否则,您的自动实施属性如何获得其价值?在自动实现属性时,您必须拥有一个set访问器,以便在构造期间至少为其赋值。

答案 4 :(得分:0)

有趣的是,即使项目配置为使用C#版本5,Visual Studio 2015中的新Roslyn编译器现在允许这样做。