Как добавить имя метода из файла конфигурации в делегат? - PullRequest
2 голосов
/ 20 июля 2010

Мне нужно вызвать метод, имя которого исходит из файла конфигурации.Я могу добиться этого с помощью метода Reflection.MethodInfo.Invoke ().Но по моему сценарию все эти методы должны иметь одинаковую подпись.Могу ли я реализовать это с помощью делегатов?но как я могу добавить имя метода, хранящееся в файле конфигурации, к делегату?

Ответы [ 2 ]

1 голос
/ 20 июля 2010

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

public class MyClass
{
    public void DoSomething(string argument1, int argument2)
    {
        Console.WriteLine(argument1);
        Console.WriteLine(argument2);
    }
}

Я мог бы сделать что-то вроде:

Action<object, MethodInfo, string, int> action =
    (obj, m, arg1, arg2) => m.Invoke(obj, new object[] { arg1, arg2 });

И назовите это как:

var method = typeof(MyClass).GetMethod("DoSomething");
var instance = new MyClass();

action(instance, method, "Hello", 24);

Если вы знаете, что у вашего метода есть тип возвращаемого значения, вы можете сделать это с помощью System.Func делегата:

public class MyClass
{        
    public string DoSomething(string argument1, int argument2)
    {
      return string.Format("{0} {1}", argument1, argument2);
    }
}

Func<object, MethodInfo, string, int, string> func =
  (obj, m, arg1, arg2) => (string)m.Invoke(obj, new object[] { arg1, arg2 });

string result = func(instance, method, "Hello", 24);
1 голос
/ 20 июля 2010

Посмотрите на Delegate.CreateDelegate в MSDN. Некоторые из лучших документов там!

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