是否有技术原因导致自动属性必须同时定义get和set访问器

Cri*_*urf 4 c# accessor automatic-properties

我知道自动属性必须定义一个get和set访问器方法,我也知道这些访问器中的任何一个都可以通过访问修饰符变得不可见.

是否存在编译器满意的技术原因

public object Property { get; set; }
Run Code Online (Sandbox Code Playgroud)

但不是

public object Property { get; }
Run Code Online (Sandbox Code Playgroud)

我对此代码的理解(可能是错误的)是编译器生成一个隐藏在调用代码中的支持字段,如下所示:

private object hiddenField; //hidden by compiler.

public object Property

{

get { return hiddenField; }

set { hiddenField = value;}

}
Run Code Online (Sandbox Code Playgroud)

如果编译器可以生成它,是否有理由不能根据属性声明中setter的存在(或缺少)来省略set accessor函数.

我知道这可能是一个功能范围而不是技术限制的问题,我也自由地承认我还没有咨询过C#语言规范.

[ 更新2 ]

原谅我......我是个白痴:P,我现在看到了,谢谢大家为我的高级时刻做好准备/

Ree*_*sey 11

如果没有set访问器,则无法设置该值,因为您无法访问"hiddenField".

同样,如果没有get访问器,将无法获取您设置的值.

因为它真的变得无用,所以不允许这样做.

但是,您可以在两种方法上具有不同的可访问性:

public object Property { get; private set; }
Run Code Online (Sandbox Code Playgroud)

这使您能够从外部隐藏集合,但仍具有可用属性.