C# - 调用重写方法的基本版本
C# - calling base version of overridden method
假设有基础classA
和派生classB
。
Class A
有两个函数:fun1()
和 fun2()
,其中 fun1()
调用 fun2()
。
Class B
覆盖 fun1()
和 fun2()
,然后 fun1()
再次调用 fun2()
。
但是,我想在覆盖 fun2()
中调用 base.fun1()
。由于 base.fun1()
调用 fun2()
而不是基础 class' 版本,这会造成非常不幸的循环:
fun1() -> fun2() -> base.fun1() -> fun2() -> base.fun1() -> ...
有没有办法强制base.fun1()
调用fun2()
的基础版本?我知道真正的问题可能在于那些 classes 的糟糕设计,但我仍然很好奇它是否有可能。
使用方法隐藏。
Method hiding is also known as shadowing. The method of the parent
class is available to the child class without using the override
keyword in shadowing. The child class has its own version of the same
function.
Use the new keyword to perform shadowing.
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(); }
}
假设有基础classA
和派生classB
。
Class A
有两个函数:fun1()
和 fun2()
,其中 fun1()
调用 fun2()
。
Class B
覆盖 fun1()
和 fun2()
,然后 fun1()
再次调用 fun2()
。
但是,我想在覆盖 fun2()
中调用 base.fun1()
。由于 base.fun1()
调用 fun2()
而不是基础 class' 版本,这会造成非常不幸的循环:
fun1() -> fun2() -> base.fun1() -> fun2() -> base.fun1() -> ...
有没有办法强制base.fun1()
调用fun2()
的基础版本?我知道真正的问题可能在于那些 classes 的糟糕设计,但我仍然很好奇它是否有可能。
使用方法隐藏。
Method hiding is also known as shadowing. The method of the parent class is available to the child class without using the override keyword in shadowing. The child class has its own version of the same function. Use the new keyword to perform shadowing.
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(); }
}