我想通過反射調用顯式實現的接口方法(BusinessObject2.InterfaceMethod),但是當我使用以下代碼嘗試此操作時,Type.InvokeMember調用中出現System.MissingMethodException。非界面方法工作正常。有沒有辦法做到這一點?謝謝。如何使用Type.InvokeMember來調用一個顯式實現的接口方法?
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;
}
}
}
異常詳細信息:「Method'Example.BusinessObject2.InterfaceMethod'not found。」
'type'應類型的接口,那麼'instance'在InvokeMember應該是你的類的實例。現在看起來'type'是針對你的課程的,而不是你的接口。 – vcsjones 2013-03-08 14:24:00
@vcsjones除了在調用CreateInstance之外,它需要是具體類型,而不是接口。但基本上:是的,你說什麼 – 2013-03-08 14:25:30
OK,CreateInstance已經使用了具體類型,所以沒有改變。我不確定InvokeMember中的哪個實例應該是您班級的一個實例。「手段。請你能詳細說明/提供一些示例代碼嗎? – Polyfun 2013-03-08 14:36:06