• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C#教程 > C#基础之委托用法实例教程

C#基础之委托用法实例教程

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了c#开发实例大全基础卷,c#基础与实例教程,c#基础实例,c#窗口界面设计实例,c#web开发实例等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

本文以实例形式简单介绍了C#中委托的用法,是深入学习C#程序设计所必须掌握的重要技巧。现以教程形式分享给大家供大家参考之用。具体如下:

首先,委托是C#中最为常见的内容。与类、枚举、结构、接口一样,委托也是一种类型。类是对象的抽象,而委托则可以看成是函数的抽象。一个委托代表了具有相同参数列表和返回值的所有函数。比如:

delegate int GetCalculatedValueDelegate(int x, int y);

</div>

在上面的定义中,我们定义了一个委托,这个委托代表着一类函数,这些函数的第一个参数是整数型的x,第二个参数是整数型的y,而函数的返回值则是一个整数。在这里,为了描述方便,我们把这一类的函数称为具有相同签名(signature)的函数(注意:这个签名并不是数字签名中的概念,而只是表示这类函数具有相同的参数列表和返回值)。

既然委托是一种类型,那么它就能被用来定义参数、变量以及返回值。由委托定义的变量用于保存具有相同签名的函数实体。需要注意的是,C#和C++不同,C++中的函数指针只能保存全局的或者静态的函数,而C#中的委托实体则可以指代任何函数。

现在我们来看一个例子,在这个例子中,我们使用了上面定义的那个委托,并创建了一个委托实体,使其指代程序中的AddCalculator函数,接下来就可以直接像使用函数本身一样,使用这个委托实体来获得计算的结果。

delegate int GetCalculatedValueDelegate(int x, int y); 
 
static int AddCalculator(int x, int y) 
{ 
 return x + y; 
} 
 
static int SubCalculator(int x, int y) 
{ 
 return x - y; 
} 
 
static void Main(string[] args) 
{ 
 GetCalculatedValueDelegate d = AddCalculator; 
 Console.WriteLine(d(10, 20)); 
}

</div>

到这里也就能基本上明白“委托”的意义了,针对上面的Main函数,本来需要调用AddCalculator函数的,却通过d来调用了,也就是,后续对AddCalculator的操作由d代为效劳。本来是要小明去老师办公室拿粉笔盒的,由于小明和小文是好朋友,因此小明就要小文代他去拿,于是小文成了小明的代理,小明委托小文去拿粉笔盒。

现在我们来考虑委托作为参数的情形。将委托作为参数,可以把函数本身的处理逻辑抽象出来,而让调用者决定最终使用什么样的逻辑去处理。请看下面的例子:

delegate int GetCalculatedValueDelegate(int x, int y); 
 
static int AddCalculator(int x, int y) 
{ 
 return x + y; 
}
 
static int SubCalculator(int x, int y) 
{ 
 return x - y; 
} 
 
static int Calculator(GetCalculatedValueDelegate del, int x, int y) 
{ 
 return del(x, y); 
} 
 
static void Main(string[] args) 
{ 
 Console.WriteLine(Calculator(AddCalculator, 10, 20)); 
}

</div>

在上面的例子中,Calculator函数的第一个参数就是一个委托。事实上,Calculator对x和y将会做什么处理,它本身并不知道,如何处理x和y由GetCalculatedValueDelegate来决定。那么在Main方法里,我们将AddCalculator方法作为参数传递给Calculator,表示让Calculator用AddCalculator的逻辑去处理x和y。这也很形象:Calculator说:“我不知道要怎么处理x和y,让del去处理好了!”于是就把x和y扔给了del。

这种做法其实跟“模板方法模式”有点点类似。在模板方法模式中,可以将可变的部分留给子类去重写,而将不变的部分由父类实现。那么在委托作为参数的情况下,Calculator可以自己处理不变的逻辑,而将“具体怎么做”的事情委托给他人去办理。

委托作为参数,在C#中非常常见。比如线程的创建,需要给一个ThreadStart或者ParameterizedThreadStart委托作为参数,而在线程执行的时候,将这个参数所指代的函数用作线程执行体。再比如:List<T>类型的Find方法的参数也是一个委托,它把“怎么去查找”或者说“怎么样才算找到”这个问题留给了开发人员。开发人员只需要定义一个参数为T,返回值为布尔型的函数,实现函数体,并将函数作为参数传给Find方法,就可以完成集合中元素的查找。

委托作为返回值一般会用在“根据不同情况决定使用不同的委托”这样的情形下。这有点像工厂模式,不过委托用作返回值还是用的没有用作参数这样频繁。

与委托相关的概念还有很多,比如异步调用、泛型委托、匿名方法、Lambda表达式、事件、协变与逆变等。感兴趣的读者可以查看本站相关文章。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C#反射之基础应用实例总结
  • C#基础之委托用法实例教程
  • C#基础之匿名方法实例教程
  • C#基础 延迟加载介绍与实例

相关文章

  • 2017-05-28C#实现顺序表(线性表)完整实例
  • 2017-05-28C#数据结构与算法揭秘一
  • 2017-05-28C#删除文件目录或文件的解决方法
  • 2017-05-28WinForm下 TextBox只允许输入数字的小例子
  • 2017-05-28C#获取程序文件相关信息的方法
  • 2017-05-28C#实现翻转字符串的方法
  • 2017-05-28C#语句先后顺序对程序的结果有影响吗
  • 2017-05-28C# 常见操作符整理
  • 2017-05-28C#中dotnetcharting的用法实例详解
  • 2017-05-28C#多线程处理多个队列数据的方法

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C#怎么实现手机短信发送功能
    • c#获取当前年的周数及当前月的天数示例代码
    • c#连接excel示例分享
    • 不用IDE写C#的Hello World的方法
    • C#查找对象在ArrayList中出现位置的方法
    • WinForm实现同时让两个窗体有激活效果的特效实例
    • C# DataTable中查询指定字段名称的数据
    • C++联合体转换成C#结构的实现方法
    • C#枚举中的位运算权限分配浅谈
    • C#、ASP.NET通用工具类IsWhat?(可以判断数字、身份证、数据类型等等)

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有