【发布时间】:2015-08-27 07:05:36
【问题描述】:
我想创建一个 List<System.Type> listOfTypesOfGlasses ,其中 Type 必须实现一个特定的接口 IGlass ,所以我可以用眼镜类型加载它。
有没有办法在编译时强制执行这个约束(必须实现IGlass)?
【问题讨论】:
标签: c# interface compile-time
我想创建一个 List<System.Type> listOfTypesOfGlasses ,其中 Type 必须实现一个特定的接口 IGlass ,所以我可以用眼镜类型加载它。
有没有办法在编译时强制执行这个约束(必须实现IGlass)?
【问题讨论】:
标签: c# interface compile-time
实现一个隐藏列表的方法/类。
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> 并对其施加通用约束 - 但是不鼓励这种做法。
【讨论】:
IGlass 的类的实例的列表。我想要的不是类的实例,而是类Type 的实例,我知道包含的数据描述了实现IGlass 的类型。第二个和第三个想法 - 我不确定我该怎么做或它对我有什么帮助
否 - typeof(IGlass) 和 typeof(Glass) 都是 Type 对象 - 不是可以在通用约束中过滤的不同类。存储的值没有通用限制。如果您想存储所有实现IGlass 的类型的实例,这是可能的,但您不能过滤可以存储的实际Type 对象。
【讨论】: