在C#中,如果我声明一个自动实现的属性,为什么我必须声明get和set部分?为什么自动属性需要getter和setter?
即
public string ThisWorks { get; set; }
public string ThisDoesnt { get; }
这不只是语法糖 - 即编译器插入一个私有字段的属性?那么为什么这个问题?
好奇。
在C#中,如果我声明一个自动实现的属性,为什么我必须声明get和set部分?为什么自动属性需要getter和setter?
即
public string ThisWorks { get; set; }
public string ThisDoesnt { get; }
这不只是语法糖 - 即编译器插入一个私有字段的属性?那么为什么这个问题?
好奇。
如果你没有一个setter - 那么你将如何设置属性?
顺便说一句,你可以指定辅助功能,如:
public string Foo
{
get;
private set;
}
一个自动实现的属性没有可访问的专用存储,那么你就没有办法设置的值没有二传手,使得它完全无用。
没有setter,你永远无法提供一个值 - 因为你没有任何方式指定备份变量的名字。
我请求只读自动属性,声明如下:
public string ReadonlyProperty { get; readonly set; }
这将创建一个只读变量后盾,只有获取方法的属性,并转化为直接访问所有调用的setter变量。你只能在构造函数中调用setter - 就像正常的只读变量一样。
我们会看到这种请求是否做什么好......这是一个真正的耻辱它不是在那里的时刻,因为这使得它很难实现稳定的类型比可变类型:(
你需要一个设置 - 否则,你的自动实现的属性如何得到它的值?当自动实现属性时,你必须有一个设置的访问器,以便在构造时至少给它一个值
有趣的是,新的Roslyn编译器Visual Studio 2015现在允许这样做,即使项目配置为使用C#版本5.
两者都正常工作,我全部使用它们 时间。 – 2008-12-03 14:16:57
但请记住为属性添加一个类型。你的例子不会像现在这样工作。 – 2008-12-03 14:17:31