以下のコード行で何が起こっているのかを誰かが理解するのを手伝ってくれることを願っています:
Table t = (Table)Page.FindControl("Panel1").FindControl("tbl");
Page.FindControlPage.FindControl("Panel1").FindControl("tbl");
の前に(テーブル)があるのはなぜですか?
以下のコード行で何が起こっているのかを誰かが理解するのを手伝ってくれることを願っています:
Table t = (Table)Page.FindControl("Panel1").FindControl("tbl");
Page.FindControlPage.FindControl("Panel1").FindControl("tbl");
の前に(テーブル)があるのはなぜですか?
FindControl
は(推測では:)を返すように宣言されてControl
いますが、結果を型の変数に格納する必要がありますTable
。
この(Table)
ビットはキャストです。基本的には、「これはそうなると思いますTable
。実行時に確認してから、それに応じて使用させてください」と言っています。
()演算子(C#リファレンス) およびキャストと型変換(C#プログラミングガイド)を参照してください。
Page.FindControl
タイプを返すControl
ので、使用する必要のある関連するタイプのコントロールにキャストする必要があります...
参照:http://msdn.microsoft.com/en-us/library/31hxzsdw.aspx
HTH。
サイドノート:
私たちにできることを願っています:
var t = Page.FindControl<Panel>("Panel1").FindControl<Table>("tbl");
たぶん、拡張メソッドの魔法を少し使えば、次のことができます。
public static class Extension{
public static T FindControl<T>(this Control control, string id)
where T : Control{
return control.FindControl(id) as T;
}
}
FindControlはタイプを返しますControl
。
コード内のテーブルはを継承しますControl
。オブジェクトをその定義されたタイプに明示的にキャストすることにより、から継承されたプロパティだけでなく、そのタイプのすべてのプロパティにアクセスできますControl
。