【问题标题】:Does auto implemented properties have an implied set? [duplicate]自动实现的属性是否有一个隐含的集合? [复制]
【发布时间】:2017-08-09 12:06:29
【问题描述】:

由于该属性不支持set,我预计分配给this.GetProp 的操作会在编译时失败。这段代码用 VS2015 和 NET461 编译得很好。

public class Example
{
    public Example(string val)
    {
        this.GetProp = val;
        this.GetSetProp = val;
    }

    public string GetProp { get; }
    public string GetSetProp { get; set; }
}

自动属性中是否隐含对支持字段的私有访问?

【问题讨论】:

  • 您可以在构造函数中设置属性的值,即使它是 getter-only,就像您可以分配给 readonly 变量一样

标签: c#


【解决方案1】:

这是 C# 6.0 中新引入的功能。请参阅C# 6.0 语言规范10.7.3 自动实现的属性部分

如果自动属性没有设置访问器,则支持字段是 被认为是只读的(§10.5.2)。就像一个只读字段一样,一个 getter-only auto-property 也可以分配到 封闭类的构造函数。这样的任务分配 直接到属性的只读支持字段。

(强调我的)

【讨论】:

  • 正确回答问题的错误副本(见副本)
  • @CamiloTerevinto 其他答案甚至没有引用官方规范
  • @Adrian 你说得对,我已经相应地更新了另一个问题的答案
【解决方案2】:

这是 C# 6 中引入的仅限 getter 的自动属性。支持字段隐式声明为 readonly,因此您可以从构造函数中设置它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-13
    • 1970-01-01
    • 2010-12-24
    • 2011-02-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-17
    • 2013-07-12
    相关资源
    最近更新 更多