MethodInfo.Invoke()中的Object参数是什么?

时间:2015-01-30 18:08:31

标签: c# reflection invoke methodinfo

Object obj的{​​{1}}参数的目的是什么?

MSDN documentation说:

  

要调用方法或构造函数的对象

我不明白你如何在一个对象上调用方法"" 。我以为你刚刚从MethodInfo.Invoke()或一个班级调用了一个方法,那就是它。

而且,我是否能够使用任何类型的任何对象来获取此参数?

2 个答案:

答案 0 :(得分:4)

如果方法为static,则执行只需调用该方法,在这种情况下,您将null传递给Invoke的参数。

对于实例方法,您可以在对象的实例上调用该方法,而不仅仅是“无”。通常调用方法的对象实例是传递给Invoke的对象实例。

例如,如果你有:

string s = "hi";
var s2 = s.Trim();

您可以通过执行以下操作来模拟反射:

string s = "hi";
MethodInfo trimMethod = GetTrimMethodInfo();
object s2 = trimMethod.Invoke(s);

答案 1 :(得分:2)

它应该用于调用方法的对象实例,例如:

private class MyClass
{
    private string _name;
    public MyClass(string name)
    {
        _name = name;
    }

    public void Foo()
    {
        Console.WriteLine(_name);
    }
}

如果我们像这样调用方法foo:

Type magicType = typeof (MyClass);

MyClass c1 = new MyClass("1st class");
MyClass c2 = new MyClass("2nd class");

// Get the ItsMagic method and invoke with a parameter value of 100

MethodInfo magicMethod = magicType.GetMethod("Foo");
object magicValue = magicMethod.Invoke(c1, null);   // Output is 1st class

如果我们用c2调用,我们得到:

object magicValue = magicMethod.Invoke(c2, null);   // Output is 2nd class