假设存在基类A
和派生类B
。
A
类具有两个功能:fun1()
和fun2()
,其中fun1()
调用fun2()
。
B
类将覆盖fun1()
和fun2()
,然后fun1()
再次调用fun2()
。
但是,我想在覆盖的base.fun1()
中调用fun2()
。由于base.fun1()
调用了fun2()
而不是基类的版本,因此创建了非常不幸的循环:
fun1() -> fun2() -> base.fun1() -> fun2() -> base.fun1() -> ...
是否有任何方法可以强制base.fun1()
调用fun2()
的基本版本?我知道真正的问题可能出在那些类的设计不好,但是我仍然好奇是否有可能。
使用隐藏方法。
方法隐藏也称为阴影。父母的方法该类可用于子类,而无需使用覆盖阴影中的关键字。子类具有相同的版本功能。使用new关键字执行阴影处理。
public class A
{
public virtual void Func1() { Func2(); }
public virtual void Func2() { Console.WriteLine("A: Func2"); }
}
public class B : A
{
public override void Func1() { Func2(); }
public new void Func2() { base.Func1(); }
}