MethodBase.Invoke Method - PullRequest
       2

MethodBase.Invoke Method

1 голос
/ 10 октября 2019

Привет. Все, что я пытаюсь понять, как работает отражение, поэтому мой вопрос в том, что когда я хочу вызвать какой-либо метод в сборке, почему я отправляю параметры метода в виде массива объектов, а не в виде строки?

ДляНапример, я хочу вызвать этот метод, он получает строковый параметр, но я посылаю аргументы в виде массива объектов. насколько я знаю, объект не может быть преобразован в строку, так как он преобразует его?

public string Display(string Name)
    {
        return Name;
    }

заранее спасибо

1 Ответ

0 голосов
/ 10 октября 2019

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...