我不知道如何解释这一点,但无论如何我都会去。
我有一个基本用户控件,需要传递泛型类型。
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
}
答案 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}}的泛型或非泛型形式,但它会比此