循环遍历泛类的子类

时间:2011-10-27 10:21:47

标签: c# class generics loops

我不知道如何解释这一点,但无论如何我都会去。

我有一个基本用户控件,需要传递泛型类型。

public abstract class BaseControl<T> : UserControl where T : BaseClass, new()
{

}

Base Control的目的是编辑BaseClass的子项的属性。

然后我有几个类似于以下的控件

public partial class MyControl : BaseControl<MyClass>
{
}

“MyClass”继承BaseClass。

让我们说我有MyControl和其他类似于它在页面中使用的。 我可以执行以下操作来获取从BaseClass继承的所有控件吗?

foreach(BaseControl<T> c in this.Controls)
{
    //do stuff
}

1 个答案:

答案 0 :(得分:3)

非常很容易。如果你有BaseControl继承自BaseControl<T>的非通用public abstract class BaseControl : UserControl {} public abstract class BaseControl<T> : BaseControl where T : BaseClass, new() 会更简单:

foreach(BaseControl c in this.Controls.OfType<BaseControl>())
{
    //do stuff
}

然后

T

您也可以将的任何成员放在非通用类中的BaseControl<T>

除此之外,你可以检查每个控件的类型层次结构,看看它们是否使用{{1}}的泛型或非泛型形式,但它会比此