我遇到了一个理论问题。
以下代码是有效的且可以编译:
public class Parent
{
public virtual object TestProperty { get; set; }
}
public class Child : Parent
{
private string _testValue = "Hello World!";
public override object TestProperty
{
get { return _testValue; }
}
}
public class Consumer
{
Parent p = new Child();
public Consumer(){ p.TestProperty = 3; }
}
我的问题是:
为什么C#允许我在子类中部分重写TestProperty
自动属性,即使这会导致部分不可预测的行为?这有实际应用吗?
尽管值无法从公共接口获取,但我仍然可以使用父类的setter来设置TestProperty的值(我已经检查了生成的IL代码,setter仍然在父类中设置支撑对象)。