假设我有以下类层次结构:TaskViewer
继承自ListViewer<Task>
,后者继承自ViewerBase
。
如果我调试到ViewerBase
中声明的方法并查看this.GetType()
,它会正确返回TaskViewer
。但是,我找不到一个属性或方法,它将返回继承中使用的泛型参数,即Task
。显然,如果我处于TaskViewer
或ListViewer<T>
的背景下,那么我很容易就会知道这一点。
通过查看Task
属性,我可以看到它是BaseType.FullName
,但我已经浏览了列表,我看不到任何东西都认为自己已经使用了这个泛型参数。
如何从根类中的此方法中获取原始泛型参数?
答案 0 :(得分:6)
您可以按如下方式访问基类型的泛型参数(假设只有一个类型参数)。
typeof(TaskViewer).BaseType.GetGenericArguments()[0]
在ViewerBase
中你会使用
this.GetType().BaseType.GetGenericArguments()[0]
但是看起来很容易看到基类中派生类的泛型类型参数。您无法知道实际类型是什么,因此如果它根本没有泛型参数则不会。你能说一下你的使用场景吗?
答案 1 :(得分:1)
确保你这样做是有充分理由的。如果您这样做是为了将返回的类型放在if语句中并根据类型执行不同的操作,则这是用于多态,可能是通用约束,而不是反射。