我的班级结构(简化)
interface Foo<T> { }
abstract class Bar1 : Foo<SomeClass> { }
abstract class Bar2 : Foo<SomeOtherClass> { }
class FinalClass1 : Bar1 { }
class FinalClass2 : Bar2 { }
现在,只有类型FinalClass1和FinalClass2我需要从Foo接口获取它们各自的T类型 - FinalClass1的SomeClass和FinalClass2的SomeOtherClass。抽象类可以实现更通用的接口,但总是只有一个Foo。
如何使用反射来实现这一目标?
我怎样才能确保该类型正在实现Foo而不管T是什么类型?像
bool bIsFoo = typeof(SomeType).IsAssignableFrom(Foo<>)
以上不起作用。
答案 0 :(得分:5)
搜索通用接口的类型接口Foo<>
。然后得到该接口的第一个泛型参数:
type.GetInterfaces()
.FirstOrDefault(i => i.IsGenericType && i.GetGenericTypeDefinition() == typeof(Foo<>))
?.GetGenericArguments().First();
如果要检查类型是否正在实施Foo<>
:
type.GetInterfaces()
.Any(i => i.IsGenericType && i.GetGenericTypeDefinition() == typeof(Foo<>))