日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

C#基于自定義事件EventArgs實現發布訂閱模式_C#教程

作者:.NET開發菜鳥 ? 更新時間: 2022-06-28 編程語言

一、事件參數

    //事件參數
    class CustomEventArgs:EventArgs
    {
        public CustomEventArgs( string message)
        {
            Message = message;
        }
        public string Message { get; set; }
    }

二、事件發布者

    //事件發布者:事件的定義和調用,觸發事件也可以寫在這里面
    class Publisher
    {
        public event EventHandler<CustomEventArgs> CustomEvent;

        public void DoSomething()
        {
            //調用之前可以在這里寫一些其他的東西

            //
            OnCustomEvent(new CustomEventArgs("我是事件參數"));
        }

        //在受保護的虛方法中包裝事件的調用 ,這樣就允許派生類重寫調用行為
        protected virtual void OnCustomEvent(CustomEventArgs e)
        {
            CustomEvent?.Invoke(this, e);
        }
    }

三、事件訂閱者

    //事件訂閱者:事件方法編寫和訂閱功能
    class Subscriber
    {
        private readonly string Str;
        ////訂閱的動作要在這里面了,所以才要傳過來發布者
        public Subscriber( string str,Publisher publisher)
        {
            Str = str;
            //訂閱事件
            publisher.CustomEvent += HanderCustomEvent;
        }

        private void HanderCustomEvent(object sender, CustomEventArgs e)
        {
            //在這里做想做的事件
            Console.WriteLine($"發布者:{sender.GetType()},訂閱者:{Str},參數是:{e.Message}");
        }
    }

    //事件訂閱者:事件方法編寫和訂閱功能
    class Subscriber2
    {
        private readonly string Str;
        ////訂閱的動作要在這里面了,所以才要傳過來發布者
        public Subscriber2(string str, Publisher publisher)
        {
            Str = str;
            //訂閱事件
            publisher.CustomEvent += HanderCustomEvent;
        }

        private void HanderCustomEvent(object sender, CustomEventArgs e)
        {
            //在這里做想做的事件
            Console.WriteLine($"發布者:{sender.GetType()},訂閱者:{Str},參數是:{e.Message}");
        }
    }

四、調用事件

        static void Main(string[] args)
        {
            Publisher publisher = new Publisher();
            Subscriber subscriber1 = new Subscriber("subscriber1", publisher);
            Subscriber2 subscriber2 = new Subscriber2("subscriber2", publisher);
            //調用引發事件的方法
            publisher.DoSomething();

            Console.ReadKey();
        }

原文鏈接:https://www.cnblogs.com/wml-it/p/16045003.html

欄目分類
最近更新