我知道自动属性必须定义一个 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 访问器,就无法设置值,因为您无法访问“hiddenField”。
同样,如果没有 get 访问器,将无法取回您设置的值。
既然真的没用了,那是不允许的。
但是,您可以对这两种方法使用不同的可访问性:
public object Property { get; private set; }
这使您能够从外部隐藏集合,但仍然具有可用的属性。
关于c# - 自动属性必须同时定义 get 和 set 访问器是否存在技术原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3992707/