在写代码的时候我们经常会遇到以下的这种程序:

代码

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";
        }
    }
}

感谢上帝上面的列子里只有两个函数,但上天总是不会这么好的,我曾经遇到个上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";
        }
    }
}

更新于: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); breakCALLFUNCTION(Plus,PlusFun);CALLFUNCTION(Minus,MinusFun);CALLFUNCTION(Surplus,SurplusFun);CALLFUNCTION(Except,ExceptFun);}return 0;
}

这样的话再多的函数都不怕了!

转载于:https://www.cnblogs.com/Martin_Q/archive/2010/12/02/1894152.html

根据函数名称调用函数相关推荐

  1. 第16周项目3--用函数指针调用函数(吃饭,睡觉,打豆豆)

    /* * Copyright (c) 2014, 烟台大学计算机学院 * All rights reserved. * 文件名称:test.cpp * 作 者:刘畅 * 完成日期:2014 年 12 ...

  2. c语言中接口和函数的区别,接口与类的关系_接口函数和调用函数有什么区别

    描述 接口与类的关系 类与接口是两个概念,不能混淆. 接口概念 程序接口是操作系统为用户提供的两类接口之一,编程人员在程序中通过程序接口来请求操作系统提供服务.面向过程语言最基本的单元是过程和函数. ...

  3. JavaScript中的引用函数、调用函数和回调函数

    引用函数与调用函数的区别 引用函数与调用函数的差别与函数名称后是否附有括号()有关.函数引用只会单独出现,但函数调用则必定后随括号,很多时候还附有自变量. 举个例子 // 函数引用 代码一 funct ...

  4. c语言中主函数创建链表,主函数怎么调用函数(数据结构,创建链表)

    主函数怎么调用函数(数据结构,创建链表)0 rnxm44602018.09.29浏览179次分享举报 #include#include"stdlib.h"typedefintEle ...

  5. C/C++ 函数指针调用函数

    01 //C/C++ 函数指针调用函数 02 #include<iostream> 03 using namespace std; 04   05 void site1() 06 { 07 ...

  6. c语言习题 定义函数 areaT,功能是求梯形面积。要求在主函数中输入上底(用变量 a存储)、下底(用变量 b 存储)、和高(用变量 h 存储),在主函数中调用函数 areaT,输出梯形面积(用变量

    定义函数 areaT,功能是求梯形面积.要求在主函数中输入上底(用变量 a存储).下底(用变量 b 存储).和高(用变量 h 存储),在主函数中调用函数 areaT,输出梯形面积(用变量 s 存储)的 ...

  7. 自定义一个函数,调用函数,在鼠标右键按下时,出现不同大小的红色五角星

    import turtle as t #导入turtle import random #随机数 t.speed(0) #速度为0 def star(x,y):#五角星(函数)t.penup()t.go ...

  8. 如何用函数指针调用函数

    先举一个用函数指针调用函数的例子 int Func(int x); /*声明一个函数*/ int (*p) (int x); /*定义一个函数指针*/ p = Func; /*将Func函数的首地址赋 ...

  9. 通过函数名调用函数和通过函数指针调用函数有什么区别呢?为什么调用函数指针没有直接调用函数效率高?

     1.通过函数名调用函数和通过函数指针调用函数有什么区别呢? 首先函数名.函数指针都表示代码段的起始地址. 1)调用函数的时候必须指定函数名,可是当有时候不确定具体调用哪个函数,当某些事件发生后才 ...

最新文章

  1. QQ音乐的动效歌词是如何实践的?
  2. Git 经常使用命令总结
  3. Problem 60 关于解决X11的错误的问题?
  4. Flutter 案例学习之:GridView
  5. jmeter 取json值_Jmeter入门13 后置处理器JSON Extractor提取json的多个值
  6. Python中的线性回归:Sklearn与Excel
  7. java椭圆_如何用java画椭圆
  8. 【linux】Centos 初始安装后开启网络以及配置静态IP
  9. java 析构方法_java析构方法详解
  10. spring security3.x学习(15)_扩展JdbcDaoImpl。
  11. 打开模式时防止BODY滚动
  12. 链接数据库超级简单的工具类C3P0谁用谁知道
  13. 产学研专题数据(区域、企业、地级市创新指标及研发、RD投入)
  14. 6.计蒜客ACM题库.A2011 Magic Mirror
  15. STM32F103使用硬件i2c作为从机模式
  16. 从微软官网下载win10镜像.iso文件
  17. PC网站微信第三方登陆
  18. iClap:产品经理再忙也要看《琅琊榜》
  19. 钢筋直螺纹套筒A钢筋直螺纹套筒A钢筋直螺纹连接丝扣加工要求
  20. 2021壁纸网站大集合优质壁纸,4k,8k,应有尽有!

热门文章

  1. 微软服务器系统桌面无图标,开机桌面没有图标的几种解决方法
  2. leetcode46.全排列
  3. CentOS下Redis 2.2.14安装配置详解
  4. 求最长上升子序列(Lis模板)
  5. 服务器证书安装配置指南(IIS7)
  6. 分布式 基本理论 BASE
  7. eclipse - 自动换行
  8. Linux——用户管理简单学习笔记(三)
  9. __mmc_claim_host
  10. MySQL 启动故障 处理 小记