ibcadmin 发表于 2015-2-28 09:27:07

C#事件与委托之间的关系

转载博客园


-使用中,委托常用来表达回调,事件表达外发的接口。
-委托和事件支持静态方法和成员方法, delegate(void * pthis, f_ptr), 支持静态返方法时, pthis传null.支持成员方法时, pthis传被通知的对象.
-委托对象里的三个重要字段是, pthis, f_ptr, pnext, 也就是被通知对象引用, 函数指针/地址, 委托链表的下一个委托节点.

1. 怎样定义委托类型?
delegate + function signature // delegate相当于class关键字, function name相当于定义的委托类型.
delegate void Mydelegate();
2. 怎样定义委托实例? Mydelegate my;(这个是无返回值的简单委托定义);
3. 怎样定义事件?
   先定义委托类型 delegate void ActionHandler(object sender, EventArgs args);其实这个参数要不要都可以。
   再定义事件实例event ActionHandler Tick;

记忆的方法:
delegate关键字类比于class关键字, 定义的是一种委托类型,然后再创建委托示例.
创建委托实例时, 用event关键字来修饰就变成了创建一个事件. 也就是事件是一种特殊的委托.


class MyClass
    {
      public delegate void CompletedEventHandler();

      public event CompletedEventHandler WorkCompleted;
      public CompletedEventHandler WorkCompletedDelegate;

      public void Fire()
      {
            if (this.WorkCompleted != null)
            {
                this.WorkCompleted();
            }

            if (this.WorkCompletedDelegate != null)
            {
                this.WorkCompletedDelegate();
            }
      }
    }
    class Program
    {
      static void TestEvent()
      {
            Console.WriteLine("test event");
      }

      static void TestDelegate()
      {
            Console.WriteLine("test delegate");
      }

      static void Main(string[] args)
      {

            MyClass myObject = new MyClass();
            myObject.WorkCompletedDelegate += TestDelegate;
            myObject.WorkCompleted += TestEvent;
}
页: [1]
查看完整版本: C#事件与委托之间的关系