4

各 Page クラスが継承する抽象 BasePage クラスがあります。コア機能とは別に、ほとんどすべての派生クラスが実装する反復的なタスクを BasePage でカバーしたいと考えています。ただし、これを行うには、派生クラスで定義されているコントロール (ドロップダウンリスト、グリッドビュー、メニューなど) への参照を BasePage クラスが保持する必要があります。

私の質問は、派生 Page クラスで定義されたコントロール参照を親クラスに渡す最良の方法は何ですか?

次のいずれも、実際に「最良の」ソリューションを提供しません。

  1. 派生クラスのコントロールの Id と同じ名前の変数を宣言するベース ページ。これにより、ASP.NET デザイナは派生クラスでコントロールを再作成しなくなります。(派生クラスはハードコードされた名前を知り、使用することを余儀なくされているので、私はこれが好きではありません)

  2. 抽象プロパティを作成し、派生クラスにコントロール参照を返すように強制します (CON: 場合によっては、派生クラスにそのようなコントロールが含まれない場合があります)

  3. コントロールを関数呼び出しパラメーターとして渡します (CON: 関数呼び出しの繰り返しコードが必要です。関数自体は BasePage にある必要さえありません)。

4

1 に答える 1

3

よりオブジェクト指向のアプローチは、コントロール クラス (dropdownlist、gridview、menu...) を拡張し、反復タスク用のメソッドを追加することです。

BasePage でコントロールを定義する必要がある場合は、BasePage でこれらのコントロールの仮想プロパティを作成できます。それを使用したい派生ページは、これをオーバーライドし、必要なコントロールを提供します。

public class BasePage : System.Web.UI.Page
{
    protected virtual DropDownList MyDropDown { get; set; }

    protected void PopulateList()
    {
        if (MyDropDown != null)
            MyDropDown.Items.Add("option");
    }
}

public partial class MyPage : BasePage
{
    protected override DropDownList MyDropDown
    {
        get
        {
            return DerivedClassList;
        }
        set
        {
            base.DerivedClassList = value;
        }
    }
}
于 2013-01-05T04:40:41.577 に答える