·delegate定义一种签名的方式。
  例:delegate void yourDelegateName(Type param1, Type param2)。 yourDelegateName仅仅是一个名字,标示这种签名方式:(Type param1, Type param2)包括返回值void。当然你也可以这样定义其它的签名:delegate int otherDelegateName(string id, string name)等等。·event定义哪一种类型的事件。这里的类型便是指上面定义的yourDelegateName的delegate,因此,事件必须这样定义:event yourDelegateName yourEventName,这样就告诉事件接受方我这个事件的签名方式。·事件接受方必须定义一个符合(或者说对应)yourDelegateName签名方式的方法。例如:void yourDo(Type param1,Type param2)。·最后,事件接受方将这个方法和事件联系起来:事件产生方.yourEventName += new yourDelegateName(yourDo)。因为yourDo方法是严格按照yourDelegateName签名的,因此只要传递方法名。当yourEventName事件发生时,这个事件会自己调用你的方法(yourDo)。·很显然,如果需要多路广播,可以这样:
事件产生方.yourEventName += new yourDelegateName(yourDo1);
事件产生方.yourEventName += new yourDelegateName(yourDo2);
...
关键是你的自定义事件是用你的自定义委托声明的,接受方的事件响应方法是符合你的自定义委托的签名方法。说了这么多,希望能对你有所帮助。

解决方案 »

  1.   

    delegate实质是函数指针,可被看作一种回调机制,实际上是说“到时间请为我调用这种方法”。
      

  2.   

    delegate 有点象原来的函数指针。
    呵呵,我觉得cncys(山上老虎)说的很好!清楚、正确!
      

  3.   

    delegate(译为“委托”)其实就是对象方法指针,委托(delegate)根据其返回值分为两种既:一、一般委托 二、组潘委托(返回值为void),它可以通过重“+=”运算符指向多个对象方法,事件就用这种委托实现,如:
          public delegate void TestDelegate();
          class TData
            {
              private int data;
              punlic event TestDelegate OnDataChange;
              public int Data
                {
                  get
                    { 
                       return data;
                     }
                  set
                     {
                        if(data!=value)$$(OnDateChange!=null)
                           {
                             data=value;
                             OnDateChange();
                            }
                      }
                  }
                  public void PrintText()
                   {
                     System.Console.Write("Data's valus is Changed");
                    }
                  public TData()
                    {
                      OnDataChange+=new TestDelegate(PrintText);
                      }
                 }
                 class AppClass
                    {
                      public static void Main()
                         {
                            Tdada AppData=new Tdata();
                            AppData.Data=5 //data变化,触发OnDataChange 事件
                          }
                     }
    程序编译后输出:
          Data's value is changed
    说明:
        关键字event作用:1、说明这是一个事件处理过程 2、对事件委托只能进
                          行“+=”或“-=”操作。
      

  4.   

    qiujin(邱军)的例子is good!
      

  5.   

    qiujin(邱军)的例子is good!