13.1 什么是委托

  • 委托是持有一个或多个方法的对象,可将一个方法传递到另一个方法。
  • 委托是用户自定义的引用类型。

13.2 委托概述

  • 类表示的是数据和方法的集合,而委托持有一个或多个方法,以及一系列预定义操作。
  • 委托中的方法可以是实例方法,也可以是静态方法。
  • 在调用委托的时候,会执行其调用列表中的所有方法。

13.3 声明委托类型

delegate void SayHelloDelegate(string s);//1.以delegate关键字开头  2.后缀添加Delegate,以表明是委托

13.4 创建委托对象

SayHelloDelegate mydelegate1, mydelegate2;
mydelegate1 = new SayHelloDelegate(a.CSayHello);//实例化委托对象的方法1
mydelegate2 = a.CSayHello;//实例化委托对象的方法2

13.5 给委托赋值

  • 委托是引用类型,我们可以通过给它赋值来改变包含在委托变量中的引用,旧的委托对象会被垃圾回收器回收。

13.6 组合委托

SayHelloDelegate mydelegate1, mydelegate2, mydelegate3;
mydelegate1 = new SayHelloDelegate(a.CSayHello);
mydelegate2 = a.CSayHello;
mydelegate3 = mydelegate1 + mydelegate2;//组合委托

13.7 为委托添加方法

SayHelloDelegate mydelegate1;
mydelegate1 = new SayHelloDelegate(a.CSayHello);
mydelegate1 += a.ESayHello;//使用"+="为委托添加方法

13.8 从委托移除方法

SayHelloDelegate mydelegate1;
mydelegate1 = new SayHelloDelegate(a.CSayHello);
mydelegate1 += a.ESayHello;
mydelegate1 -= a.CSayHello;//使用“-=”从委托移除方法
  • 将从调用列表的最后开始搜索,并且移除第一个与方法匹配的实例。
  • 试图删除委托中不存在的方法,编译时不会报错。
  • 试图调用空委托会抛出异常,如果调用列表为空,则委托是null。

13.9 调用委托

  • 在调用委托的时候,会执行其调用列表中的所有方法。

13.10 委托的示例

略。

13.11 调用带返回值的委托

  • 调用列表中的最后一个方法返回的值就是委托调用的返回值。
  • 调用列表中所有其他方法的返回值都会被忽略。

13.12 调用带引用参数的委托

    //声明带有引用参数的委托类型
delegate void MydelDelegate(ref int x); class Program
{
static void Main(string[] args)
{
A a = new A();
MydelDelegate myDel = a.Add2;
myDel += a.Add3;
int x = ;
myDel(ref x);//在调用委托列表的下一个方法时,参数的新值会传给下一个方法。
Console.WriteLine(x);//x输出后,x为10。
}
}

class A
{
public void Add2(ref int x)
{
x += ;
} public void Add3(ref int x)
{
x += ;
} }

13.13 匿名方法

  • 匿名方法是在初始化委托时内联声明的方法。
  • 声明委托变量时作为初始化表达式。
  • 组合委托时在赋值语句的右边。
  • 为委托增加事件时在赋值语句的右边。
delegate void MydelDelegate(int x);

    class Program
{
static void Main(string[] args)
{
//使用匿名方法,不需要实例化类,调用类的方法。
MydelDelegate myDel = delegate(int x)
{
x++;
};
}
}

13.14 Lambda表达式

MydelDelegate myDel1,myDel2,myDel3,myDel4,myDel5;
myDel1 = delegate(int x) { x = x + ; };//匿名方法
myDel2= (int x)=>{ x = x + ; };//Lambda表达式
myDel3 = (x)=> { x = x + ; };//Lambda表达式
myDel4 = x=> { x = x + ; };//Lambda表达式
myDel5 = x => x = x + ;//Lambda表达式

【C#图解教程学习笔记】第13章 委托的更多相关文章

  1. #Python学习笔记:1-3章 (基于《python编程,从入门到实践)

    第1-3章 这个文档是记录我学习python时一些学习笔记以及一些想法也可以称作复习笔记 第一章:起步这一章主要是从第一个"hello world"程序到python环境的搭建与配 ...

  2. Python基础教程学习笔记:第一章 基础知识

    Python基础教程 第二版 学习笔记 1.python的每一个语句的后面可以添加分号也可以不添加分号:在一行有多条语句的时候,必须使用分号加以区分 2.查看Python版本号,在Dos窗口中输入“p ...

  3. 【C#4.0图解教程】笔记(第9章~第18章)

    第9章 语句 1.标签语句 ①.标签语句由一个标识符后面跟着一个冒号再跟着一条语句组成 ②.标签语句的执行完全如同标签不存在一样,并仅执行冒号后的语句. ③.给语句添加一个标签允许控制从代码的另一部分 ...

  4. 《机器学习实战》学习笔记——第13章 PCA

    1. 降维技术 1.1 降维的必要性 1. 多重共线性--预测变量之间相互关联.多重共线性会导致解空间的不稳定,从而可能导致结果的不连贯.2. 高维空间本身具有稀疏性.一维正态分布有68%的值落于正负 ...

  5. java JDK8 学习笔记——第13章 时间与日期

    第十三章 时间与日期 13.1 认识时间与日期 13.1.1 时间的度量 1.格林威治标准时间GMT 格林威治标准时间的正午是太阳抵达天空最高点之时.现在已经不作为标准时间使用. 2.世界时UT世界时 ...

  6. 【C#4.0图解教程】笔记(第19章~第25章)

    第19章 泛型 1.泛型概念 泛型提供了一种更准确地使用有一种以上的类型的代码的方式. 泛型允许我们声明类型参数化的代码,我们可以用不同的类型进行实例化. 泛型不是类型,而是类型的模板.   2.声明 ...

  7. 【C#4.0图解教程】笔记(第1章~第8章)

    第1章 C#和.NET框架 1..NET框架的组成 .NET框架由三部分组成(严格来说只有CLR和FCL(框架类库)两部分),如图 执行环境称为:CLR(公共语言运行库),它在运行期管理程序的执行. ...

  8. <<Python基础课程>>学习笔记 | 文章13章 | 数据库支持

    备注:本章介绍了比较简单,只是比较使用样品,主要假设是把握连接,利用数据库.和SQLite做演示样本 ------ Python数据库API 为了解决Python中各种数据库模块间的兼容问题,如今已经 ...

  9. C#图解教程学习笔记——数据类型与数据存储

    一.数据类型1. 预定义类型C#提供16种预定义类型,包括13种简单类型和3种非简单类型:(1)简单类型<1>11种数值类型: 不同长度的有符号和无符号整数类型 浮点数的float和dou ...

随机推荐

  1. Failed building wheel for cytoolz

    2019独角兽企业重金招聘Python工程师标准>>> 当我使用 pip instlal cytoolz 时,  报以下错误: error: Microsoft Visual C++ ...

  2. pvresize

    lvm pv 扩容 pvresize 当PV对应的设备分区(如md软raid)扩容之后,利用该命令可以扩容PV

  3. Netty(二):数据在ChannelPipeline中的流经

    本文目的:测试数据在ChannelPipeline中的流经顺序及状态. 先看本文的测试代码: AdditionalInBoundHandler:入站处理器,不做任何处理,只是在响应读事件时打印用来观察 ...

  4. JS中switch语句做选择时为什么可以不用break?

    在JavaScript中,switch语句相比其他语言并没有特殊之处. 在使用时,我们要注意每个分支后都应加一条break语句,否则后面的分支仍然会执行.实际程序中,我发现有时没用break语句,仍然 ...

  5. javascript中Function、ArrowFunction和GeneratorFunction介绍

    ECMAScript规范中对Function的文档描述,我认为是ECMAScript规范中最复杂也是最不好理解的一部分,它涉及到了各方面.光对Function就分了Function Definitio ...

  6. 数据库SQL语言从入门到精通--Part 4--SQL语言中的模式、基本表、视图

    数据库从入门到精通合集(超详细,学习数据库必看) 前言: 使用SQL语言时,要注意SQL语言对大小写并不敏感,一般使用大写.所有符号一定是西文标点符号(虽然是常识,但我还是提一嘴) 1.模式的定义与删 ...

  7. 【Java8新特性】你知道Java8为什么要引入Lambda表达式吗?

    写在前面 这是一道真实的面试题,一个读者朋友出去面试,面试官竟然问他这样一个问题:你说说Java8中为什么引入Lambda表达式?引入Lambda表达式后有哪些好处呢?还好这个朋友对Java8早有准备 ...

  8. 首次使用AWS服务器EC2

    AWS有一年的免费套餐,这个便宜我得占. 申请的时候需要填写银行卡,AWS暂不支持储蓄卡,只好绑信用卡了. 创建EC2实例之后,下一个要解决的问题就是远程root访问. 1. 修改安全组设置 2. s ...

  9. qt creator源码全方面分析(4-3)

    内外命名空间 QtCreator源码中,每一个子项目都有内外两层命名空间,一个是外部的,一个是内部的. 示例如下 namespace ExtensionSystem { namespace Inter ...

  10. 2019-2020Nowcoder Girl初赛 题解

    题目都不是很难,就是最后一题有点毒瘤 第一题:牛妹爱整除 这个你把一个进制数进行拆分,拆分成若干位,然后在取模,这样会发现如果是x进制的数,那么对x+1这个进制转化即满足条件. 举个例子:一个x进制数 ...