在写代码的时候我们经常会遇到以下的这种程序:
代码
namespace TestFunction
{
class Program
{
public string CallFunction(string functionName)
{
switch (functionName)
{
case "abc":
{
return aaa();
}
case "accountExist":
{
return bbb();
}
default:
return "";
}
}
private string aaa()
{
return "aaa";
}
private string bbb()
{
return "bbb";
}
}
}
{
class Program
{
public string CallFunction(string functionName)
{
switch (functionName)
{
case "abc":
{
return aaa();
}
case "accountExist":
{
return bbb();
}
default:
return "";
}
}
private string aaa()
{
return "aaa";
}
private string bbb()
{
return "bbb";
}
}
}
感谢上帝上面的列子里只有两个函数,但上天总是不会这么好的,我曾经遇到个上10个这样的调用;
正当我在努力的swtich、case 里,我就感觉很有问题。
于是开始研究一下能不能直接通过functionName直接就去调用那些函数呢?
上网查了一下果然是有的,所以把上面CallFunction的这个函数改良了一下:
代码
namespace TestFunction
{
class Program
{
public string CallFunction(string functionName)
{
Assembly assebly = Assembly.GetExecutingAssembly();
Type type = assebly.GetType("TestFunction.Program"); //通过命名空间和类名得到指定的类
MethodInfo methodInfo = type.GetMethod(functionName);
object ob = Activator.CreateInstance(type);
object s = methodInfo.Invoke(ob, null);//null表示没有参数,如果有参数需要传入一个object数组
return s.ToString();
}
private string aaa()
{
return "aaa";
}
private string bbb()
{
return "bbb";
}
}
}
{
class Program
{
public string CallFunction(string functionName)
{
Assembly assebly = Assembly.GetExecutingAssembly();
Type type = assebly.GetType("TestFunction.Program"); //通过命名空间和类名得到指定的类
MethodInfo methodInfo = type.GetMethod(functionName);
object ob = Activator.CreateInstance(type);
object s = methodInfo.Invoke(ob, null);//null表示没有参数,如果有参数需要传入一个object数组
return s.ToString();
}
private string aaa()
{
return "aaa";
}
private string bbb()
{
return "bbb";
}
}
}
更新于:2014/03/03,刚刚看到同事的一段代码,觉得有意思,存下来:
enum KKK { Plus = 0, Minus = 1, Surplus = 2, Except = 3, }; void PlusFun(int a,int b) { printf("%d\n",a + b); } void MinusFun(int a,int b) { printf("%d\n",a - b); } void SurplusFun(int a,int b) { printf("%d\n",a * b); } void ExceptFun(int a,int b) { printf("%d\n",a / b); } int _tmain(int argc, _TCHAR* argv[]) { int sw = 1; int a = 2; int b = 2; switch(sw) { #define CALLFUNCTION(e,p) case (e):(p)(a,b); break CALLFUNCTION(Plus,PlusFun); CALLFUNCTION(Minus,MinusFun); CALLFUNCTION(Surplus,SurplusFun); CALLFUNCTION(Except,ExceptFun); } return 0; }
这样的话再多的函数都不怕了!