我有类似下面的方法:C#通行证泛型在运行时
public IEnumerable<T> GetControls<T>()
: where T : ControlBase
{
// removed.
}
然后,我创建了一个类:
public class HandleBase<TOwner> : ControlBase
: TOwner
{
// Removed
}
我希望能够调用
GetControls<HandleBase<this.GetType()>>;
它将使用该类的类型传递给HandleBase。这基本上会得到所有拥有这种类型的HandleBase。
我该如何做到这一点?
编辑:
我使用.NET 2.0解决方案,所以大于2.0将无法正常工作。
这个想法是让ControlBase拥有其他ControlBase for“children”的集合。然后他们可以根据他们的类型与GetControls<T>()
查询。例如,这可以让我得到一个Shape的所有HandleBase。然后,我可以采取所有这些,并设置Visible = false或与他们一起做其他事情。因此,我可以操纵特定类型的儿童进行收藏。
HandleBase<TOwner>
需要陶纳,因为它具有与“拥有类型”的引用。所以你只能添加任何将HandleBase扩展到Shape的东西。合理?
感谢您的帮助!
@TheCloudlessSky,为什么调用'this.GetType()'?如果你正在调用'GetControls>();'从一个基于实例的类[如'this'指示],为什么不简单地使用实现类的声明类型名?如果这是一个基类,则有将子类的类型暴露给基类的方法。 –
2010-04-09 14:46:33
请参阅上面的修改。 – TheCloudlessSky 2010-04-09 16:07:41