从父级调用子类"new"方法



我有一个基类和子类,例如:

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,而不是首先调用子类。 例如

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.

要从基类调用Subclass.MethodB,您需要使用virtualoverride关键字。 例如:

class BaseClass
{
public void MethodA() // invoking this will correctly log "SubClass MethodB" followed by "BaseClass MethodB"
{
MethodB();
}
public virtual void MethodB()
{
Debug.Log("BaseClass MethodB");
}
}
class SubClass : BaseClass
{
public override void MethodB()
{
Debug.Log("SubClass MethodB");
base.MethodB();
}
}

最新更新