Вызов нестатического метода в Reflection - PullRequest
2 голосов
/ 12 декабря 2011

Кажется, я не могу понять, как вызвать нестатический метод (метод экземпляра). Что я делаю неправильно? Действительно новый / невежественный с отражением (если вы не заметили):

Пример:

class Program
{
    static void Main()
    {
        Type t = Type.GetType("Reflection.Order" + "1");
        var instance = Activator.CreateInstance(t);
        object[] paramsArray = new object[] { "Hello" };
        MethodInfo method = t.GetMethod("Handle", BindingFlags.InvokeMethod | BindingFlags.Public);

        method.Invoke(instance, paramsArray);

        Console.Read();
    }
}



public class Order1
{
    public void Handle()
    {
        Console.WriteLine("Order 1 ");
    }
}

Ответы [ 4 ]

7 голосов
/ 12 декабря 2011

У вас есть две проблемы:

  1. Ваши BindingFlags неверны. Должно быть:

    MethodInfo method = t.GetMethod("Handle", BindingFlags.Instance | BindingFlags.Public);
    

    Или вы можете удалить флаги привязки все вместе и использовать поведение привязки по умолчанию, которое будет работать в этом случае.

  2. Ваш объявленный Handle метод принимает нулевые параметры, но вы вызываете его с одним параметром ("Hello"). Либо добавьте строковый параметр в Handle:

    public void Handle(string something)
    {
        Console.WriteLine("Order 1 ");
    }
    

    Или не передавайте никаких параметров.

4 голосов
/ 12 декабря 2011

Вы должны использовать

BindingFlags.Instance | BindingFlags.Public

при вызове на GetMethod().

BindingFlags.InvokeMethod (и другие флаги вызова) не используется GetMethod().Вы можете увидеть, для чего оно предназначено в документации для Type.InvokeMember().

3 голосов
/ 12 декабря 2011

Вам необходимо включить BindingFlags.Instance.

1 голос
/ 12 декабря 2011

В дополнение к уже упомянутым флагам привязки вы, похоже, пытаетесь передать аргумент методу, который не принимает никаких аргументов.

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