C#列表"类型"实现特定的接口

时间:2015-06-11 14:11:20

标签: c# interface compile-time

我想创建一个List<System.Type> listOfTypesOfGlasses,其中Type必须实现特定的接口IGlass,因此我可以使用眼镜类型加载它。 有没有办法在编译时强制执行此约束(必须实现IGlass)?

2 个答案:

答案 0 :(得分:6)

实现隐藏列表的方法/类。

class YourClass {
    // intentionally incomplete
    private List<Type> listOfTypesOfGlasses;
    public void AddToList<T>() : where T: IGlass
    {
        listOfTypesOfGlasses.Add(typeof(T));
    }
}

编辑:以下是原始答案,假设Type表示占位符,而不是System.Type

<击> 您需要做的只是List<IGlass>

你应该在List<T>周围写一个有约束的自己的包装类。

子类List<T>并在其上加上通用约束 - 但不鼓励这种做法。

答案 1 :(得分:0)

否 - typeof(IGlass)typeof(Glass)都是Type个对象 - 不是可以在通用约束中过滤的不同类。存储的没有通用限制。如果要存储所有可能实现IGlass的类型的实例,但您可以;过滤可以存储的实际Type对象。