来自基础接口的通用类型

5

我的类结构(简化版)

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。
1. 使用反射如何实现这一点? 2. 如何确保该类型实现了Foo,而不管T的类型是什么?类似于
bool bIsFoo = typeof(SomeType).IsAssignableFrom(Foo<>)
上述方法不起作用。
1个回答

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<>))

1
谢谢,那个解决了问题。 - DemoBytom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接