【发布时间】:2010-09-06 22:01:22
【问题描述】:
与这个玩得很开心,虽然我觉得我错过了一些明显的东西。我有一个继承自System.Web.UI.WebControls.Button 的控件,然后实现我设置的接口。所以想想……
public class Button : System.Web.UI.WebControls.Button, IMyButtonInterface { ... }
在页面的代码隐藏中,我想从 ASPX 中找到此按钮的所有实例。因为我真的不知道 type 将是什么,只知道它实现的 interface,这就是我在循环控制树时所要做的一切。问题是,我从来不需要确定一个对象是否使用接口而不是只测试它的类型。 如何遍历控制树并以干净的方式拉出任何实现IMyButtonInterface 的内容(Linq 可以)?
再一次,知道这很明显,但刚刚开始大量使用接口,我似乎无法集中我的谷歌结果来弄清楚:)
编辑: GetType() 返回实际的类,但不返回接口,所以我无法对此进行测试(例如,它会返回“MyNamespace.Button”而不是“IMyButtonInterface”)。在尝试在递归函数中使用“as”或“is”时,type 参数甚至无法在函数中得到识别!这很奇怪。所以
if(ctrl.GetType() == typeToFind) //ok
if(ctrl is typeToFind) //typeToFind isn't recognized! eh?
这件事肯定让我摸不着头脑。
【问题讨论】: