博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
步步为营-28-事件本质
阅读量:4549 次
发布时间:2019-06-08

本文共 2093 字,大约阅读时间需要 6 分钟。

事件本质:类型安全的多播委托

1:还是以音乐播放器为例

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading;using System.Threading.Tasks;namespace 事件本质{    class Program    {        static void Main(string[] args)        {        }        //音乐播放器--类        public  class PlayMusic        {            //构造函数            public PlayMusic(string name)            {                this.name = name;            }            //字段-name            private string name;            //-属性            public string Name            {                get { return name; }                set { name = value; }            }            //方法--播放            public void PlaySong()             {                Console.WriteLine("现在开始播放:{0}",this.name);                Thread.Sleep(3000);                //播放完成执行事件            }        }    }}
View Code

2:那么事件该怎么写呢

  2.1 声明事件 public event EventHandler evtPlayOver;

  这里我们使用系统的委托EventHandler 

#region 程序集 mscorlib.dll, v4.0.0.0// C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\mscorlib.dll#endregionusing System.Runtime.InteropServices;namespace System{    // 摘要:     //     表示将处理不包含事件数据的事件的方法。    //    // 参数:     //   sender:    //     事件源。    //    //   e:    //     不包含任何事件数据的 System.EventArgs。    [Serializable]    [ComVisible(true)]    public delegate void EventHandler(object sender, EventArgs e);}
EventHandler

  2.2 播放完成触发事件

//播放完成执行事件                if (evtPlayOver!=null)                {                    EventArgs e = new EventArgs ();                    //执行事件                    evtPlayOver(this,e);                }
View Code

3 Main调用PlaySong方法

static void Main(string[] args)        {            PlayMusic pm = new PlayMusic("小天狼");            //注册要执行事件            pm.evtPlayOver += pm_evtPlayOver;            pm.PlaySong();        }        static void pm_evtPlayOver(object sender, EventArgs e)        {            PlayMusic p = sender as PlayMusic;            Console.WriteLine(p.Name+"播放完了");        }
View Code

 

反编译:

可见其本质是委托,类型安全的委托

转载于:https://www.cnblogs.com/YK2012/p/6744345.html

你可能感兴趣的文章
Eclipse修改已存在的SVN地址
查看>>
C++ ACM基础
查看>>
(转)使用 python Matplotlib 库绘图
查看>>
进程/线程切换原则
查看>>
正则表达式语法
查看>>
20165301 2017-2018-2 《Java程序设计》第四周学习总结
查看>>
Vue的简单入门
查看>>
使用最快的方法计算2的16次方是多少?
查看>>
urllib 中的异常处理
查看>>
【SQL Server高可用性】高可用性概述
查看>>
通过SQL Server的扩展事件来跟踪SQL语句在运行时,时间都消耗到哪儿了?
查看>>
SQL优化:重新编译存储过程和表
查看>>
PCB“有铅”工艺将何去何从?
查看>>
Solr环境搭建
查看>>
IE兼容性的一些。。
查看>>
第二章-递归与分治策略
查看>>
快速排查SQL服务器阻塞语句
查看>>
推荐系统常用数据集
查看>>
stack
查看>>
spring-boot+nginx+tomcat+ssl配置笔记
查看>>