我希望有人可以帮助我理解下面的代码行中发生了什么:
Table t = (Table)Page.FindControl("Panel1").FindControl("tbl");
我明白Page.FindControl("Panel1").FindControl("tbl");
为什么Page.FindControl之前有一个(表)?
我希望有人可以帮助我理解下面的代码行中发生了什么:
Table t = (Table)Page.FindControl("Panel1").FindControl("tbl");
我明白Page.FindControl("Panel1").FindControl("tbl");
为什么Page.FindControl之前有一个(表)?
FindControl
被声明为返回Control
(猜测:),而您需要将结果存储在类型的变量中Table
。
该(Table)
位是一个演员- 它基本上是在说,“我认为这将是一个Table
。在执行时为我检查它,然后让我相应地使用它。”
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
.