我不知道如何确切地解释这一点,但是我还是去了。

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

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

}


基本控件的目的是编辑BaseClass子级的属性。

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

public partial class MyControl : BaseControl<MyClass>
{
}


“ MyClass”继承了BaseClass。

因此,可以说我拥有MyControl和其他与页面中使用的控件类似的控件。
我可以执行以下类似的操作来获取从BaseClass继承的所有控件吗?

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

最佳答案

不容易。如果您有一个非通用的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>的通用形式或非通用形式,但是比这复杂一些。

关于c# - 遍历泛型类的子类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7914574/

10-11 07:38