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 ...
随机推荐
- 6.4 APK包限制
Google 2015年 9月28日公告:为了Android开发商可以制作出更加复杂的app和游戏,Google Play游戏包体(APK)大小由原来的50MB提高到100MB.但是针对Android ...
- Create executable jar
META-INF Manifest-Version: 1.0 Class-Path: . Main-Class: package.ClassName package package ClassName ...
- linux-7 man 命令
man 命令的分类 man 命令 代码 代表内容 普通命令 内核调用的函数与工具 常见的函数与函数库 设备文件的说明 配置文件 游戏 惯例与协议 管理员可使用的命令 内核相关的文件 一般来讲帮助文档 ...
- SQL入门经典(一)之简介
今天是我第一天开通博客,也是我的第一篇博客.以后为大家带来第一篇关于学习技术性文章,这段时间会为大家带来是SQL入门学习.希望大家坚持读下去,因为学历有限.我也是初学者.语言表达能力不好和知识点不足, ...
- Linux 进程间通信(一)
Linux 进程间通信 进程是一个独立的资源分配单位,不同进程之间的资源是相互独立的,没有关联,不能在一个进程中直接访问另一个进程中的资源.但是,进程不是孤立的,不同的进程之间需要信息的交换以及状态的 ...
- js语法
需要<script language="javascript">标签: ||或者:二选一,满足为true.,否则为false &&与:同时满足,即为tr ...
- 【Java】Lucene检索引擎详解
基于Java的全文索引/检索引擎——Lucene Lucene不是一个完整的全文索引应用,而是是一个用Java写的全文索引引擎工具包,它可以方便的嵌入到各种应用中实现针对应用的全文索引/检索功能. L ...
- Atitit. 单点登录sso 的解决方案 总结
Atitit. 单点登录sso 的解决方案 总结 1. 系统应用场景and SSO模式选型 2 2. 系统应用的原则与要求 2 2.1. 开发快速简单::绝大部分系统来说,开发快速简单为主 2 2. ...
- atitit. 统计功能框架的最佳实践(1)---- on hibernate criteria
atitit. 统计功能框架的最佳实践(1)---- on hibernate criteria 1. 关键字 1 2. 统计功能框架普通有有些条件选项...一个日期选项..一个日期类型(日,周,月份 ...
- SQL 2012 镜像 图解(解决1418)
概念:http://blog.chinaunix.net/uid-11231963-id-2150268.html 写的不错 1.环境准备 1.WIN7+SQL 2012 两台机器 如:10.58.8 ...