首页 > 代码库 > 什么是链式委托
什么是链式委托
分析问题
在前文中,笔者已经详细地介绍了委托的基本概念。而所谓的链式委托,即是一个由委托组成的链表。所有的自定义委托都直接继承自System.MulticastDelegate类型。这个类型即是为链式委托而设计的。所以说,所有的自定义委托都天生地具备了成为一个链式委托的能力。当当个以上的委托被链接到一起形成一个委托链时,调用头部的委托将导致该链上的所有委托方法都被执行。
现在来看一个实际例子,如下代码所示:
using System;namespace Test{ class MulticastDelegate { /// <summary> /// 定义的委托 /// </summary> public delegate void TestMulticastDelegate(); static void Main() { //申明一个委托变量,并绑定第一个方法 TestMulticastDelegate handler = new TestMulticastDelegate(PrintMessage1); //绑定第二个方法 handler += new TestMulticastDelegate(PrintMessage2); //绑定第三个方法 handler += new TestMulticastDelegate(PrintMessage3); //检查结果 handler(); Console.Read(); } static void PrintMessage1() { Console.WriteLine("第1个方法"); } static void PrintMessage2() { Console.WriteLine("第2个方法"); } static void PrintMessage3() { Console.WriteLine("第3个方法"); } }}
简单分析一下这个例子,以上代码中首先定义了一个无参数无返回的委托TestMulticastDelegate,在Main函数中申明了一个TestMulticastDelegate的委托变量handler,并绑定了第一个方法PrintMessage1。然后通过handler+=new TestMulticastDelegate(PrintMessage2);初始化了第二个委托,同时绑定PrintMessage2并且把第二个委托挂在第一个委托之后。紧接着,挂上第三个委托并绑定PrintMessage3。这是一种简单明了的写法,有界面设计经验的读者可能这这种写法并不陌生,回想一下在开发Asp.net或者Windows应用程序时,当添加一个按钮事件时,Visual Studio就会为我们生成类似的代码。
注意
这里笔者再次强调,链式委托是指一个委托的链表,而不是指另一类特殊的委托。当执行链上的一个方法时,后续委托方法将会被依次执行。System.MulticastDelegate定义了对链式委托的支持。在System.Delegate的基础上,它增加了一个指向后续委托的指针,这样就实现了一个简单的链表结构,关于System.MulticastDelegate的结构,将在本章后续小节中有所覆盖。
答案
链式委托是指一个由委托串成的链表,当链表上的一个委托被回调时,所有链表上该委托的后续委托将会被顺序执行。
什么是链式委托