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

情景:

一下两个函数分别多次重复调用了两个同参不同名的函数(实际上总共有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. ECMAScript和JavaScript的关系

    JavaScript 是一种基于 ECMAScript 规范的脚本语言,并在此基础上进行了自己的封装.ECMAScript 不是一种编程语言,仅仅是一种脚本语言规范,由欧洲计算机协会制定和发布,任何基 ...

  2. 【原创】Talend ETL Job日志框架——基于P&G项目的一些思考和优化

    一.背景 接触talend也挺长一段时间了,在P&G项目中每天都是使用它开发job,做ETL,也看了前辈开发的很多ETL Job,学到不少.也接触了TAC(talend administrat ...

  3. jquery mloading

    在执行jQuery的ajax时,有的时候请求回来会有较长时间,这个时候,如果什么都没有显示,用户会觉得网站卡住了,所以这个时候,来个mloading会使用户体验更好些. 使用方法很简单 将jquery ...

  4. Ubuntu 14.04LTS+Git

    Git是我们常用的代码托管工具,作为程序员,Git是必备的. 安装Git的方法很简单,官网就有写:http://git-scm.com/download/linux 根据官网的说明,用: sudo a ...

  5. Codeforces Round 480 Div 2 光荣掉分记

    痛 痛苦 痛苦啊. 越接近黄名想的越多了啊…… 都说了不要在意rating这破玩意了…… 没出E就算了,策略问题. 居然还FST了: FST个D就算了: FST个A算个**啊. 紧张的时候总会写出一些 ...

  6. 记录git rebase用法

    git 是基于文件系统的版本管理工具,文档和详细介绍可以查看git 一.git commit --amend 如果你对文件做了修改需要和上一次的修改合并为一个change git add . git ...

  7. Tomcat配置和Spring MVC配置

    Tomcat启动时,先找系统变量CATALINA_BASE,如果没有,则找CATALINA_HOME.然后找这个变量所指的目录下的conf文件夹,从中读取配置文件.最重要的配置文件:server.xm ...

  8. [POJ 2329] Nearest number-2

    Link: POJ 2329 传送门 Solution: 比较明显的$dp$,但爆搜好像也能过 用多个方向$dp$来解决此题,最后汇总答案即可 一开始我写了4个,但后来发现只要相反的2个方向即可,同时 ...

  9. iOS UI、Xcode、调试、代码等常见问题总汇(持续更新中)

    以前比较懒,遇到问题解决了就完事了,有些问题再次遇到时忘记了当初是怎么解决的,又要查各种资料来解决.好记忆不如烂笔头,不管简单还是复杂都记一下吧,所以决定写一篇常见问题总结,方便以后查阅.现在有点忙, ...

  10. 一种用XAML写Data Converter的方式

    在WPF程序中,数据绑定是非常常用的手段.伴随着数据绑定,我们通常还需要编写一些Converter.而编写Converter是一件非常枯燥的事情,并且大量的converter不容易组织和维护. 今天在 ...