【发布时间】:2020-04-26 00:39:33
【问题描述】:
我有一个基类和子类,例如:
class BaseClass
{
public void MethodA()
{
MethodB();
}
public void MethodB()
{
Debug.Log("BaseClass MethodB");
}
}
class SubClass : BaseClass
{
public new void MethodB() // <- without `new` keyword there's a warning on this line
{
Debug.Log("SubClass MethodB");
base.MethodB();
}
}
当调用 BaseClass 实例的 MethodA 时,它会调用 MethodB,但只调用 BaseClass,而不是先调用 SubClass。例如
var subclass = new SubClass();
subclass.MethodA(); // Does not log "SubClass MethodB" first. Only logs "BaseClass MethodB"
如何确保父类方法调用子类方法?
注意,如果MethodB 行中没有 new 关键字,Visual Studio 会给出警告:'SubClass.MethodB()' hides inherited member 'BaseClass.MethodB()'. Use the new keyword if hiding was intended.
【问题讨论】:
-
请注意此处提出了类似的问题 (stackoverflow.com/a/50184616/539490)。但它是不同的,因为这个问题是关于你什么时候不能修改基类。我希望这个问题和答案有很大不同/更简洁。如果您不同意,请投票关闭。
-
非常类似于stackoverflow.com/questions/17717570/…。实际上有数百个类似的。我猜这个问题每周问一次略有不同。
-
是的@PavelAnikhouski 这就是我正在寻找的答案。谢谢!我们应该投票关闭吗?
-
@AJP 你可以投票关闭或删除这个问题
-
我不能删除它,它不会让我。已投票关闭。谢谢。
标签: c# inheritance overriding subclass