Force方法从基类调用base方法

时间:2015-06-04 00:32:15

标签: c# oop

如果我使用"覆盖"创建方法属性,派生方法不会自动调用基本方法实现,我需要使用" base"手动调用它。像这样的关键字:

public class A
{
    public virtual void Say()
    {
        Console.Write("A");
    }
}

public class B : A
{
    public override void Say()
    {
        base.Say();
        Console.Write("B");
    }
}

所以只有在这种情况下字符串" A"和" B"将被写入控制台。所以问题是如何摆脱" base.Say();"线?所以我想强制每个派生的方法" Say"从基类调用base方法。可能吗?我正在寻找任何解决方案,即使我将被迫使用其他关键字

1 个答案:

答案 0 :(得分:8)

虽然无法直接实现此目的,但您可以通过编写自己的 not virtual方法来获得相同的效果,该方法在执行某些固定操作后调用虚拟方法:

public class A
{
    public void Say()
    {
        Console.Write("A");
        SayImpl();
    }
    protected virtual void SayImpl()
    {
        // Do not write anything here:
        // for the base class the writing is done in Say()
    }
}

public class B : A
{
    protected override void SayImpl()
    {
        Console.Write("B");
    }
}

现在,任何继承自A并实施SayImpl()的类都会在其打印输出前加A