是时候回答我刚刚遇到的理论问题了。
以下代码有效并可编译:
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
当孩子的 auto 属性导致部分不可预测的行为时?有实际应用吗?
我可以使用父类的 setter 设置 TestProperty 的值(我检查了正在生成的 IL,并且 setter 仍在父类中设置支持对象),即使该值不可向公众访问。
此行为与 C# 中的非自动实现的属性一致。始终可以仅重写虚拟属性的 get 或 set 方法。因此,无法使用自动实现的属性会产生不必要的不一致。
例如,以下内容是合法的
class A
{
public virtual int P1
{
get { return 42; }
set { }
}
}
class B : A
{
public override int P1
{
get { return 18; }
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)