Webコントロールを作成するときは、OnLoadをオーバーライドするか、Page_Loadを実装する必要があります
-
02-07-2019 - |
質問
Visual Studioで新しいWebユーザーコントロールを作成すると、デフォルトでPage_Loadイベントが追加されます。コントロールのベース OnLoad
イベントをオーバーライドするのではなく、これを使用する利点は何ですか? OnLoad
の前に Page_Load
イベントが発生するだけですか?
解決
OnLoad
メソッドは、 Load
イベントが発生する場所でなければなりません。私は、イベントを発生させるために特別な処理を行う必要がない限り、常にイベントを処理しようとします。
通常の状況でイベント自体を処理することをお勧めします。
他のヒント
この記事は、Microsoftのページライフサイクルにあります。便利です。
上記でわかるように、選択が知識を持って行われた場合、ほとんどの場合個人的な選択になります。私が見た中で最も速くて確かな概要は http://weblogs.asp.net/infinitiesloop/archive/2008/03/24/onload-vs-page-load-vs-load-event.aspx
これは本当に選択の問題です。私にとって、特にオーバーライドできるメソッドがある場合、オブジェクトがそれ自体にイベントをアタッチするのは奇妙に思えます。
ASPのGlobal.asaのモデルであり、継承と仮想メソッドのオーバーライドを理解していない開発者の水準を下げるために、ASP.NETチームはイベントを使用したと思います。
メソッドをオーバーライドするには、ページのライフサイクルに関する詳細な知識が必要ですが、「間違った」ものは何もありません。
" ASP.NET Webサーバーコントロールイベントモデル" (ページへのリンク) 次のような便利なステートメントがいくつかあります。
AutoEventWireup 属性の欠点の1つは、ページイベントハンドラーに特定の予測可能な名前を付ける必要があることです。これにより、イベントハンドラーの命名方法の柔軟性が制限されます。もう1つの欠点は、ASP.NETが実行時にメソッドを検索するため、パフォーマンスに悪影響が及ぶことです。トラフィック量の多いWebサイトの場合、パフォーマンスへの影響が大きい可能性があります。
( AutoEventWireup フラグはPage_Loadなどのメソッドをオンにします)
UserControl
を継承している場合でも、必要がない場合は、保護されたメソッドをオーバーライドしないでください。 Page_Load
は、 UserControl
に固有のコードを簡単に追加できるようにするためのものです。
OnLoad
をオーバーライドするのは、 Load
イベントが発生する(/ if)の絶対的な制御が必要な場合のみです(まれですが、IMO)。
私はそれが同じだと思います。 私見、イベントを使用すると、イベントに複数のリスナーが発生する可能性があるため、少し柔軟性があります!
2つの方法には1つの潜在的に重要な違いがあると思います。
私が言及しているのは、実行シーケンスを制御する機能です。
オーバーライドしている場合は、呼び出しているためにベースクラスのロードがいつ行われるかがわかります。これはより多くの制御を提供しますが、多くの人が議論するように、おそらく悪いことです。
イベントを使用する場合、呼び出しの順序に関して保証はありません。これにより、ロードフェーズ中にスーパークラスが実行していることについて不可知であるはずのLoadイベントを記述する必要があります。私はこれが好ましいアプローチだと思うし、それがVS自動生成コードがこのようになっている理由かもしれません。