实现特定接口的 "Type" 的 C# 列表
C# list of "Type" that implements specific interface
我想创建一个 List<System.Type> listOfTypesOfGlasses
,其中 Type
必须实现一个特定的接口 IGlass
,这样我就可以加载眼镜类型。
有没有办法在编译时强制执行此约束(必须实现 IGlass
)?
实现隐藏列表的method/class。
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>
编写自己的包装器 class。
或
Subclass List<T>
并对其施加通用约束 - 但是不鼓励这种做法。
否 - typeof(IGlass)
和 typeof(Glass)
都是 Type
对象 - 没有区别 类 可以在通用约束中过滤。没有对存储的 值 起作用的通用限制。如果你想存储 个实例 的类型都实现 IGlass
那是可能的,但你不能过滤可以存储的实际 Type
对象。
我想创建一个 List<System.Type> listOfTypesOfGlasses
,其中 Type
必须实现一个特定的接口 IGlass
,这样我就可以加载眼镜类型。
有没有办法在编译时强制执行此约束(必须实现 IGlass
)?
实现隐藏列表的method/class。
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>
编写自己的包装器 class。
或
Subclass List<T>
并对其施加通用约束 - 但是不鼓励这种做法。
否 - typeof(IGlass)
和 typeof(Glass)
都是 Type
对象 - 没有区别 类 可以在通用约束中过滤。没有对存储的 值 起作用的通用限制。如果你想存储 个实例 的类型都实现 IGlass
那是可能的,但你不能过滤可以存储的实际 Type
对象。