具有已定义基类型的Type类的类型安全集合
本文关键字:Type 类型安全 集合 类型 定义 基类 | 更新日期: 2023-09-27 18:24:43
我在代码中使用泛型集合:
List<Type>
我真正想要的是获得具有已定义basetype的类型的类型安全集合
类似于List<typeof(BaseType)>
,但有效:)
不能创建描述从基类型派生的类型的Type
对象的类型安全集合,因为C#的类型安全泛型机制只能对编译时已知的类型进行操作,而typeof(MyBaseType)
和typeof(MyDerivedType)
之间的关系只有在运行时才知道。
此外,您必须记住,这些Type
对象之间的关系实际上并不是继承关系。string
可以从object
导出,但typeof(string)
不从typeof(object)
导出。因此,尽管他们的关系似乎与类型安全有关,但事实并非如此。
就类型安全性而言,特定类型的子类型的Type
对象的集合仅相当于偶数int
s的集合——它与类型安全无关,因此很难用泛型实现。
我不确定你是否真的理解Type
到底是什么。
Type
是一个描述运行时类型(字段、属性、方法、事件等)的类,但除此之外,typeof(TDerived)
和typeof(TBase)
在类型上没有真正的区别。
如果您只想要一个可以存储对TBase
和TDerived
实例的引用的列表,您可以简单地声明:
List<TBase> myList;
如果您只想要一个存储对Type
实例的引用的列表,您只需像已经做的那样声明一个List<Type>
,就可以在该列表中放置任何Type
引用,例如typeof(int)
、typeof(TBase)
等。