我写了一些非密封的类,它包含3个虚拟公共方法和一个私有方法。
我公开这个类,我的所有开发组成员都可以使用这个类(包括继承和覆盖虚拟公共方法)。
其中一个私有方法名称是' PrivateMethod77()'。
每次公开方法' PublicMethod77()'是call => ' PrivateMethod77'是在方法实现的第一行调用(在此行之后有更多的蕴涵逻辑)。
我想保持这种逻辑,并且强迫' publicMethod77方法的继承和覆盖,将PrivateMethod77方法作为PublicMethod77的第一行调用
有办法吗?
答案 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
模板方法模式的好处: