Для чего нужен параметр Object в MethodInfo.Invoke()?

Какова цель Object obj параметр MethodInfo.Invoke()?

Документация MSDN гласит:

Объект, для которого вызывается метод или конструктор

Я не понимаю, как вы вызываете метод "на" объекте. Я думал, что вы только что вызвали метод из Main() или класс и все тут.

И могу ли я использовать любой объект любого типа для этого параметра?

2 ответа

Решение

Если метод static вы просто вызываете метод, и в этих случаях вы передаете null на этот аргумент Invoke,

Например, методы экземпляра вы вызываете метод для экземпляра объекта, а не только для "ничего". Экземпляр объекта, на который вы обычно вызываете метод, - это то, что вы передаете Invoke,

Например, если у вас было:

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

Вы можете смоделировать это в отражении, выполнив:

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

Это экземпляр объекта, который должен использоваться для вызова метода, например:

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 
Другие вопросы по тегам