警告:虽然接受的答案是正确的,但对于任何试图实现此功能的人,请查看@CodesInChaos的评论。这是我自己的一个坏主意。
我有一个通用接口和一个实现该接口的类,可以实现'n'次:
interface IA<T>
{
T Foo();
}
class Baz1 { }
class Baz2 { }
class Bar : IA<Baz1>, IA<Baz2>
{
Baz1 Foo() { return new Baz1(); }
Baz2 Foo() { return new Baz2(); }
}
如何使用反射在 Bar
实例上调用 Foo
方法?
我已经有以下代码来获取接口定义和泛型类型参数:
class Frobber
{
void Frob(object frobbee)
{
var interfaces = frobbee.GetType()
.GetInterfaces()
.Where(i => i.IsGenericType &&
i.GetGenericTypeDefinition() == typeof(IA<>).GetGenericTypeDefinition());
}
}
Bar
类实现了IObservable<Baz1>
、IObservable<Baz2>
等等,同时也实现了IObserver<Baz1>
、IObserver<Baz2>
等等,而不是IA<T>
。但我不想混淆讨论。也许这很相关? - Lars KemmannIObservable<out T>
是协变的。因此,如果你为不同的T
实现它,返回不同的序列,你将无法获得正确的IObservable<object>
实现。 - CodesInChaosIEnumerable<T>
的类似问题:1)一个类上有多个IEnumerable<T>
接口 - 如何处理非泛型方法? 2)在 C# 中实现多个 IEnumerables。 - CodesInChaos