2008-12-03 92 views
4

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

public string ThisWorks { get; set; } 

public string ThisDoesnt { get; } 

这不只是语法糖 - 即编译器插入一个私有字段的属性?那么为什么这个问题?

好奇。

+0

两者都正常工作,我全部使用它们 时间。 – 2008-12-03 14:16:57

+0

但请记住为属性添加一个类型。你的例子不会像现在这样工作。 – 2008-12-03 14:17:31

回答

28

如果你没有一个setter - 那么你将如何设置属性?

顺便说一句,你可以指定辅助功能,如:

public string Foo 
{ 
    get; 
    private set; 
} 
11

一个自动实现的属性没有可访问的专用存储,那么你就没有办法设置的值没有二传手,使得它完全无用。

12

没有setter,你永远无法提供一个值 - 因为你没有任何方式指定备份变量的名字。

我请求只读自动属性,声明如下:

public string ReadonlyProperty { get; readonly set; } 

这将创建一个只读变量后盾,只有获取方法的属性,并转化为直接访问所有调用的setter变量。你只能在构造函数中调用setter - 就像正常的只读变量一样。

我们会看到这种请求是否做什么好......这是一个真正的耻辱它不是在那里的时刻,因为这使得它很难实现稳定的类型比可变类型:(

3

你需要一个设置 - 否则,你的自动实现的属性如何得到它的值?当自动实现属性时,你必须有一个设置的访问器,以便在构造时至少给它一个值

0

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

相关问题