Вызов методов по текстовой переменной (динамически) - C#
Формулировка задачи:
У меня написаны 100+ методов, например:
- петь()
- танцевать()
- лежать()
методы регулярно пополняются(их число увеличивается)
Могу я их вызвать динамически например текстовым параметром или каким угодно параметром?
Возможно ли что-нибудь такое?
Как я хочу:
delegate bool MyDelegate(); MyDelegate[] foo; //массив выборки моих методов foo = new MyDelegate[place.Keys.Count]; //узнаем сколько нужно методов. например 3 foreach (IniFile.IniSection.IniKey key in place.Keys) //цикл добавления методов в массив { int index = key.id - 1; string Method = key.name //переменная, которую я хочу использовать как параметр // для вызова любого из своих методов = "петь" или "танцевать" или "ir_version" foo[index] = ВызовМетода(Method); //или foo[index] = НайтиМетод(Method); }
Как сделано:
delegate bool MyDelegate(); MyDelegate[] foo; //массив выборки моих методов foo = new MyDelegate[place.Keys.Count]; //узнаем сколько нужно методов foreach (IniFile.IniSection.IniKey key in place.Keys) //цикл добавления методов в массив делегатов { int index = key.id - 1; switch (key.Value) //100+ кейсов... case "ir.version": foo[index] = test.ir_version; break; case "петь": foo[index] = test.петь; break; }
Решение задачи: «Вызов методов по текстовой переменной (динамически)»
textual
Листинг программы
class Program { static void Main(string[] args) { string methodName = "Method1"; MyClass MyObject = new MyClass(); Type myClassType = MyObject.GetType(); MethodInfo MyMethod = myClassType.GetMethod(methodName, BindingFlags.Public|BindingFlags.Instance); MyMethod.Invoke(MyObject, new object[]{"New","message"}); Console.ReadKey(); } } class MyClass { public void Method1(string message1, string message2) { Console.WriteLine("Method1"); Console.WriteLine(message1 + " " + message2); } public void Method2(string message) { Console.WriteLine("Method2"); Console.WriteLine(message); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д