马上加入IBC程序猿 各种源码随意下,各种教程随便看! 注册 每日签到 加入编程讨论群

C#教程 ASP.NET教程 C#视频教程程序源码享受不尽 C#技术求助 ASP.NET技术求助

【源码下载】 社群合作 申请版主 程序开发 【远程协助】 每天乐一乐 每日签到 【承接外包项目】 面试-葵花宝典下载

官方一群:

官方二群:

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

[复制链接]
查看4510 | 回复0 | 2015-2-28 09:27:07 | 显示全部楼层 |阅读模式
转载博客园


-使用中,委托常用来表达回调,事件表达外发的接口。
-委托和事件支持静态方法和成员方法, 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关键字来修饰就变成了创建一个事件. 也就是事件是一种特殊的委托.


[C#] 纯文本查看 复制代码
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;
  }

C#论坛 www.ibcibc.com IBC编程社区
C#
C#论坛
IBC编程社区
*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则