【发布时间】:2012-08-15 17:47:36
【问题描述】:
模板方法模式规定抽象基类有一个不可覆盖的方法:这个方法实现了通用算法,不应该在子类中被覆盖。在 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# 中)?
【问题讨论】:
-
您只能密封被覆盖的成员。缺少关键字
abstract或virtual表示该方法已被密封。
标签: c# design-patterns template-method-pattern