【发布时间】:2011-04-22 11:48:55
【问题描述】:
是时候回答我刚刚遇到的一个理论问题了。
以下代码有效并编译:
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 仍在父类中设置支持对象),即使该值对公众不可用。
【问题讨论】:
-
我敢肯定有很多像这样的奇怪的东西可以编译和运行,但没有实际应用和潜在的丑陋副作用。锤子盖房子或砸拇指取决于你如何使用它们:)
-
@Dave - 非常正确。我只是想确保,在这种情况下,用锤子砸我的拇指不会起到我没有看到的目的。
标签: c# inheritance theory