C#-调用重写方法的基本版本

问题描述 投票:2回答:1

假设存在基类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()的基本版本?我知道真正的问题可能出在那些类的设计不好,但是我仍然好奇是否有可能。

c# class oop derived-class
1个回答
0
投票

使用隐藏方法。

方法隐藏也称为阴影。父母的方法该类可用于子类,而无需使用覆盖阴影中的关键字。子类具有相同的版本功能。使用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(); }
    }
© www.soinside.com 2019 - 2024. All rights reserved.