Как можно вызвать метод динамически в C#
У меня есть класс, и в этом классе у меня много методов, и я хочу вызвать весь метод без имени записи
Это мой код, и он работает:
System.Reflection.MethodInfo[] methods = typeof(content).GetMethods(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static);
foreach (System.Reflection.MethodInfo m in methods)
{
Response.Write(typeof(content).GetMethod(m.Name).Invoke(null,null).ToString());
}
Но у меня есть одна проблема, что код возвращает только первое имя метода
Что я должен сделать, чтобы получить их все? в чем дело?
2 ответа
Вам нужно вызывать каждый метод для экземпляра. В приведенном ниже примере .Invoke()
называется против экземпляра Content
, Тем не менее, вы также делаете излишним GetMethod()
вызов. Вы можете использовать MethodInfo
непосредственно.
void Main()
{
var content = new Content();
System.Reflection.MethodInfo[] methods = typeof(Content).GetMethods(
System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static);
foreach (System.Reflection.MethodInfo m in methods)
{
Response.Write(m.Invoke(content, null).ToString());
}
}
public class Content
{
public static void Test1() {}
public static void Test2() {}
}
Все ли методы, которые вы хотите выполнить public
а также static
? Хорошо. Теперь проверьте, передаете ли вы правильные параметры каждому методу, который хотите вызвать.
Invoke(null, null)
работает только для методов, не принимающих параметры. Если вы попытаетесь вызвать методы, которые требуют параметров, используя .Invoke(null, null)
, будет сгенерировано исключение.
Например, если у вас есть два метода
public static void Example1() { ... }
public static void Example2(string example) { ... }
Этот код будет работать Example1()
, распечатать его, а затем сбой, когда он пытается передать 0 параметров Example2()
Вызывать Example2()
вам нужно .Invoke(null, new object[1])