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

情景:

一下两个函数分别多次重复调用了两个同参不同名的函数(实际上总共有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. redis集群PHP解决方案

    Redis3.2.4 Cluster集群搭建 服务器环境:192.168.3.229192.168.3.193每台服务器搭建3个节点,组成3个主节点,3个从节点的redis集群. 注意:防火墙一定要开 ...

  2. Java反射常用API汇总

    “JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性” 一.类对象的获取 1.通过对象获取 Object obj = ne ...

  3. war导出问题myeclpise

    内附破解文件以及myeclipse10.7.1导出war问题解决办法一.原作者的PJ程序在myeclipse10.7.1环境下测试通过(win7 x64) 按照步骤操作就可以完成PJ过程.PJ前先将c ...

  4. ReportView控件的使用

    ReportView控件的使用Posted on 2012-01-06 17:02 随遇 阅读(3006) 评论(0)  编辑 收藏 最近使用了ReportView控件绑定数据,总结下: 1.在设计器 ...

  5. @Html.Raw()用法

    @Html.Raw() 方法输出带有html标签的字符串, 如:@Html.Raw("<div style='color:red'>输出字符串</div>" ...

  6. Js 利用正则表达式和replace函数获取string中所有被匹配到的文本

    js的replace函数除了替换文本以外还有获取所有被正则表达式匹配到的文本的功能.这里以一个简单的案例来作为演示. 利用正则查找出所有被两个花括号包裹的字符串: var str = '<div ...

  7. BZOJ 4589 Hard Nim(FWT加速DP)

    题目链接  Hard Nim 设$f[i][j]$表示前$i$个数结束后异或和为$j$的方案数 那么$f[i][j] = f[i-1][j$ $\hat{}$ $k]$,满足$k$为不大于$m$的质数 ...

  8. kibana- Pie

    1. Visualize 新建图形 2. 选择图形类型 3. 选择索引 4. 设置Pie参数 5. 保存图形

  9. 64位系统下powerdesigner15连接oracle odbc

    操作系统:win2008 64 Oracle版本:64位11g PowerDesigner版本:15.1 问题描述:因为PowerDesigner是32的程序,连接数据库会默认开启32位的ODBC,因 ...

  10. Kubernentes中的身份验证

    Kubernentes中的身份验证 kubernetes 系统的各组件需要使用 TLS 证书对通信进行加密,本文档使用 CloudFlare 的 PKI 工具集 cfssl 来生成 Certifica ...