模板方法模式规定抽象基类有一个不可覆盖的方法:这个方法实现了通用算法,不应该在子类中被覆盖。在 Java 中,模板方法final
在抽象基类中声明,在 C# 中sealed
关键字具有类似的含义,但不能声明未覆盖的方法sealed
。
public abstract class Base
{
protected abstract AlgorithmStep1();
protected abstract AlgorithmStep2();
public sealed void TemplateMethod() // sealed: compile error
{
AlgorithmStep1();
AlgorithmStep2();
}
}
我怎么解决这个问题?为什么不能阻止一个方法可以被子类覆盖(在 C# 中)?