(六)CSharp-CSharp图解教程版-委托

委托和类一样,是一种用户定义类型(即是一种类,所以也是一个引用类型在它们组成的结构方面区别是,类表示的是数据和方法的集合,而委托则持有一个或多个方法。可以把 delegate 看作是一个包含有序方法列表的对象,这些方法具有相同的签名和返回类型。(1)方法的列表称为调用列表。委托的返回类型;委托的签名(包括 ref 和 out 修饰符)(3)调用列表中的方法可以是实例方法也可以是静态方法。(4)在调用委托的时候,会执行其调用列表中的所有方法。委托也可以包含多个方法。也称为多播委托。
摘要由CSDN通过智能技术生成

一、委托概述

1、什么是委托

委托和类一样,是一种用户定义类型(即是一种类,所以也是一个引用类型)。在它们组成的结构方面区别是,类表示的是数据和方法的集合,而委托则持有一个或多个方法

请添加图片描述

可以把 delegate 看作是一个包含有序方法列表的对象,这些方法具有相同的签名和返回类型。

  • (1)方法的列表称为调用列表。

  • (2)委托持有的方法可以来自任何类或结构,只要它们在下面两方法匹配:

    • 委托的返回类型;
    • 委托的签名(包括 ref 和 out 修饰符)
  • (3)调用列表中的方法可以是实例方法也可以是静态方法

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

请添加图片描述

2、声明委托类型

声明委托代码:

delegate void MyDel(int x);
//delegate:关键字
//void:返回类型
//MyDel:委托类型名称
//MyDel(int x):签名

委托与方法在声明时有两点不同:

  • 以 delegate 关键字开头;
  • 没有方法主体。

说明: 虽然委托类型声明看上去和方法的声明一样,但它不需要在类内部声明,因为它是类型声明。

请添加图片描述

3、创建委托对象

委托类型的变量声明:

MyDel delVar;
//MyDel:委托类型
//delVar:变量

有两种创建委托对象的方法:

(1)使用带 new 运算符的对象创建表达式。
new 运算符的操作数的组成:

  • 委托类型名。
  • 一组圆括号,其中包含作为调用列表中第一个成员的方法的名称,该方法可以是实例方法或静态方法。

假设 myInstObj 是类对象,MyM1 是 myInstObj 的一个实例方法。 SCLass 是类,OtherM2 是 SCLass 的静态方法。

//创建委托并保存引用
delVar = new MyDel(myInstObj.MyM1);
delVar = new MyDel(SCLass.OtherM2);

(2)快捷语法
仅由方法说明符构造。这种快捷语法能够工作是因为在方法名称和其相应的委托类型之间存在隐式转换。

//创建委托并保存引用
delVar = myInstObj.MyM1;
delVar = SClass.OhterM2;

以下是创建委托对象的完整代码:

delegate void MyDel(int x);

//使用 new 运算符方式
MyDel delVar,dVar;
delVar = new MyDel(myInstObj.MyM1);
dVar = new MyDel(SClass.OtherM2);

//快捷语法方式
MyDel delVar = myInstObj.MyM1;
MyDel dVar = SClass.OhterM2;

除了为委托分配内存,创建委托对象还会把第一个方法放入委托的调用列表。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值