• 事件的学习例子


    1.利用委托实现事件例子

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading;
    using System.Threading.Tasks;
    
    namespace ConsoleApplication4
    {
        class Program
        {
            static void Main(string[] args)
            {
                MusicPlayer mp3 = new MusicPlayer();
                mp3.AfterStartedPlay = () =>
                {
                    Console.WriteLine("加载歌词!!!");
    
                    Console.WriteLine("加载动感背景");
                };
                mp3.StartPlay();//播放音乐
                mp3.BeforeMusicStop = ()=>{
                Console.WriteLine("删除歌词!!!!");
                    Console.WriteLine("停止动感背景!!!");
                
                  };
                mp3.EndMusic();//停止音乐
              
                
                //mp3.AfterStartedPlay();
                //mp3.BeforeMusicStop();//当把播放音乐mp3.StartPlay();和停止播放音乐mp3.EndMusic();注释,还是可以调用AfterStartedPlay();BeforeMusicStop();显然是不合理的。
                
                
                Console.WriteLine("ok");
                Console.ReadKey();
    
    
            }
    
    
    
        }
    
        class MusicPlayer {
            public Action AfterStartedPlay;//定义一个AfterStartedPlay委托
            public Action BeforeMusicStop;//定义一个BeforeMusicStop委托
            private void PlayMusic() {
            
                Console.WriteLine("开始播放音乐。。。。。");
            }
    
    
            public void StartPlay() {
                
             PlayMusic();
                if (AfterStartedPlay != null) {
    
                    AfterStartedPlay();//播放音乐后要做的事
                }
                Thread.Sleep(2000);
            
            }
            public void EndMusic() {
                if (BeforeMusicStop != null) {
    
                    BeforeMusicStop();//播放音乐完之前要做的事
                }
                Console.WriteLine("音乐播放完毕!");
            }
        
        }
    }

    2.使用事件实现

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading;
    using System.Threading.Tasks;
    
    namespace ConsoleApplication5
    {
        class Program
        {
            static void Main(string[] args)
            {
                MusicPlayer mp3 = new MusicPlayer();
                mp3.AfterStartedPlay += new Action(AfterStartedPlay);
               mp3.StartPlay();
                mp3.BeforeMusicStop += new Action(BeforeMusicStop); 
                //事件在外部不能直接调用
                //事件只能在定义事件的类的内部来触发
                //mp3.AfterStartedPlay();//报错
               // mp3.BeforeMusicStop();//报错
                mp3.EndMusic();
                Console.WriteLine("ok");
                Console.ReadKey();
    
    
            }
            static void AfterStartedPlay() {
    
                Console.WriteLine("加载歌词!!!");
    
                Console.WriteLine("加载动感背景");
            }
    
            static void BeforeMusicStop() {
                Console.WriteLine("删除歌词!!!!");
                Console.WriteLine("停止动感背景!!!");
            
            }
        }
    
        class MusicPlayer
        {
            public event Action AfterStartedPlay;//声明事件与声明委托变量特别像,就是在声明委托变量的前面加一个event关键字
            public event Action BeforeMusicStop;//当加了event关键字后,委托变量就变成了一个事件。
            private void PlayMusic()
            {
    
                Console.WriteLine("开始播放音乐。。。。。");
            }
    
    
            public void StartPlay()
            {
    
                PlayMusic();
                //事件的触发和调用的时候与委托变量的使用一模一样
                if (AfterStartedPlay != null)
                {
    
                    AfterStartedPlay();
                }
                Thread.Sleep(2000);
    
            }
            public void EndMusic()
            {
                if (BeforeMusicStop != null)
                {
    
                    BeforeMusicStop();
                }
                Console.WriteLine("音乐播放完毕!");
            }
    
        }
    }
  • 相关阅读:
    在归并排序中对小数组采用插入排序实现代码
    PAT 1032. Sharing
    1031. Hello World for U
    PAT 1030. Travel Plan
    PAT 1029. Median
    PAT 1028. List Sorting
    PAT 1027. Colors in Mars
    PAT 1026. Table Tennis
    PAT 1025. PAT Ranking
    Several Important Commands in GMT
  • 原文地址:https://www.cnblogs.com/Vinkong/p/9983990.html
Copyright © 2020-2023  润新知