Вызов методов по текстовой переменной (динамически) - 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);
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.8 из 5
Похожие ответы