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