我想要一个类类型列表(而不是类实例列表),其中列表的每个成员都是MyClass的子类.
例如,我可以这样做:
List<System.Type> myList;
myList.Add(typeof(mySubClass));
但我想将列表限制为仅接受MyClass的子类.
这与问题like this不同.
理想情况下,我想避免使用linq,因为它在我的项目中目前尚未使用.
解决方法:
Servy is right in his comment和Lee in his:it’s much more preferable to compose than inherit.因此,这是一个不错的选择:
public class ListOfTypes<T>
{
private List<Type> _types = new List<Type>();
public void Add<U>() where U : T
{
_types.Add(typeof(U));
}
}
用法:
var x = new ListOfTypes<SuperClass>();
x.Add<MySubClass>()
请注意,如果您想让其他代码对包含的Types具有读访问权限,而无需其他代码依赖此类,则可以使该类实现类似于IReadOnlyList<Type>
的接口.
但是,如果仍然要继承,则可以创建自己的从List继承的类,然后添加自己的通用Add方法,如下所示:
public class ListOfTypes<T> : List<Type>
{
public void Add<U>() where U : T
{
Add(typeof(U));
}
}
请注意07004:使用第二个版本,您仍然可以添加(typeof(Foo)).