Я провожу время с этим, хотя я чувствую, что упускаю что-то очевидное. У меня есть элемент управления, который наследуется от System.Web.UI.WebControls.Button
, а затем реализует интерфейс, который я настроил. Вот и думай ...
public class Button : System.Web.UI.WebControls.Button, IMyButtonInterface { ... }
В коде страницы я хотел бы найти все экземпляры этой кнопки в ASPX. Поскольку я действительно не знаю, каким будет тип , просто интерфейс , который он реализует, это все, что мне нужно, когда я перебираю дерево управления. Дело в том, что мне никогда не приходилось определять, использует ли объект интерфейс, а не просто тестировать его тип. Как я могу перебрать дерево управления и вытащить все, что реализует IMyButtonInterface
чистым способом (с Linq все будет в порядке)?
Опять же, знайте, что это что-то очевидное, но сейчас я начал активно использовать интерфейсы, и я не могу сосредоточиться на результатах Google, чтобы понять это:)
Редактировать: GetType()
возвращает реальный класс, но не возвращает интерфейс, поэтому я не могу проверить это (например, он вернул бы "MyNamespace.Button
" вместо " IMyButtonInterface
"). При попытке использовать «as
» или «is
» в рекурсивной функции, параметр type
даже не распознается внутри функции! Это довольно странно. Так
if(ctrl.GetType() == typeToFind) //ok
if(ctrl is typeToFind) //typeToFind isn't recognized! eh?
Определенно почесал голову над этим.