【发布时间】:2020-07-05 08:00:14
【问题描述】:
我写了一个只有 get 访问器的类属性,比如:
public int MyProp { get; }
我不能通过我的类中的方法为 MyProp 分配任何值,甚至不能私下分配,也就是说,如果我有一个私有集,那是不一样的。 但是,不知何故,我可以使用如下构造函数为 myProp 设置一个值:
public MyClass (int myProp) { this.MyProp = myProp; }
构造函数是否总是不受属性访问器规范的影响?它们只有在构造函数运行后才有效吗?
【问题讨论】:
-
您可以参考这些链接:docs.microsoft.com/en-us/dotnet/csharp/language-reference/… & pluralsight.com/guides/… 了解所有上下文的只读属性。
-
试想如果不允许构造函数初始化这些值,那么这些值有什么用?它始终是数据类型的默认值,就像 int 一样,它将是 0。通过仅使用 get 意味着我们将不允许在初始化后更改该值
-
是的,构造函数总是可以在没有 getter 的情况下设置属性。我看到 C# 9 现在有一个
init关键字:stackoverflow.com/questions/62372422/… -
是编译器强制执行这些规则,所以如果编译器有规则允许代码写入只读字段,编译器可以这样做。构造函数受此类规则的约束,C# 9 中的新
init成员也是如此。
标签: c# class constructor properties accessor