base.MethodName()
継承されたクラスで some のオーバーライドを呼び出す必要がある多くのフレームワークとヘルパー クラスを見てきました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
}
ユーザーはある程度の柔軟性を失います (「壊れるオプションが少ない、またはフレームワークが正しく機能しない」と読むことができます) が、使用法は簡単です。