什么是链式委托

分析问题

  在前文中,笔者已经详细地介绍了委托的基本概念。而所谓的链式委托,即是一个由委托组成的链表。所有的自定义委托都直接继承自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的结构,将在本章后续小节中有所覆盖。

答案

  链式委托是指一个由委托串成的链表,当链表上的一个委托被回调时,所有链表上该委托的后续委托将会被顺序执行。    

 

  

 

posted on 2014-08-26 10:19  wangjinpeng_study  阅读(466)  评论(0编辑  收藏  举报

导航