【发布时间】:2018-11-30 10:49:24
【问题描述】:
我尝试了以下示例:
public class TestBase
{
public virtual string ReadOnly { get; }
public TestBase()
{
ReadOnly = "from base";
}
}
class Test : TestBase
{
public override string ReadOnly { get; }
public Test()
{
// nothing here
}
}
当我创建一个 Test 实例时,我看到 ReadOnly 保持为空。但为什么? 我真的不明白它的窍门,有人可以向我解释为什么会发生这种情况吗?至少我会想到一个错误,即不能在所属类之外设置只读属性。
【问题讨论】:
-
@SeM 这并不是真正的重复,因为这个问题是关于覆盖字符串属性的影响。
-
@MatthewWatson 你说的是第一个还是第二个?
-
@SeM 两者,因为这些答案都没有谈到覆盖属性。
-
我认为这与构造函数中的 and 虚拟成员访问有关,不是吗?虽然如果你看一下它是如何编译的就很清楚:两个类都有自己的私有支持字段。子类中的那个被返回。 sharplab.io/…
-
对于奖励积分,在基础构造函数中添加
Console.WriteLine(ReadOnly);,在分配给属性之后。