【发布时间】:2010-10-21 23:06:44
【问题描述】:
我知道自动属性必须定义一个 get 和 set 访问器方法,我也知道可以通过访问修饰符使这些访问器中的任何一个不可见。
编译器是否满意的技术原因
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 来省略 set 访问器函数。
我明白这可能是功能范围问题而不是技术限制,我也坦率地承认我还没有参考 C# 语言规范。
[更新 2]
原谅我...我是个白痴:P,我现在明白了,谢谢大家容忍我的高级时刻/
【问题讨论】:
-
没有办法设置它会返回什么?
-
如果没有
set;,您将无法写入自动属性。不过我明白您在说什么-为什么编译器不能假设如果有不是一个,只是假装。如果您有问题,您可以选择指定private set; -
@kenny 你的评论让我摆脱了我的白日梦,即有某种方法可以在没有设置的情况下使用自动道具。谢谢
-
@Cripplesmurf,您可能会发现 get only 属性作为接口的一部分很有用。
标签: c# accessor automatic-properties