zoukankan      html  css  js  c++  java
  • 步步为营-28-事件本质

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

    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 AssembliesMicrosoftFramework.NETFrameworkv4.5mscorlib.dll
    #endregion
    
    using 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

    反编译:

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

  • 相关阅读:
    EF Core 执行SQL语句和存储过程
    SQL优化之SELECT COUNT(*)
    SQL优化之SQL 进阶技巧(下)
    SQL优化之SQL 进阶技巧(上)
    旅游攻略:重庆红色之旅
    ASP.NET Core在CentOS上的最小化部署实践
    Windows平台部署Asp.Net Core应用
    kali 免杀工具shellter安装以及使用
    Ubuntu Server18.04配置静态IP
    Centos7系统配置静态IP
  • 原文地址:https://www.cnblogs.com/YK2012/p/6744345.html
Copyright © 2011-2022 走看看