如何在调用自己的植入之前强制继承class的方法实现来调用base方法?

时间:2017-07-29 14:30:13

标签: c# oop inheritance design-patterns override

我写了一些非密封的类,它包含3个虚拟公共方法和一个私有方法。

我公开这个类,我的所有开发组成员都可以使用这个类(包括继承和覆盖虚拟公共方法)。

其中一个私有方法名称是' PrivateMethod77()'。

每次公开方法' PublicMethod77()'是call => ' PrivateMethod77'是在方法实现的第一行调用(在此行之后有更多的蕴涵逻辑)。

我想保持这种逻辑,并且强迫' publicMethod77方法的继承和覆盖,将PrivateMethod77方法作为PublicMethod77的第一行调用

有办法吗?

1 个答案:

答案 0 :(得分:3)

我认为你不能强制继承类总是首先调用方法的超级实现,但是:

通常我会使用Template method pattern来处理这样的情况:

public abstract class TemplateEnforcer
{
    private void TheSame()
    {
        Console.WriteLine("Everyone calls me;");
    }

    public void TemplateMethod()
    {
        this.TheSame();
        this.NeedsImplementation();
    }

    protected abstract void NeedsImplementation();
}

public class TemplateImplementer : TemplateEnforcer
{
    protected override void NeedsImplementation()
    {
        Console.WriteLine("Implemented in TemplateImplementer");
    }
}

此来电的代码输出new TemplateImplementer().TemplateMethod()

    //Everyone calls me;
    //Implemented in TemplateImplementer

模板方法模式的好处:

  1. 强制实施抽象方法。
  2. 代码保持干燥。
  3. 避免了错误,并且开发人员会指导开发人员。