Понимание синтаксиса в C # - PullRequest
1 голос
/ 23 апреля 2010

Я надеюсь, что кто-то может помочь мне понять, что происходит в строке кода ниже:

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

Я понимаю Page.FindControl("Panel1").FindControl("tbl"); Почему существует (Таблица) перед Page.FindControl?

Ответы [ 4 ]

10 голосов
/ 23 апреля 2010

FindControl объявлено как возвращающее Control (по предположению :), тогда как вам нужно сохранить результат в переменной типа Table.

Бит (Table) - это приведение - он в основном говорит: «Я думаю, что это будет Table. Проверьте это для меня во время выполнения, а затем позвольте мне использовать его соответствующим образом».

1 голос
/ 23 апреля 2010

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;
  }

}
0 голосов
/ 23 апреля 2010

FindControl возвращает тип Control.

Таблица в вашем коде наследует Control. При явном приведении объекта к определенному типу вы получаете доступ ко всем свойствам этого типа вместо только унаследованных свойств из Control.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...