多くのフレームワークとヘルパークラスでは、継承されたクラスオーバーライドのbase.MethodName()
をMethodName()
という名前で呼び出す必要があります。ただし、オーバーライドされたメソッドの最後の呼び出しであることが必要な場合もあれば、最初の呼び出しであることが必要な場合もあります。どちらの方法で呼び出すべきかは必ずしも明白ではなく、通常はドキュメントやサンプルを読むだけで把握できます。基本呼び出し順序規則をオーバーライドしますか?
私はその領域でいくつかのベストプラクティスがなく、オーバーライドされたメソッド内のメソッドbase
の場所を呼び出すのはフレームワークデザイナーのみに依存するという結論に至りましたか?あるいは、私はいくつかのデザインを別のものよりも好むべきですか?個人的には、コンストラクターのように、より自然なものをベースにすることがまず必要であることがわかります(この設計が実施されています)。または、開発者に特定のコールオーダーを使用させるいくつかの状況(または領域)がありますか?
更新。 @Attilaの助けを借りて、今度はbase
クラスコールのほとんどを再設計することができます。この代わりに:
// FRAMEWORK
public virtual void SomeMethod()
{
// framework code
}
// USAGE
public override void SomeMethod()
{
base.SomeMethod();
// user code
}
これを行います。
// FRAMEWORK
public void SomeMethod()
{
// framework code
// you can place UserSomeMethod where you want,
// you can change it position in new versions of a fremework
// without breaking user code
this.SomeMethodUserCode();
}
protected abstract void SomeMethodUserCode();
// USAGE
protected override void SomeMethodUserCode()
{
// user code
}
ユーザーは、ある程度の柔軟性を失い(「壊れる、または間違ったあなたのフレームワークの仕事を作るために少数のオプションを持っている」と読むことができます)が、使い方は簡単です。
基本的には基本的にすべてを呼び出さないと約束しました。必要なオーバーライドは抽象イモです。私たちは、requred 'base.'を持つフレームワークを呼び出して、悪いデザインを呼び出すことができますか?それは問題を解決する! :-) –
私はそれが状況に依存すると思う:物事を行う特定の順序があるが、計算の一部をカスタマイズすることができる場合、抽象メソッドを呼び出す基本が最良の方法です。計算をある特定の方法で記述できない場合、一般的な、しかし固定の計算を実行するために派生した呼び出しベースがより良い方法です。 – Attila