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

Yan*_*hof 3 c# oop inheritance overriding design-patterns

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

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

私有方法名称之一是“PrivateMethod77()”。

每次调用公共方法 'PublicMethod77()' => 在方法实现的第一行中调用 'PrivateMethod77'(在此行之后有更多的隐含逻辑)。

我想保留这个逻辑并“强制”方法 PublicMethod77 的继承和覆盖调用 PrivateMethod77 方法作为 PublicMethod77 的第一行

有没有办法做到这一点?

Mar*_*ger 5

我不认为您可以强制继承类始终首先调用方法的超级实现,但是:

通常我会在这样的情况下使用模板方法模式

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");
    }
}
Run Code Online (Sandbox Code Playgroud)

此调用的代码输出new TemplateImplementer().TemplateMethod()

    //Everyone calls me;
    //Implemented in TemplateImplementer
Run Code Online (Sandbox Code Playgroud)

模板方法模式的好处:

  1. 抽象方法的实现是强制的。
  2. 代码保持干燥。
  3. 避免了错误,并指导开发人员进行开发。