C#学习第九弹之委托

先上委托的例子:

 1 using System;
 2
 3 delegate int myDelegateHandler(int a, int b);
 4
 5 public class A
 6 {
 7     //静态方法
 8     public static int M1(int a, int b)
 9     {
10         return a + b;
11     }
12 }
13
14 public class Test
15 {
16     public static void Main()
17     {
18         //实例一个委托
19         myDelegateHandler tmp = new myDelegateHandler(A.M1);
20         //调用委托
21         int sum = tmp(1, 3);
22         Console.WriteLine(sum.ToString());
23
24     }
25 }

委托的好处:提高可扩展性!

委托其实是一个类,定义了方法的类型,使得可以把方法当作另外一个方法的参数来进行传递,这样可以实现动态赋参数,有时可以避免大量分支结构(if-else),使得程序具有良好的可扩展性。说的这里,想必大家已经清楚了“委托”的含义了吧。

再举个例子:List<T>类型的Find方法的参数也是一个委托,它把“怎么去查找”或者说“怎么样才算找到”这个问题留给了开发人员。开发人员只需要定义一个参数为T,返回值为布尔型的函数,实现函数体,并将函数作为参数传给Find方法,就可以完成集合中元素的查找。

了解C++ STL的可能会联想到:sort这个函数,允许用户自定义比较函数,道理是类似的,不过C++里面并不叫委托,但是传递函数的思想是一致的。

委托链:

 1 using System;
 2
 3 public class FuWuYuan
 4 {
 5     public static void BuyTicket()
 6     {
 7         Console.WriteLine("每次都让我去买票,囧");
 8     }
 9
10     public static void BuyMovieTicket()
11     {
12         Console.WriteLine("而且还要让我带电影票,囧");
13     }
14 }
15
16 class LaoBan
17 {
18     public delegate void BugTicketEventHandler();
19
20     public static void Main(string[] args)
21     {
22         BugTicketEventHandler myDelegate = new BugTicketEventHandler(FuWuYuan.BuyTicket);
23         myDelegate += FuWuYuan.BuyMovieTicket;
24         myDelegate();
25     }
26 }

其实就是让同一个人“做多件事情!”。

时间: 2024-08-26 07:17:55

C#学习第九弹之委托的相关文章

Python3 学习第九弹: 模块学习二之文件管理模块

os模块 提供访问操作系统的接口 1> name 获得当前操作系统 其中 'nt' 是 windows 'posix' 是 linux 2> environ 获得当前系统的环境变量的字典,(变量名:变量值) 3> getcwd() 获得当前工作目录 4> getgid() 返回当前进程的真实组id 5> getlogin() 返回当前登录的用户名 6> getpid() 返回当前进程的pid 7> system(command) 运行shell命令 在linux下

【springmvc学习第九弹】对Ajax的支持

最直接的Ajax处理 只要在Controller的方法里面,直接使用response输出你要返回的的Ajax数据,然后return null就可以了,示例如下: Controller示例 1 @RequestMapping(value = "/hello") 2 public ModelAndView handleRequest(UserModel um,HttpServletResponse response) throws IOException { 3 response.setC

Selenium2学习-040-JavaScript弹出框(alert、confirm、prompt)操作演示实例

弹出框是网页自动化测试常见得操作页面元素之一,常见的JavaScript弹出框有如下三种: 1.alert(message):方法用于显示带有一条指定消息和一个 OK 按钮的警告框.DemoAlert.html 示例代码如下所示: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html&g

FluentData 学习 第一弹

地址: http://fluentdata.codeplex.com/ 前世: FluentData 我们公司用的一个增删改查的里面的持久层.之前还不知道 这个持久层叫FluentData.  某天看见群里 说 某视频网站里面 居然在讲这个开发框架,还收费.我搜了一下.fluentdata有源代码. 这个13年有过记载.不过我是新手.什么也需要 学习一下.  和 室友说了一下微型orm ,他们 呢  用的  微型orm是 Dapper .可以去了解一下. 废话真多,完毕. FluentData

十、Android学习第九天——小结(转)

(转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 十.Android学习第九天——小结 通过这段时间的学习,今晚上来做个小小的总结~~~ 最早之前我们就了解到,Android四个重要的部分: 一.Activity —— 门面,就是我们看到的用户界面 二.Intent —— 在整个应用程序间传送数据 三.Service —— 不可见,为整个应用程序提供一个服务支持 四.Content Provider —— 为应用程序提供

Python学习第一弹——Python环境搭建

一.Python简介: Python,是一种面向对象.解释型计算机程序设计语言,由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年.Python语法简洁而清晰,具有丰富和强大的类库.它常被昵称为胶水语言,它能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起.常见的一种应用情形是,使用Python快速生成程序的原型(有时甚至是程序的最终界面),然后对其中有特别要求的部分,用更合适的语言改写,比如3D游戏中的图形渲染模块,性能要求特别高,就可以用

C#学习(一):委托和事件

预备知识 在学习委托和事件之前,我们需要知道的是,很多程序都有一个共同的需求,即当一个特定的程序事件发生时,程序的其他部分可以得到该事件已经发生的通知. 而发布者/订阅者模式可以满足这种需求.简单来说,在这种模式中,发布者定义了一系列程序的其他部分可能感兴趣的事件.其他类可以"注册",以便再这些事件发生时发布者可以通知它们.这些订阅者类通过向发布者提供一个方法来"注册"以获取通知.当事件发生时,发布者"触发事件",然后执行订阅者提交的所有事件.

C#学习(五)之委托浅探

这一周章老师又讲授了许多知识,本次学习记录就主要探究我非常感兴趣的委托机制.  delegate是表示对具有特定参数列表和返回类型的方法的引用的类型. 在实例化委托时,我们可以将其实例与任何具有兼容签名和返回类型的方法相关联. 我们可以通过委托实例调用方法.委托用于将方法作为参数传递给其他方法. 事件处理程序就是通过委托调用的方法. 我们可以创建一个自定义方法,当发生特定事件时,某个类(如 Windows 控件)就可以调用我们的方法.它其实类似于C++中指向函数指针.一个委托声明示例演示如下:

C#学习第一弹之Hello World

这学期开始了C#的学习,俗话说的好,“万事”从Hello World开始,先贴上自己的Hello World代码. 1 class HelloWorld 2 { 3 static void Main( string[] args ) 4 { 5 System.Console.WriteLine("Hello World"); 6 } 7 } 以上便是一个最基本的Hello World程序,它代表了一个C#程序的基本框架.任何一个C#程序都必须至少含有一个类,且程序从Main函数开始执行