c# - 自动属性必须同时定义 get 和 set 访问器是否存在技术原因

标签 c# accessor automatic-properties

我知道自动属性必须定义一个 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/

相关文章:

c# - .NET Core 2.0 日志记录损坏了吗?

c# - 为什么派生类中必须保护抽象方法?

具有重载 = 运算符的 C++ 包装器

c# - 具有不同设置和获取类型的访问器?

javascript - 对所有可能的子属性的访问器进行原型(prototype)设计

c# - c# 可移植类库的代码覆盖率

c# - 如何确定属性是否是具有反射的自动实现属性?

c# - 我可以使用获取和设置代码创建一个自动属性(无私有(private)成员)吗?

c# - 简单类型的只读自动属性 ​​: Initializer VS Expression Body Getter

c# - 如何从字符串中删除所有非数字字符并仅将数字作为新字符串获取?