gpt4 book ai didi

c# - 通过反射调用一个类的多个泛型接口(interface)方法

转载 作者:太空狗 更新时间:2023-10-30 01:17:55 25 4
gpt4 key购买 nike

警告: 虽然已接受的答案是正确的,但对于任何试图实现此答案的人,请同时参阅@CodesInChaos 的评论。这对我来说是个坏主意。


我有一个通用接口(interface)和一个实现接口(interface)“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 方法?

我已经有以下代码来获取接口(interface)定义和泛型类型参数:

class Frobber
{
void Frob(object frobbee)
{
var interfaces = frobbee.GetType()
.GetInterfaces()
.Where(i => i.IsGenericType &&
i.GetGenericTypeDefinition() == typeof(IA<>).GetGenericTypeDefinition());
}
}

最佳答案

定义:

interface IA<T>
{
T Foo();
}

class Baz1 { }
class Baz2 { }

class Bar : IA<Baz1>, IA<Baz2>
{
Baz2 IA<Baz2>.Foo()
{
return new Baz2();
}

Baz1 IA<Baz1>.Foo()
{
return new Baz1();
}
}

代码:

    Bar b = new Bar();
var methods = typeof(Bar).GetInterfaces().Where(i => i.IsGenericType && i.GetGenericTypeDefinition() == typeof(IA<>)).Select(i => i.GetMethod("Foo"));
foreach(var method in methods)
{
var invoked = method.Invoke(b, null); // or add params instead of null when needed
}

关于c# - 通过反射调用一个类的多个泛型接口(interface)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30004835/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com