3.C#中的多重委托
阅读目录
一:多重委托概述
二:多重委托实例
一:多重委托概述
1.委托的调用其实是一个调用列表,可以同时调用多个不同的方法
2.第1个委托加上第2个委托赋予第3个委托,相当于把两个方法按顺序一排,先调用第一个方法,再调用第二个方法
3.当一个委托列表为空的时候,对它进行调用会报错
二:多重委托实例
我们先写一个Number数字类,这个类里面有四个方法,分别是加减乘除,第一个委托实例compute1执行的是AddNumber方法,那么输出3如深红色框所示,第二个委托实例computer2执行的是SubNumber方法,那么输出的是-1如绿色框所示,第三个委托compute3=compute1+compute2,实际上是先调用compute1的AddNumber方法,再调用compute2的SubNumber方法,输出如红色框所示,第四个委托compute4先实例化了new Compute(Number.ExceptNumber)ExceptNumber方法,然后第三个委托compute3+=compute4,那么此时因为上面compute3已经等于compute1+compute2了,这里又+=了compute4,所以会先调用compute1的AddNumber方法,再调用compute2的SubNumber方法,最后调用compute4的ExceptNumber方法,输出如黄色框所示,我们再开始-=,先compute3-=compute4,然后输出如蓝色框所示,我们在-=compute2,输出如紫色框所示,compute3只剩下了一个compute1了,也就是AddNumber方法,如果我们再从compute3-=compute1,我们看到会报错,因为当一个委托列表为空时,对它调用会报错
public delegate void Compute(int number1, int number2);
class Program
{
static void Main(string[] args)
{
Compute compute1 = new Compute(Number.AddNumber);
compute1(, );
Console.WriteLine(); Compute compute2 = new Compute(Number.SubNumber);
compute2(,);
Console.WriteLine(); Compute compute3 = compute1 + compute2;
compute3(,);
Console.WriteLine(); Compute compute4 = new Compute(Number.ExceptNumber);
compute3 += compute4;
compute3(, );
Console.WriteLine(); compute3 -= compute4;
compute3(, );
Console.WriteLine(); compute3 -= compute2;
compute3(, );
Console.WriteLine(); //compute3 -= compute1;
//compute3(1, 2);
//Console.WriteLine(); Console.ReadLine();
}
} class Number
{
/// <summary>
/// 加法
/// </summary>
/// <param name="number1"></param>
/// <param name="number2"></param>
public static void AddNumber(int number1, int number2)
{
Console.WriteLine("Add number result is {0}", number1 + number2);
} /// <summary>
/// 减法
/// </summary>
/// <param name="number1"></param>
/// <param name="number2"></param>
public static void SubNumber(int number1, int number2)
{
Console.WriteLine("Sub number result is {0}", number1 - number2);
} /// <summary>
/// 乘法
/// </summary>
/// <param name="number1"></param>
/// <param name="number2"></param>
public static void MultiNumber(int number1, int number2)
{
Console.WriteLine("MultiNumber number result is {0}", number1 * number2);
} /// <summary>
/// 除法
/// </summary>
/// <param name="number1"></param>
/// <param name="number2"></param>
public static void ExceptNumber(int number1, int number2)
{
Console.WriteLine("ExceptNumber number result is {0}", number1 / number2);
}
}


3.C#中的多重委托的更多相关文章
- 怎么理解js中的事件委托
怎么理解js中的事件委托 时间 2015-01-15 00:59:59 SegmentFault 原文 http://segmentfault.com/blog/sunchengli/119000 ...
- .Net Framework中的标准委托和事件_1
.Net Framework中的标准委托,已经定义在命名空间System中, namespace System { public delegate void EventHandler(object s ...
- 【Unity3D技巧】在Unity中使用事件/委托机制(event/delegate)进行GameObject之间的通信 (二) : 引入中间层NotificationCenter
作者:王选易,出处:http://www.cnblogs.com/neverdie/ 欢迎转载,也请保留这段声明.如果你喜欢这篇文章,请点[推荐].谢谢! 一对多的观察者模式机制有什么缺点? 想要查看 ...
- js实例分析JavaScript中的事件委托和事件绑定
我们在学习JavaScript中,难免都会去网上查一些资料.也许偶尔就会遇到“事件委托”(也有的称我“事件代理”,这里不评论谁是谁非.以下全部称为“事件委托”),尤其是在查JavaScript的事件处 ...
- JQuery中的事件委托
JQuery 中的事件委托 定义 事件委托就是利用冒泡的原理,把事件加到父级上,通过判断事件来源的子集,执行相应的操作,事件委托首先可以极大减少事件绑定次数,提高性能:其次可以让新元素的子元素也可以拥 ...
- js中的事件委托或是事件代理
JavaScript(jQuery)中的事件委托 https://www.cnblogs.com/zhoushengxiu/p/5703095.html js中的事件委托或是事件代理详解 https: ...
- 关于.net4.0中的Action委托
在使用委托时,若封装的方法无返回值,并且参数在0-7个,可考虑使用.Net4.0中的Action委托,建议使用系统自带的,减少自定义 public delegate void Action<in ...
- .NET中的泛型委托
.Net中有一个内置的委托 Func 它总共有以下5种形式 1. Func<TResult> 2. Func<T,TResult> 3. Func<T1,T2,TR ...
- 简单说 JavaScript中的事件委托(下)
说明 上次我们说了一些,关于 JavaScript中事件委托的 基础知识,这次我们继续来看. 解释 先来一段代码 <!doctype html> <html lang="e ...
随机推荐
- Windows 8.1 应用再出发 - 几种新增控件(2)
本篇我们接着来介绍Windows 8.1 的新增控件,分别是:Flyout.MenuFlyout.SettingsFlyout.Hub 和 Hyperlink. 1. Flyout Flyout被称为 ...
- android studio中xml没有提示
删除.idea文件夹和所有的.iml文件,重新build project.
- 一些常用的Bootstrap模板资源站
2013-11-13 23:28:09 超级Bootstrap模板库:http://www.wrapbootstrap.com/ 免费的HTML5 响应式网页模板:http://html5up.n ...
- C#设计模式(13)——代理模式(Proxy Pattern)
一.引言 在软件开发过程中,有些对象有时候会由于网络或其他的障碍,以至于不能够或者不能直接访问到这些对象,如果直接访问对象给系统带来不必要的复杂性,这时候可以在客户端和目标对象之间增加一层中间层,让代 ...
- webAPI 自动生成帮助文档
之前在项目中有用到webapi对外提供接口,发现在项目中有根据webapi的方法和注释自动生成帮助文档,还可以测试webapi方法,功能很是强大,现拿出来与大家分享一下. 先看一下生成的webapi文 ...
- addin 笔记
http://msdn.microsoft.com/en-us/library/vstudio/19dax6cz.aspx VS 加载插件的位置: \My Documents\Visual Studi ...
- SQL Server FileStream
以往我们对文件管理有两种方法: 数据库只保存文件的路径,具体的文件保存在文件服务器(NFS)上,使用时,编程实现从文件服务器读取文件: 将文件直接以varbinary(max)或image数据类型保存 ...
- js获取url传递参数
<head> <meta charset="UTF-8"> <title></title> <script type=&quo ...
- atitit.web 推送实现方案集合
atitit.web 推送实现方案集合 1. 俩中模式 Push/Pull 1 2. 需要实现的特性 2 2.1. 推送消息广播. 2 2.2. 推送定向消息. 2 2.3. 提供连接上线前.上线.下 ...
- iOS开发——高级技术&地图功能的实现
地图功能的实现 因为有个项目要在地图中显示位置,所以用到了MapKit. 记录下来,以免以后忘记. 加入MapKit library 首先得在项目中加入MapKit,如图 MapView 先增加一个V ...