文章介绍了委托的基本知识,接下来就进一步研究一下委托。
委托类型
其实,刚开始觉得委托类型是一个比较难理解的概念,怎么也不觉得下面的”AssembleIphoneHandler”是一个类型。
代码如下:
public delegate void AssembleIphoneHandler();
按照正常的情况,如果我们要创建一个委托类型应该是:
代码如下:
public class AssembleIphoneHandler : System.MulticastDelegate
{
}
但是,这种写法是编译不过的,会提示不能从”System.MulticastDelegate”派生子类。
其实,这里是编译器为我们做了一个转换,当我们使用delegate关键字声明一个委托类型的时候,编译器就会按照上面代码片段中的方式为我们创建一个委托类型。
知道了这些东西,对于委托类型的理解就比较容易了,通过delegate声明的委托类型就是一个从”System.MulticastDelegate”派生出来的子类。
建立委托链
下面我们通过一个例子来看看委托链的建立,以及调用列表的变化,基于前面一篇文章中的例子进行一些修改。
代码如下:
class Program
{
static void Main(string[] args)
{
Apple apple = new Apple();
Foxconn foxconn = new Foxconn();
Apple.AssembleIphoneHandler d1, d2, d3, d4 = null;
d1 = new Apple.AssembleIphoneHandler(foxconn.AssembleIphone);
d2 = new Apple.AssembleIphoneHandler(foxconn.PackIphone);
d3 = new Apple.AssembleIphoneHandler(foxconn.ShipIphone);
d4 += d1;
d4 += d2;
d4 += d3;
d4();
Console.Read();
}
}
除声明外,跑步客文章均为原创,转载请以链接形式标明本文地址
C#中委托的进一步理解
本文地址: http://www.paobuke.com/develop/c-develop/pbk23130.html
相关内容
C# 获取IP及判断IP是否在区间
C# this1??ü×?μ?????ó?·¨
C#求数组中元素全排列的方法
C#生成DLL文件的方法小结
C#、ASP.NET通用工具类IsWhat?(可以判断数字、身份证、数据类型等等)
c#编写的番茄钟倒计时器代码
C#中实现在32位、64位系统下自动切换不同的SQLite dll文件
C#实现自定义定时组件的方法