实例上的Type.InvokeMember

时间:2011-10-12 13:48:25

标签: c# reflection

如何在实例上调用InvokeMember?

例如,如果我想使用实例的参数MyMethod()调用方法"argument string"

MyObject myInstance = MyObject.GetObject();

// ?

我试过这个:

myInstance.GetType().InvokeMember("MyMethod",
    BindingFlags.InvokeMethod | BindingFlags.Public,
    null,
    null,
    new Object[] { "argument string" })

但它不起作用,抱怨MyObject没有MyMethod,实际上它是一个实例方法,而不是类方法,所以我认为它试图将它作为静态方法调用。

任何帮助?

2 个答案:

答案 0 :(得分:6)

您的第二个null应该是调用的目标:

myInstance.GetType().InvokeMember("MyMethod",
    BindingFlags.InvokeMethod | BindingFlags.Public,
    null,
    myInstance,
    new Object[] { "argument string" })

有关详细信息,请参阅the documentation

答案 1 :(得分:2)

怎么样:

MethodInfo method = typeof(MyObject).GetMethod("MyMethod", BindingFlags.Public | BindingFlags.Instance);
method.Invoke(myInstance, new object[] { "argument string" });