我试图在C#中实现模板方法模式。但是我找不到一种方法来限制子类覆盖我的基类模板方法,除非我有两级深度继承来使用密封。
如果我省略虚拟,子类可以自由提供新的实现,在这种情况下,它将从子类的引用中调用。相反,我需要一些机制,比如Java中的final,其中我可以限制模板方法覆盖父类。
答案 0 :(得分:3)
您的模板方法应该是非虚拟的(它在C#中是默认的)。它应该调用子类覆盖的受保护的虚拟/抽象方法。
例如
public abstract class Base
{
public void TemplateMethod()
{
//do sth
OtherMethod();
//do sth more
}
protected abstract void OtherMethod();
}
public class Child : Base
{
protected override void OtherMethod()
{
//provide implementation
}
}