【发布时间】:2013-04-28 22:13:55
【问题描述】:
我已经搜索过,但找不到任何解决我的问题的方法。我的场景很简单:
public class A
{
public virtual void MethodOne()
{
Console.log( "A" );
}
}
public class B : A
{
public override void MethodOne()
{
base.MethodOne();
Console.log( "B" );
}
}
public class C : B
{
public override void MethodOne()
{
base.MethodOne();
Console.log( "C" );
}
}
我想要做的是让 C 类的一个实例(我们将其命名为“instanceC”)同时调用其父级和祖父级的重写方法。所以我希望这样:
instanceC.MethodOne();
// Output:
// "A"
// "B"
// "C"
但是却得到了这个:
instanceC.MethodOne();
// Output
// "A"
// "C"
B 类的方法被跳过。这不可能吗?我认为这是继承/多态性的重点。提前致谢!
【问题讨论】:
-
你确定C是从B而不是A派生的吗?
-
为什么 C 会从 B 覆盖?您希望它从 A 继承。
-
您的示例对我来说按预期工作并打印“A B C”
-
对我来说也一样,您的示例有效,您的原始代码一定有什么遗漏或错误
-
@Derek 如果您需要执行 B 的某些行为,但需要在调用之前或之后添加其他行为。由于 XmlReader.Parse 在无效的 ASCII 字符上爆炸,我曾经不得不覆盖 FileStream。我能够覆盖 GetBytes,调用
base.GetBytes从 FileStream 获取结果,将无效值更改为替换字符,然后将其传递给XmlReader.Create
标签: c# .net inheritance base-class