之前本人一直在写一些相对比较基础的C#代码,现在做了一段时间项目了,遇到更麻烦的问题,比如今天要讨论的委托和事件,这个算是C#进阶篇的内容吧。现在自己就把这些天所学习的和自己所理解的和大家分享。有错请指正。

委托

顾名思义,委托就类似于中介,你建立它后,它一直在那儿,然后你可以让它去做不同的事,本质来说委托就是一个用来做事的工具。但是需要注意的是不是所有的事都能让委托去做,这些事要有相同的特征,比如和委托有相同的参数。好啦,咱们还是Demo说话吧

新建一个控制台项目

然后我们首先在项目定义一个委托,其实委托也算得上是一个类,属于引用类型(iint 等属于值类型,存储空间为堆栈,引用类型存储空间为堆),所以我们处理委托的时候可以直接把它像类一样处理,只是声明的时候不同的一点就是,要写出参数。

接着我们新建一个方法,这个方法就是我们需要这个委托,也就是这个中介去做的事。注意我们要让这个方法的参数类型和个数与委托一致,因为你不能让一个卖房子的中介去帮你干买车的事,对吧!

最后我们就来用委托吧,前面我有说过委托几乎类似一个类,我们要使用委托就得实例化了,并且我们这个时候得告诉它我们需要这个中介做什么事了。

注意一下此时传的参数是方法,而不是平时的什么int double类型。这也是委托的精髓所在。然后可以看到代码里面我随后就使用了委托,给handler传入了一个

int类型的参数,因为我们之前定义委托的时候就指定了需要一个参数,类型为int。

现在咱们来看看最后输出的结果吧,验证一下!!!


现在我们算是了解了最基础的委托,接着我们还是来看看多路广播委托,其实也就是让这个中介一次帮我们做多个事情。要是不能一次做多个事,我们要这个中介干嘛,还不如自己直接把这件事做了。

我们先添加两个事情吧。

我们现在再告诉中介也要做这两件事

我们用+=的方式来给他添加需要做的事,这个时候委托的内部有一个链表,可以不断地添加和删除要做的事(删除为-=),类似于list的操作。

现在我们来看一下运行结果吧

现在我们来总结一下委托吧

委托主要分为三步:

一:定义一个委托

二:需要做的事情

三:把事情通过参数形式传给委托

最后就是使用委托啦!!!

PS:今天由于时间不多,只能暂时简单写写委托,大家要更深入了解委托更细节的东西的话,可以去园子里的其他博客看看,有很多优秀的帖子。

下次我也会接着和大家分享一下在委托的基础上,我对于事件的理解。

C#的委托的更多相关文章

  1. C#中的委托解析

    谈及到C#的基本特性,“委托”是不得不去了解和深入分析的一个特性.对于大多数刚入门的程序员谈到“委托”时,都会想到“将方法作为方法的参数进行传递”,很多时候都只是知道简单的定义,主要是因为“委托”在理 ...

  2. 深刻理解:C#中的委托、事件

    C#中的事件还真是有点绕啊,以前用JavaScript的我,理解起来还真是废了好大劲!刚开始还真有点想不明白为什么这么绕,想想和JS的区别,最后终于恍然大悟! C#中事件绕的根本原因: C#的方法,它 ...

  3. c# 三种常见的委托

    参考  <编写高质量代码:改善C#程序的157个建议> , 尽量使用FCL中的委托声明. FCL: FrameWork Class Library 三种常用:Action.Func.Pre ...

  4. C# 中的委托和事件

    觉得这篇文章写的非常好,大神之作,由简入繁,对我这种初学者来说帮忙很大,特此留存下. 摘自:http://tracefact.net/CSharp-Programming/Delegates-and- ...

  5. C#中的委托与事件并存的理由

    更多资源:http://denghejun.github.io 问题 有了委托为什么还要有事件? 理论上,事件能完成的事情委托完全可以胜任,但是我们思考的这一方面是功能性,我们必须从他们各自的特点分析 ...

  6. Objective-C中的委托(代理)模式

    我个人更喜欢把委托(Delegate)模式称为代理(Proxy)模式.还是那句话,第一次接触代理模式是在Java中接触的,在Java中实现代理模式和接口是少不了的.当时学习Spring的时候用到了接口 ...

  7. C# 中的委托和事件(转)

    引言 委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易.它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去 ...

  8. C# 中的委托和事件(转载)

    引言 委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易.它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去 ...

  9. C# 委托和事件(一):最简单的委托和事件

    C#的事件基于委托,所以先说委托. 一切脱离实际场景的抽象概念新手看上去就像是在扯犊子,不错,我就是个新手.所以我需要一个实际的场景. 明天刚好考试(商务英语),考试上有两个角色(class):老师( ...

随机推荐

  1. [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform

    eclipse maven clean install 报错 1. 修改properties-->resource-->utf-8仍然报错 2.修改项目pom.xml文件,增加: < ...

  2. WPF中Grid实现网格,表格样式通用类

    /// <summary> /// 给Grid添加边框线 /// </summary> /// <param name="grid"></ ...

  3. 多本地代码工作点更新到2个远端GIT仓库

    摘要:本文介绍了笔者多个本地工作节点(地方)的多台电脑(PC/笔记本电脑)同步源码到2个远端的GIT(一个GITHUB国外强制公开,一个oschina国内可不公开). 作者:太初 转载说明:请指明原作 ...

  4. Winserver2012下mysql 5.7解压版(zip)配置安装

    一.安装 下载mysqlzip版本mysql不需要运行可执行文件,解压即可,下载zip版本mysqlmsi版本mysql双击文件即可安装,相对简单,本文不介绍此版本安装 配置环境变量打开环境变量配置页 ...

  5. mysql数据库主从同步

    环境: Mater:   CentOS7.1  5.5.52-MariaDB  192.168.108.133 Slave:   CentOS7.1  5.5.52-MariaDB  192.168. ...

  6. 萌新笔记——vim命令“=”、“d”、“y”的用法(结合光标移动命令,一些场合会非常方便)

    vim有许多命令,网上搜有一堆贴子.文章列举出各种功能的命令. 对于"="."d"."y",我在无意中发现了它们所具有的相同的一些用法,先举 ...

  7. 聊聊从web session的共享到可扩展缓存设计

    先从web session的共享说起   许多系统需要提供7*24小时服务,这类系统肯定需要考虑灾备问题,单台服务器如果宕机可能无法立马恢复使用,这必定影响到服务.这个问题对于系统规模来说,从小到大可 ...

  8. 我的MYSQL学习心得(二) 数据类型宽度

    我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  9. Membership三步曲之进阶篇 - 深入剖析Provider Model

    Membership 三步曲之进阶篇 - 深入剖析Provider Model 本文的目标是让每一个人都知道Provider Model 是什么,并且能灵活的在自己的项目中使用它. Membershi ...

  10. 论C#之多继承

    C#多继承的讨论似乎是个古老的问题了,但今天本文要向大家展示的C#多继承可能是大家闻所未闻见所未见的,甚至是发明C#语言的人也不曾想到我会这样去写代码,并且自得其乐. 说起多继承,首先大家可以想想这个 ...