委托声明定义一个从 System.Delegate类派生的类。委托实例封装一个调用列表,该列表列出一个或多个方法,其中每个方法均作为一个可调用实体来引用。对于实例方法,可调用实体由该方法和一个相关联的实例组成。对于静态方法,可调用实体仅由一个方法组成。用一个适当的参数集来调用一个委托实例,就是用此给定的参数集来调用该委托实例的每个可调用实体。

    多播委托是指引用多个方法委托。当调用委托时,它连续调用每个方法。为了把委托的单个实例合并为一个多播委托,委托必须是同类型的。除此之外,它们的声明和实例化都和单播委托没有什么不同。多播委托用于C#的事件模型中。   
     可以把多播委托看作两个或多个标准委托串在一起。委托可以使用算术运算符+和+=串在一起。委托也能使用-和-=运算符从多播委托中删除。当调用多播委托里,委托所表示的每个方法依次调用。如果有任何参数,它们将用于所有的方法。

    特别注意:多播委托所调用的方法可以具有返回值,但是我们只能获得最后一个方法的执行结果。

测试代码如下:

using System;

namespace DelegateTest

{

   public delegate int MyDelegate(int x,int y);

   class DelegateClass

   {

      static void Main(string[] args)

      {

        DelegateClass dc= new DelegateClass();

        MyDelegate md =new MyDelegate(dc.Add);

        md+=new MyDelegate(dc.Sub);

        md+=new MyDelegate(dc.Sub);

        md+=new MyDelegate(dc.Sub);

        md-=new MyDelegate(dc.Sub);

        int i = md(1,1);

        Console.WriteLine(委托的执行结果是:i);       

      }

      int Add(int x,int y)

      {

        Console.WriteLine("X + Y= "+(x+y).ToString());

        return 0;

      }

      int Sub(int x,int y)

      {

        Console.WriteLine("X - Y= "+(x-y).ToString());

        return 1;

      }

   }

}

执行结果:

X+Y =2

X-Y = 0

X-Y = 0

委托的执行结果是:1

posted on 2007-09-27 15:33  段静迪  阅读(323)  评论(1编辑  收藏  举报