テンプレートメソッドパターンは、抽象基本クラスにオーバーライドできないメソッドがあることを提供します。このメソッドは、共通のアルゴリズムを実装するため、サブクラスでオーバーライドしないでください。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#の)サブクラスによってオーバーライドされるのを防ぐことができないのはなぜですか?