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 ...
随机推荐
- java中数组有没有length()方法?string没有lenght()方法?
java中数组有没有length()方法,求数组的长度可以使用数组的length属性. int[] arr={1,2,3,4,5}; int length=arr.length;//求数组的长度 -- ...
- bottle框架学习(2):变量定义等
try: from simplejson import dumps as json_dumps, loads as json_lds except ImportError: # pragma: no ...
- Android 中带有进度条效果的按钮(Button)
安卓中带有进度条效果的按钮,如下图: 1.布局文件如下activity_main.xml <RelativeLayout xmlns:android="http://schemas.a ...
- 正则表达式之Regex.Match()用法
//匹配字符串中的连续数字 string txt = "AAA12345678AAAA"; string m = Regex.Match(txt, @"\d+" ...
- mysql常用命令行操作
1.linux下彻底卸载mysql sudo rm /var/lib/mysql/ -Rsudo rm /etc/mysql/ -R sudo apt-get autoremove mysql* -- ...
- HDU 6300.Triangle Partition-三角形-水题 (2018 Multi-University Training Contest 1 1003)
6300.Triangle Partition 这个题就是输出组成三角形的点的下标. 因为任意三点不共线,所以任意三点就可以组成三角形,直接排个序然后输出就可以了. 讲道理,没看懂官方题解说的啥... ...
- HDU 1754.I Hate It-完全版线段树(单点替换、区间最值)
HDU1754.I Hate It 直接模板就可以了 代码: //B #include<iostream> #include<cstdio> #include<cstri ...
- Codeforces Round #109 (Div. 2) A. I_love_%username%【打擂台算法/满足当前数字在已经出现的数字的最大值和最小值之间的个数】
A. I_love_%username% time limit per test 2 seconds memory limit per test 256 megabytes input standar ...
- Apache CXF实战之四 构建RESTful Web Service
Apache CXF实战之一 Hello World Web Service Apache CXF实战之二 集成Sping与Web容器 Apache CXF实战之三 传输Java对象 这篇文章介绍一下 ...
- [POI2014]Salad Bar
题目大意: 一个长度为$n(n\leq10^6)$的字符串,每一位只会是$p$或$j$.你需要取出一个子串$S$(从左到右或从右到左一个一个取出),使得不管是从左往右还是从右往左取,都保证每时每刻已取 ...