[英]How to use Type.InvokeMember to call an explicitly implemented interface method?
我想通过反射调用一个显式实现的接口方法(BusinessObject2.InterfaceMethod),但是当我使用下面的代码尝试这个时,我得到一个Type.InvokeMember调用的System.MissingMethodException。 非接口方法可以正常工作。 有没有办法做到这一点? 谢谢。
using System;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Text;
namespace Example
{
public class BusinessObject1
{
public int ProcessInput(string input)
{
Type type = Assembly.GetExecutingAssembly().GetType("Example.BusinessObject2");
object instance = Activator.CreateInstance(type);
instance = (IMyInterface)(instance);
if (instance == null)
{
throw new InvalidOperationException("Activator.CreateInstance returned null. ");
}
object[] methodData = null;
if (!string.IsNullOrEmpty(input))
{
methodData = new object[1];
methodData[0] = input;
}
int response =
(int)(
type.InvokeMember(
"InterfaceMethod",
BindingFlags.InvokeMethod | BindingFlags.Instance,
null,
instance,
methodData));
return response;
}
}
public interface IMyInterface
{
int InterfaceMethod(string input);
}
public class BusinessObject2 : IMyInterface
{
int IMyInterface.InterfaceMethod(string input)
{
return 0;
}
}
}
异常详细信息:“未找到方法'Example.BusinessObject2.InterfaceMethod。”
这是因为BusinessObject2
显式实现了IMyInterface
。 您需要使用IMyInterface
类型来访问并随后调用该方法:
int response = (int)(typeof(IMyInterface).InvokeMember(
"InterfaceMethod",
BindingFlags.InvokeMethod | BindingFlags.Instance | BindingFlags.Public,
null,
instance,
methodData));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.