C#-子类类型列表

我想要一个类类型列表(而不是类实例列表),其中列表的每个成员都是MyClass的子类.

例如,我可以这样做:

List<System.Type> myList;
myList.Add(typeof(mySubClass));

但我想将列表限制为仅接受MyClass的子类.

这与问题like this不同.
理想情况下,我想避免使用linq,因为它在我的项目中目前尚未使用.

解决方法:

Servy is right in his commentLee in hisit’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));
    }
}

请注意0​​7004:使用第二个版本,您仍然可以添加(typeof(Foo)).

上一篇:java-使用泛型时失去类型安全性


下一篇:编译为JavaScript时,是否可以在Haxe中使用别名类型?