本次旨在解决 同参不同名 的函数作为参数传递的情况

情景:

一下两个函数分别多次重复调用了两个同参不同名的函数(实际上总共有3个这样的函数),函数结构基本相同,只有调用的函数名不一样,显然可以整合在一个函数中,减少代码量;

 private void button1_Click(object sender, EventArgs e)
{
clsLineSeg.UpdateDiseasePostion(map, tblRouteData, "Z001522600");
clsLineSeg.UpdateDiseasePostion(map, tblRouteData, "C800522635");
clsLineSeg.UpdateDiseasePostion(map, tblRouteData, "X890522635");
clsLineSeg.UpdateDiseasePostion(map, tblRouteData, "Y003522635");
clsLineSeg.UpdateDiseasePostion(map, tblRouteData, "X899522635");
clsLineSeg.UpdateDiseasePostion(map, tblRouteData, "C018522635");
clsLineSeg.UpdateDiseasePostion(map, tblRouteData, "S311520000");
MessageBox.Show("ok");
} private void btnUpdateAssetGps_Click(object sender, EventArgs e)
{
clsLineSeg.UpdateAssetDataGpsPostion(map, tblRouteData, "Z001522600");
clsLineSeg.UpdateAssetDataGpsPostion(map, tblRouteData, "C800522635");
clsLineSeg.UpdateAssetDataGpsPostion(map, tblRouteData, "X890522635");
clsLineSeg.UpdateAssetDataGpsPostion(map, tblRouteData, "Y003522635");
clsLineSeg.UpdateAssetDataGpsPostion(map, tblRouteData, "X899522635");
clsLineSeg.UpdateAssetDataGpsPostion(map, tblRouteData, "C018522635");
clsLineSeg.UpdateAssetDataGpsPostion(map, tblRouteData, "S311520000");
MessageBox.Show("ok");
}

方案:

但是要想完全统一,肯定需要将要调用的函数作为新函数的参数传递进去,这里就可以用到c#的委托,如下:

    public delegate void UpdateMethodHandler(IMap map, ITable tblRouteData,string routeCode);//声明委托
 //修改简化待调用函数
public void UpdateAssetDataGps84Postion(IMap map, ITable tblRouteData, string routeCode)
{
clsLineSeg.UpdateAssetDataGps84Postion(map, tblRouteData, routeCode);
} public void UpdateDiseasePostion(IMap map, ITable tblRouteData, string routeCode)
{
clsLineSeg.UpdateDiseasePostion(map, tblRouteData, routeCode);
}
 //利用委托传递函数名参数
public void btnUpdateClick(UpdateMethodHandler UpdateMethodHandler)
{
var routeLst = GetRouteLst();
if(routeLst==null||routeLst.Length<=)
{
MessageBox.Show("请输入路线编码!");
return;
}
foreach(var r in routeLst)
{
UpdateMethodHandler(map, tblRouteData, r);
}
MessageBox.Show("ok");
}
 //函数调用简化
private void btnUpdateStakeTable_Click(object sender, EventArgs e)
{
btnUpdateClick(UpdateAssetDataGps84Postion);
//clsLineSeg.UpdateAssetDataGps84Postion(map, tblRouteData, "Z001522600");
//clsLineSeg.UpdateAssetDataGps84Postion(map, tblRouteData, "C800522635");
//clsLineSeg.UpdateAssetDataGps84Postion(map, tblRouteData, "X890522635");
//clsLineSeg.UpdateAssetDataGps84Postion(map, tblRouteData, "Y003522635");
//clsLineSeg.UpdateAssetDataGps84Postion(map, tblRouteData, "X899522635");
//clsLineSeg.UpdateAssetDataGps84Postion(map, tblRouteData, "C018522635");
//clsLineSeg.UpdateAssetDataGps84Postion(map, tblRouteData, "S311520000");
//MessageBox.Show("ok");
}

c#利用委托传递函数参数(1)的更多相关文章

  1. C#利用委托跨线程更新UI数据

    转:http://www.2cto.com/kf/201206/136587.html 在使用C#的过程中,难免会用到多线程,而用多线程之后,线程如何与界面交互则是一个非常头疼的问题.其实不仅仅是界面 ...

  2. Unity中利用委托与监听解耦合的思路

    这篇随笔是一篇记录性的随笔,记录了从http://www.sikiedu.com/my/course/304,这门课程中学到的内容,附带了一些自己的思考. 一.单例模式的应用 首先假想一种情况,现在需 ...

  3. 利用委托实现自己的数据缓存仓库(附上Demo)

    Demo源码 写在前面的话 写完这篇博客后,总觉得少了些什么,后来想了下,感觉自己只是把结果给亮了出来,自己为什么想到这么做,这个类库出生的缘由未详述,因此,在本段作下说明,如有不足之处,希望能和大家 ...

  4. C#中,用户控件UserControl里面用Panl加载UserControl,并实现利用委托互相传值

    用户控件主窗体结构:左侧树形菜单,右侧Panl: 根据点击的菜单节点,panl里面选择性加载某一个子窗体用户控件,并传值给子窗体: 反之,在子窗体进行相应的操作之后,传值给主窗体,触发主窗体的刷新. ...

  5. Java基础-继承 利用接口做参数,写个计算器,能完成+-*/运算

    38.利用接口做参数,写个计算器,能完成+-*/运算 (1)定义一个接口Compute含有一个方法int computer(int n,int m); (2)设计四个类分别实现此接口,完成+-*/运算 ...

  6. 利用Apply的参数数组化来提高代码的优雅性,及高效性

    利用Apply的参数数组化来提高代码的优雅性,及高效性 Function.apply()在提升程序性能方面的技巧 我们先从Math.max()函数说起,Math.max后面可以接任意个参数,最后返回所 ...

  7. winform利用委托delegate进行窗体间通信

    前段时间学习委托,感觉很模糊的样子,也做过许多实例,但是项目中一直没有用到,今天在项目中遇到一个很简单的例子,现在拿出来,做一个简单的记录. 要求:将弹出框里勾选的内容返回到主面板上. 工具:委托. ...

  8. winform利用委托delegate进行窗体间通信,相同标题已经存在??

    前段时间学习委托,感觉很模糊的样子,也做过许多实例,但是项目中一直没有用到,今天在项目中遇到一个很简单的例子,现在拿出来,做一个简单的记录. 要求:将弹出框里勾选的内容返回到主面板上. 工具:委托. ...

  9. C# Winform 窗体传值 利用委托 子窗体传值给父窗体

    常用的Winform窗体传值有两种方式. 1.更改Form.designer.cs文件,将控件的设为Public,供子窗体访问. 在designer.cs文件的最后,找到你的控件声明. private ...

随机推荐

  1. git的使用03

    之前我们写的都是将代码存在本地,我们还可以将代码github官网上,放在github的服务器上去托管

  2. 使用 JavaScript 将网站后台的数据变化实时更新到前端-【知乎总结】

    问: 难道只能设置定时器每隔一秒通过 Ajax 向后台请求数据来实现吗? 答: 1. nodejs的 http://socket.io 支持上述 李宏训 所说的三种方式,另外还支持 Flash Soc ...

  3. [译]java9新特性:在接口中用pirvate方法让default(java8接口特性)更简练

    Java8 带来了许多改变,其中之一就是default修饰的接口方法. 这些方法改变了我们已知的接口,现在我们能够在接口中定义默认实现方法.默认实现方法的不同之处在于,在接口中用default修饰抽象 ...

  4. hdu 5104(数学)

    Primes Problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  5. 在16aspx.com上下了一个简单商品房销售系统源码,怎么修改它的默认登录名和密码

    你可以打开那个连接数据库的网页,一般都是conn.aspx,里边有数据库的登录名称和密码

  6. Python的支持工具[1] -> 可执行文件生成工具[1] -> cx_freeze

    cx_freeze cx_Freeze 是一个第三方库,可以用于将 Python 的代码打包成可执行文件,下面介绍如何利用一个脚本文件将 Python 代码变为 exe 可执行文件. 首先,需要安装 ...

  7. view hex value in MR

    cat filename | hexdump  –C tail  -行数 filename | hexdump  –C head -行数 filename | hexdump -C

  8. Linux/Unix面试题

    shell中如何改变文件中的某个关键字 unix命令 unix shell中在特定文件夹内查找包含指定字符串的文件用哪个命令 如何用要shell找到指定目录下的最近一天更新的文件,要包含子目录 Lin ...

  9. 【bzoj3173】【Tjoi2013】【最长上升子序列】treap+dp二分优化

    [pixiv] https://www.pixiv.net/member_illust.php?mode=medium&illust_id=61560361 向大(hei)佬(e)实力学(di ...

  10. MySQL四种类型日志:Error Log、General Query Log、Binary Log、Slow Query Log

    MySQL Server 有四种类型的日志——Error Log.General Query Log.Binary Log 和 Slow Query Log. 第一个是错误日志,记录mysqld的一些 ...