如何限制子类在C#中覆盖父类方法?

时间:2015-10-07 17:17:07

标签: c# inheritance

我试图在C#中实现模板方法模式。但是我找不到一种方法来限制子类覆盖我的基类模板方法,除非我有两级深度继承来使用密封。

如果我省略虚拟,子类可以自由提供新的实现,在这种情况下,它将从子类的引用中调用。相反,我需要一些机制,比如Java中的final,其中我可以限制模板方法覆盖父类。

1 个答案:

答案 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
    }
}