C# では、クラスには何らかの処理を行って値を返す A
public メソッドが含まれます。methodもクラス内にあり、 と同じロジックを実行し、その後にいくつかの追加処理を行ってから、値を返します。Foo()
protected
Bar()
A
Foo()
コードの重複を避けるために、戻り値をBar()
呼び出しFoo()
て中間値として使用します。
class A
{
public virtual String Foo()
{
String computedValue;
// Compute the value.
return computedValue;
}
protected String Bar()
{
String computedValue;
String intermediateValue = Foo();
/// More processing to create computedValue from intermediateValue.
return computedValue;
}
}
クラスB
は から継承しA
、オーバーライドしますFoo()
。オーバーライドは、 の基本クラスの実装を呼び出しますBar()
。
class B : A
{
public override String Foo()
{
base.Bar();
}
}
これは (もちろん) コンピューターがメモリ不足になるまで無限ループに入り、スタック オーバーフロー例外が発生します。
最も明白な解決策はFooInternals
、Foo の内臓を含むプライベート メソッドで A を書き直すことです。Foo と Bar は、そのメソッドの結果を使用するように変更されます。
オーバーライドの代わりにAに強制的に ABar()
を呼び出させる方法はありますか?Foo()
(私がここで賢すぎるのはほぼ確実です。これはポリモーフィズムに完全に反します。しかし、自分の知識をもう少し押し進めたいという衝動を抑えることはできません。)