вызов функции, которая хранится в строковой переменной - PullRequest
1 голос
/ 20 октября 2010

это может быть копия

Как динамически вызывать метод класса в .NET?

и

как добиться динамического вызова функции, то есть право вызывать функцию определяется из значений базы данных, используя c #

но у двух вышеупомянутых есть решения, которые, как сказали ответы, сложны, я думаю, не для новичка.

и

оба решения содержат "тип", который из кода, который я считаю, предназначен для определения класса, к которому принадлежит метод.

как

static void caller(String myclass, String mymethod)
    {
        // Get a type from the string 
        Type type = Type.GetType(myclass);
        // Create an instance of that type
        Object obj = Activator.CreateInstance(type);
        // Retrieve the method you are looking for
        MethodInfo methodInfo = type.GetMethod(mymethod);
        // Invoke the method on the instance we created above
        methodInfo.Invoke(obj, null);
    }

но мой первоначальный веб-сайт содержит только один класс, общий для всех функций,

база данных, которая имеет «имя функции» «func id»

предполагается: - имя функции точно такое же, как и в коде

я только хочу добиться следующего

  • получить строковое значение имени функции в соответствии с идентификатором, указанным в текстовом поле

  • теперь вызываем ту функцию, имя которой находится в строковой переменной

проблема

methodinfo, требуется "type.GetMethod (mymethod);"

..

Ответы [ 2 ]

3 голосов
/ 20 октября 2010

Для вызова функции необходимо указать тип, для которого объявлена ​​эта функция.Если все функции, которые вы собираетесь вызвать, объявлены в общем классе, вы можете сделать следующее:

static void CallFunc(string mymethod)
{
    // Get a type from the string 
    Type type = typeof(TypeThatContainsCommonFunctions);

    // Create an instance of that type
    object obj = Activator.CreateInstance(type);

    // Retrieve the method you are looking for
    MethodInfo methodInfo = type.GetMethod(mymethod);

    // Invoke the method on the instance we created above
    methodInfo.Invoke(obj, null);
}

Если функции, которые вы собираетесь вызывать, являются статическими, вам не нужен экземпляр типа:

static void CallFunc(string mymethod)
{
    // Get a type from the string 
    Type type = typeof(TypeThatContainsCommonFunctions);

    // Retrieve the method you are looking for
    MethodInfo methodInfo = type.GetMethod(mymethod);

    // Invoke the method on the type
    methodInfo.Invoke(null, null);
}
1 голос
/ 20 октября 2010

Я вижу 2 решения:

  1. вам нужно сопоставить идентификатор функции с реальное имя функции
  2. вызов type.GetMethods (), чтобы получить список всех методы и выбрать правильный
...