1. 程式人生 > >事件的學習例子

事件的學習例子

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("音樂播放完畢!");
        }

    }
}