Net中事件的用法之一


1.事件與委托的關系

  委托是一種類型
  事件是委托的一個實例

事件中涉及兩種角色——事件發布者和事件訂閱者。 

  事件發布者: 觸發事件的對象稱為事件發布者。

     事件訂閱者: 捕獲事件並對其做出處理的對象稱為事件訂閱者。

2.事件的實例說明

namespace MyEvent
{
    //委托的聲明
    public delegate void DoSometing();
   
    /// <summary>
    ///  委托與事件的關系
    ///  委托是一種類型
    ///  事件是委托的一個實例
    /// </summary>
    public class MyEvent
    {
        public DoSometing doSomethingDelegate;//委托的一個變量
        public event DoSometing doSomethingEvent;//一個事件,就是委托的一個變量,加上了event關鍵字
        //事件的使用
        public void Invoke()
        {
            if (doSomethingEvent != null)
            {
                doSomethingEvent();
            }
        }
    }
}
namespace MyEvent
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("歡迎來到流星小子博客學習");
            MyEvent myEvent = new MyEvent();
           // myEvent.doSomethingEvent += new DoSometing(ShowSomething);
            myEvent.doSomethingEvent += ShowSomething;//為事件實例化
            myEvent.Invoke();//觸發事件
            Console.Read();
        }
        private static void ShowSomething()
        {
            Console.WriteLine("ShowSomething");
        }
    }
}

 3. 事件的發布者與訂閱者實例

//新郎官,充當事件發布者角色
    public class Bridegroom
    {
        //自定義委托
        public delegate void MarryHandler(string msg);
        //定義事件
        public event MarryHandler MarryEvent;

        //發布事件
        public void OnMarriageComing(string msg)
        {
            if(MarryEvent != null)
            {
                MarryEvent(msg);
            }
        }
    }

public class Friend
    {
        //屬性
        public string Name { get; set; }
        //構造函數
        public Friend(string name)
        {
            Name = name;
        }
        //事件處理函數,該函數需要符合 MarryHandler委托的定義
        public void SendMessage(string message)
        {
            //輸出通知信息
            Console.WriteLine(message);
            //對事件做出處理
            Console.WriteLine(this.Name + "收到了,到時候准時參加");
        }
    }
 static void Main(string[] args)
        {
            Bridegroom bridegroom = new Bridegroom();
            Friend friend1 = new Friend("張三");
            Friend friend2 = new Friend("李四");
            Friend friend3 = new Friend("王五");

            //使用 “+=” 來訂閱事件
            bridegroom.MarryEvent += new Bridegroom.MarryHandler(friend1.SendMessage);
            bridegroom.MarryEvent += friend2.SendMessage;

            //發出通知,此時只有訂閱了事件的對象才能收到通知
            bridegroom.OnMarriageComing("朋友門,我要結婚了,到時候准時參加婚禮!");
            Console.WriteLine("---------------------------------------------");

            //使用 “-=” 來取消事件訂閱,此時李四將收不到通知
            bridegroom.MarryEvent -= friend2.SendMessage;

            //使用 “+=” 來訂閱事件,此時王五可以收到通知
            bridegroom.MarryEvent += friend3.SendMessage;
            //發出通知
            bridegroom.OnMarriageComing("朋友門,我要結婚了,到時候准時參加婚禮!");
            Console.Read();
        }

 4. 輸出結果


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM