MethodBase.Invoke
позволяет вызывать методы со многими параметрами произвольных типов.
MethodBase.Invoke
позволяет вам вызывать любой метод с любыми параметрами, включая ваши Display(string Name)
, но также MyMethod(int val)
и object[] params
дают вызывающим Invoke
возможность предоставлять параметры любого типа.
Re:
Насколько я знаю, объект не может быть преобразован в строку, так как он преобразует его
Что здесь происходитэто бокс, пожалуйста, отметьте Бокс и распаковка (Руководство по программированию в C #) .
Если вы попытаетесь вызвать ваш метод с параметрами с неверными типами, он не будет работать.
Приведенный ниже фрагмент кода даст следующий вывод:
MagicClass.ItsMagic() returned: 900, type: System.Int32
Object of type 'System.String' cannot be converted to type 'System.Int32'.
public class MagicClass
{
private int magicBaseValue;
public MagicClass() { magicBaseValue = 9; }
public int ItsMagic(int preMagic) { return preMagic * magicBaseValue; }
}
public static void Main(string[] args)
{
var m = new MagicClass();
MethodInfo magicMethod = m.GetType().GetMethod("ItsMagic");
object magicValue = magicMethod.Invoke(m, new object[] { 100 });
Console.WriteLine($"MagicClass.ItsMagic() returned: {magicValue}, type: {magicValue.GetType()}");
try
{
object magicValue2 = magicMethod.Invoke(m, new object[] { "One hundred" });
} catch (ArgumentException ex) { Console.WriteLine(ex.Message); }
}
MagicClass заимствован из MethodBase.Invoke Method s doco.