理解C#中的语法

时间:2010-04-23 13:06:59

标签: c# asp.net .net-3.5 findcontrol

我希望有人可以帮助我理解下面代码行中发生的事情:

Table t = (Table)Page.FindControl("Panel1").FindControl("tbl");

我理解Page.FindControl("Panel1").FindControl("tbl"); 为什么在Page.FindControl之前有一个(表)?

4 个答案:

答案 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的继承属性。