c#利用委托传递函数参数(1)
本次旨在解决 同参不同名 的函数作为参数传递的情况
情景:
一下两个函数分别多次重复调用了两个同参不同名的函数(实际上总共有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)的更多相关文章
- C#利用委托跨线程更新UI数据
转:http://www.2cto.com/kf/201206/136587.html 在使用C#的过程中,难免会用到多线程,而用多线程之后,线程如何与界面交互则是一个非常头疼的问题.其实不仅仅是界面 ...
- Unity中利用委托与监听解耦合的思路
这篇随笔是一篇记录性的随笔,记录了从http://www.sikiedu.com/my/course/304,这门课程中学到的内容,附带了一些自己的思考. 一.单例模式的应用 首先假想一种情况,现在需 ...
- 利用委托实现自己的数据缓存仓库(附上Demo)
Demo源码 写在前面的话 写完这篇博客后,总觉得少了些什么,后来想了下,感觉自己只是把结果给亮了出来,自己为什么想到这么做,这个类库出生的缘由未详述,因此,在本段作下说明,如有不足之处,希望能和大家 ...
- C#中,用户控件UserControl里面用Panl加载UserControl,并实现利用委托互相传值
用户控件主窗体结构:左侧树形菜单,右侧Panl: 根据点击的菜单节点,panl里面选择性加载某一个子窗体用户控件,并传值给子窗体: 反之,在子窗体进行相应的操作之后,传值给主窗体,触发主窗体的刷新. ...
- Java基础-继承 利用接口做参数,写个计算器,能完成+-*/运算
38.利用接口做参数,写个计算器,能完成+-*/运算 (1)定义一个接口Compute含有一个方法int computer(int n,int m); (2)设计四个类分别实现此接口,完成+-*/运算 ...
- 利用Apply的参数数组化来提高代码的优雅性,及高效性
利用Apply的参数数组化来提高代码的优雅性,及高效性 Function.apply()在提升程序性能方面的技巧 我们先从Math.max()函数说起,Math.max后面可以接任意个参数,最后返回所 ...
- winform利用委托delegate进行窗体间通信
前段时间学习委托,感觉很模糊的样子,也做过许多实例,但是项目中一直没有用到,今天在项目中遇到一个很简单的例子,现在拿出来,做一个简单的记录. 要求:将弹出框里勾选的内容返回到主面板上. 工具:委托. ...
- winform利用委托delegate进行窗体间通信,相同标题已经存在??
前段时间学习委托,感觉很模糊的样子,也做过许多实例,但是项目中一直没有用到,今天在项目中遇到一个很简单的例子,现在拿出来,做一个简单的记录. 要求:将弹出框里勾选的内容返回到主面板上. 工具:委托. ...
- C# Winform 窗体传值 利用委托 子窗体传值给父窗体
常用的Winform窗体传值有两种方式. 1.更改Form.designer.cs文件,将控件的设为Public,供子窗体访问. 在designer.cs文件的最后,找到你的控件声明. private ...
随机推荐
- Python学习杂记_11_函数(二)
函数的高级运用这部分知识的核心内容就是你要把“函数即变量”这个概念理解并运用得出神入化... 一.函数的递归调用 所谓递归调用就是函数自己调用自己,在Python中如果不做限制递归调用的死循环最多可循 ...
- js比对一维数组全等的算法
//辅助方法1,返回某个值在数组中的位置 Array.prototype.indexOf = function (e) { for (var i = 0, l = this.length; i < ...
- 在ros下使用tf
tf真是一个好东西,把坐标变换都简化了 首先tf需要有一个broadcaster #include <ros/ros.h> #include <tf/transform_broadc ...
- Redis设置记录
首先大前提是,这个redis使用的外网端口,需要在防火墙或者安全组中打开 正常在redis配置文件里有个bind,这个默认是127.0.0.1,如果不修改,就是内网可以访问. 这里有个点需要提一下,就 ...
- Spfa【p3385】【模板】负环(spfa)
顾z 你没有发现两个字里的blog都不一样嘛 qwq 题目描述 毒瘤数据要求判负环 分析: 还是融合了不少题解的思想的. 负环定义: 权值和为负的环 //在网络上并没有找到一个官方定义,暂且这么理解. ...
- bzoj 3864: Hero meet devil
bzoj3864次元联通们 第一次写dp of dp (:з」∠) 不能再颓废啦 考虑最长匹配序列匹配书转移 由于dp[i][j]的转移可由上一行dp[i-1][j-1],dp[i-1][j],dp[ ...
- 【bzoj4403】【序列统计】不降转升+组合数添项合并
(上不了p站我要死了,侵权度娘背锅) Description 给定三个正整数N.L和R,统计长度在1到N之间,元素大小都在L到R之间的单调不降序列的数量.输出答案对10^6+3取模的结果. Input ...
- [POI2014]Tourism
题目大意: 给定一个$n(n\le20000)$条个点,$m(m\le25000)$条边的无向图,保证图中最长路径上的点数不超过$10$.对一个点染色的代价是$w_i$.求使得每个结点都被染色或至少有 ...
- 如何隐藏 Safari 中 input 标签的 autofill 图标
Safari 浏览器会为 <input type="passport"> 标签自动添加一个小锁的图标(如下图),本意上是让用户可以从这里选择相应的 用户名/密码 进行自 ...
- Delphi CRC32Verify控件
unit CRC32Verify; interface uses Windows, Messages, SysUtils, Classes, Forms; CONST table: ARRA ...