自动调用基本方法

我需要在调用override一个时自动调用基类方法(比如构造函数调用base)。例如:
class A
{
    public void Fun()
    {
        Console.Write("Class A!");
    }
}

class B : A
{
    public void Fun()
    {
        Console.Write("Class B!");
    }
}
我想在屏幕上看到   A级! B级! 执行下一个代码时:
B b = new B();
b.Fun();
请问有什么人可以告诉我需要更改示例代码或者如何更好地编写以获得所需的结果?谢谢。     
已邀请:
如果您不想显式调用它并因此确保在派生类中调用
A.Fun()
,则可以使用称为模板方法模式的东西:
class A
{
    public void Fun()
    {
        Console.Write("Class A!");
        FunProtected();
    }

    protected virtual void FunProtected()
    {
    }
}

class B : A
{
    protected override void FunProtected()
    {
        Console.Write("Class B!");
    }
}
这会给你:
new A().Fun() -> "Class A!"
new B().Fun() -> "Class A! Class B!"
    
如果您想要这样的行为,则需要更改平台/语言。 .NET不会自动调用基本方法。你需要明确地调用它。您的方法也需要是虚拟的,或者您将其隐藏在派生类中:
class A
{
    public virtual void Fun()
    {
        Console.Write("Class A!");
    }
}

class B : A
{
    public override void Fun()
    {
        // call the base method which will print Class A!
        base.Fun(); 
        Console.Write("Class B!");
    }
}
现在,当你这样做:
B b = new B();
b.Fun();
你会得到所需的结果。     
仍然可以这样:
interface IFun
{
    void Fun();
}

abstract class A : IFun
{
    void IFun.Fun()
    {
        Console.Write("Class A!");
        Fun();
    }
    protected abstract void Fun();
}

class B : A
{
    protected override void Fun()
    {
        Console.Write("Class B!");
    }
}

IFun b = new B();
b.Fun();
如果对象引用是IFun,则此方法有效。     
仅供参考,您可以使用将A放在B中的包装模式。这是一个粗略的例子!
interface IFunClass {
    void Fun();
}

class A : IFunClass {
    public void IFunClass.Fun() {
        Console.Write("Class A!");
    }
}

class B : IFunClass {
    public B(IFunClass f) {
        this.m_SomethingFun = f;
    }

    public void IFunClass.Fun() {

        this.m_SomethingFun.Fun();

        Console.Write("Class B!");
    }

    private IFunClass m_SomethingFun;
}

A a = new A();
B b = new B(a);

b.Fun() // will call a.Fun() first inside b.Fun()
    

要回复问题请先登录注册