継承による機能の拡張
更新 : 2007 年 11 月
ASP.NET モバイル Web ページの機能を拡張するには、ユーザー コントロールの作成に加えて、継承を使用できます。既存の ASP.NET モバイル コントロール クラスから継承するクラスを作成する場合は、既存のメンバをオーバーライドするか、クラス用に新しいプロパティ、メソッド、およびイベントを作成して、機能を追加できます。
継承の使用によるクラスの作成
次のコード例は、CarList という名前の新しいクラスを示しています。このクラスは、List モバイル コントロールから継承され、自動車情報のレンダリング専用です。CarList クラスは、Car オブジェクトのリストへの連結に必要な情報をカプセル化します。
using System.Web.UI.MobileControls;
namespace myCompany.MobileControls
{
class CarList : List
{
// Override OnInit, and set the DataValueField property
// to the correct property of a Car object to use as the
// value of each list item.
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
this.DataValueField = "id";
}
// Override OnItemDataBind, and set the list item display
// text to a rich expression, containing the year, make,
// and model of the car.
protected override void OnItemDataBind(ListDataBindEventArgs e)
{
base.OnItemDataBind(e);
CarInfo car = (Car)e.DataItem;
e.ListItem.Text =
String.Format("{0}{1}{2}", car.Year, car.Make, car.Model);
}
}
}
継承を使用してコントロールの機能を拡張する詳細な例については、ASP.NET Mobile Quickstart チュートリアルを参照してください。
新しいクラスの配置
この例のクラスを使用するには、クラスをアセンブリにコンパイルし、それをアプリケーションの Bin フォルダに格納します。次の例は、MyCompany.CarList.dll という名前のアセンブリを登録する方法を示しています。@ Register ディレクティブを使用し、カスタム タグを指定してページでアセンブリを登録します。
<%-- Register the myCompany.MobileControls namespace. --%>
<%@ Register TagPrefix="car" Namespace="myCompany.MobileControls"
Assembly="myCompany.CarList" %>
// More code.
<%-- Control declaration --%>
<car:CarList id="myCarList" runat="server" />
継承したコントロールによって親クラスのレンダリング機能が変更されない場合でも、クラス用のアダプタを記述する必要はありません。前の例では、すべての CarList コントロールが List オブジェクトでもあるため、HtmlListAdapter など、現在のブラウザの List コントロールに割り当てられたアダプタが自動的に使用されます。ただし、CarList コントロールの専用のレンダリングを特定のデバイスで使用する場合は、アダプタを記述し、マッピングを Web.config ファイルに登録できます。