调用函数,该函数存储在字符串变量中

时间:2010-10-20 07:36:51

标签: c# function web dynamic

它可能是

的副本

How to dynamically call a class' method in .NET?

how to achieve calling a function dynamically, thats right the function to be called is decided from database values, using 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”

的数据库

假设: - 函数名称与代码

中的名称完全相同

我只想实现以下目标

  • 根据文本框中提到的id获取函数名的字符串值

  • 现在调用该函数,其名称在字符串变量

问题

methodinfo,需要“type.GetMethod(mymethod);”

...

2 个答案:

答案 0 :(得分:3)

为了调用函数,您需要指定声明此函数的类型。如果您要调用的所有函数都在公共类中声明,则可以执行以下操作:

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 :(得分:1)

我看到了两个解决方案:

  1. 您需要将功能ID映射到 真实的功能名称
  2. 呼叫     type.GetMethods()获取所有列表     方法并选择正确的