模板方法模式规定抽象基类有一个不可重写的方法:此方法实现常用算法,不应在子类中重写。在Java中,模板方法在抽象基类中被声明为final
,在C#中sealed
关键字具有类似的含义,但未覆盖的方法不能被声明为sealed
。在C#中实现模板方法模式
public abstract class Base
{
protected abstract AlgorithmStep1();
protected abstract AlgorithmStep2();
public sealed void TemplateMethod() // sealed: compile error
{
AlgorithmStep1();
AlgorithmStep2();
}
}
我该如何解决这个问题? 为什么不能阻止一个方法可以被子类(在C#中)覆盖?
您只能密封重写的成员。缺少关键字“abstract”或“virtual”意味着该方法已经被封闭。 – ChaosPandion 2012-08-15 17:49:59