我希望有人可以帮助我理解下面代码行中发生的事情:
Table t = (Table)Page.FindControl("Panel1").FindControl("tbl");
我理解Page.FindControl("Panel1").FindControl("tbl");
为什么在Page.FindControl之前有一个(表)?
答案 0 :(得分:10)
FindControl
返回Control
(在猜测:),而您需要将结果存储在Table
类型的变量中。
(Table)
位是演员 - 它基本上是在说,“我认为这将是Table
。在执行时检查一下,然后让我相应地使用它。“
答案 1 :(得分:1)
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;
}
}
答案 2 :(得分:1)
答案 3 :(得分:0)
FindControl返回类型Control
。
代码中的表继承Control
。通过将对象显式地转换为已定义的Type,您可以访问该Type的所有属性,而不只是Control
的继承属性。