Для чего нужен параметр 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