3

新しい Web フォームを作成するとき、Visual Studio はデフォルトでコード ビハインドに Page_Load ハンドラーを作成します。そのため、何年もの間、Page_Load でコントロールのプロパティを設定するなどのことを行うためのコードを常に配置してきました。最近、Reflector を使用して Microsoft によって作成されたいくつかのアセンブリを調べたところ、同じタイプのロジックが OnLoad というメソッド (ロード イベントを発生させると思われる) に組み込まれていることがわかりました。そこで、OnLoad または Page_Load で、コントロールのプロパティを設定するのに最適な場所はどこでしょうか? それともまったく別の方法で?また、Page_Load でない場合、Studio はなぜそれをコード ビハインドに追加するのでしょうか?

私の最終的な考え: OnLoad にロジックを配置しても問題なく動作することはわかっていますが、今のところ Page_Load を使用するのは従来の方法であるため、そのままにしておくことにします。OnLoad が他の人のコードに登場するのを見始めた後、何か新しいことを見逃していないかどうかを確認するために、私は本当に質問をしました。思慮深い回答をありがとうございました!

4

5 に答える 5

3

Page_Load は、OnLoad の autoeventwireup です。どちらを使用しても違いはないと思うかもしれませんが、Ode to Code の K. Scott Allenに同意します。通常、予期しないことをしようとしている場合にのみ、標準から逸脱する必要があります。OnLoad のような仮想メソッドをオーバーライドすることは、base.Onload を呼び出さないなど、別のことをしようとしていることを示唆していますが、ほとんどのプログラマーはそうではありません。

于 2009-01-16T06:48:38.200 に答える
1

実際、ASP.Net 1.1開発の古き良き時代に戻ると、実際には、すべてのページで作成された配線が行われているのがわかります。

    #region Web Form Designer generated code
    override protected void OnInit(EventArgs e)
    {
        InitializeComponent();
        base.OnInit(e);
    }

    /// <summary>
    /// Required method for Designer support - do not modify
    /// the contents of this method with the code editor.
    /// </summary>
    private void InitializeComponent()
    {    
        this.Load += new System.EventHandler(this.Page_Load);
    }
    #endregion

そして時々、VSがInitializeComponentのその小さな行を削除する原因となる何かをしましたが、私のページが何もしなくなった理由を理解できませんでした。

于 2009-01-16T09:57:00.300 に答える
1

通常、OnX メソッドはイベント X を発生させるメソッドです。クラスの内部イベント ハンドラーのようなものです。つまり、とりわけ、特定のイベントの発生を検出するクラスをコーディングするときは、通常、1. その場合にクラスが必要とすることを実行し、2. 外部イベントを起動するメソッドを呼び出します。

これが普及した主な理由の 1 つは、現状では、イベント デリゲートを呼び出してイベントを発生させることはできず、そのデリゲートが null かどうかを常に確認する必要があるためだと思います。したがって、このチェックをメソッドにカプセル化する必要があります。

つまり、Load イベントを持つ独自のクラスを作成しない限り、OnLoad メソッドについて考える必要はありません。

于 2009-01-16T06:04:34.170 に答える
1

OnLoad を使用したくないのは、Page_Load イベントを発生させるためのラッパーであるためです。Page_Load イベントを処理していないため、そこにロジックを配置します。

つまり、引き続き Page_Load を使用します。

于 2009-01-16T05:37:01.370 に答える
1

これまでのすべての非常に有効なポイント。しかし、これらの人があなたを怖がらせないでください。OnLoad メソッドを使用する場合は、何も害はありません。base.OnLoad() を呼び出すことを忘れないでください。

于 2009-01-16T08:44:29.230 に答える