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