rus*_*der 0 c# generics reflection
上下文我想通过反射来调用此函数
instanceOfEventPublisher.Publish<T>(T eventInst);
我打电话的时候
`private void GenCall(IEventPublisher eventPublisher,object theEventObj){
var thePublisher = eventPublisher.GetType();
thePublisher.InvokeMember(
"Publish",
BindingFlags.Default | BindingFlags.InvokeMethod,
null,
eventPublisher,
new object[] {theEventObj}
);
}
Run Code Online (Sandbox Code Playgroud)
`
我得到:System.MissingMethodException:找不到方法'EventAggregator.EventPublisher.Publish'.
如何调用通用?
您需要使用MakeGenericType方法,如下所示:
var realizedType = thePublisher.MakeGenericType(eventObj.GetType());
Run Code Online (Sandbox Code Playgroud)
然后,您可以在realizeType上调用Publish方法.如果您处理Generic类型,情况就是如此; 但是,您的代码看起来并不像.您为eventPublisher加入的接口不是通用接口.
你可以发布你的其余代码,所以我们可以看到接口定义和泛型类定义.
编辑
这里有一些示例代码,我展示了如何通过反射调用泛型类型的方法:
public class Publisher<T>
{
public void Publish(T args)
{
Console.WriteLine("Hello");
}
}
static void Main(string[] args)
{
var type = typeof(Publisher<>);
Publisher<EventArgs> publisher = new Publisher<EventArgs>();
var realizedType = type.MakeGenericType(typeof(EventArgs));
realizedType.InvokeMember("Publish", BindingFlags.Default | BindingFlags.InvokeMethod,
null,
publisher
,
new object[] { new EventArgs() });
}
Run Code Online (Sandbox Code Playgroud)