0

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

MSDN 文档说:

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

我不明白您如何在对象上“调用”方法。我以为你只是从Main()一个类或一个类中调用了一个方法,就是这样。

而且,我是否可以为此参数使用任何类型的任何对象?

4

2 回答 2

4

如果该方法是static您只调用该方法,并且在这些情况下,您将传递nullInvoke.

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

例如,如果您有:

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

您可以通过以下方式在反射中建模:

string s = "hi";
MethodInfo trimMethod = GetTrimMethodInfo();
object s2 = trimMethod.Invoke(s);
于 2015-01-30T18:11:49.330 回答
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 
于 2015-01-30T18:16:38.420 回答