我知道自动属性必须定义 get 和 set 访问器方法,我还知道可以通过访问修饰符使其中任何一个访问器不可见。
编译器为什么会接受这种情况,有技术原因吗?
如果编译器可以生成这样的代码,那么它是否有理由根据属性声明中setter的存在(或不存在)省略设置访问器函数呢?
我理解这可能是特性范围而不是技术限制的问题,同时我也自由承认我尚未查阅C#语言规范。
[更新2]
请原谅我...我是个傻瓜:P,我现在明白了,感谢大家容忍我的老年瞬间/
编译器为什么会接受这种情况,有技术原因吗?
public object Property { get; set; }
但不是
public object Property { get; }
我(可能是错误的)理解这段代码的含义是编译器会生成一个被隐藏在调用代码中的后备字段,具体如下:
private object hiddenField; //hidden by compiler.
public object Property
{
get { return hiddenField; }
set { hiddenField = value;}
}
如果编译器可以生成这样的代码,那么它是否有理由根据属性声明中setter的存在(或不存在)省略设置访问器函数呢?
我理解这可能是特性范围而不是技术限制的问题,同时我也自由承认我尚未查阅C#语言规范。
[更新2]
请原谅我...我是个傻瓜:P,我现在明白了,感谢大家容忍我的老年瞬间/
set;
,您就无法写入自动属性。我明白你的意思 - 为什么编译器不能假定如果没有一个,就假装有一个呢?如果这对您有问题,您可以指定private set;
选项。 - DaveDev