c#回調函數 再探——事件Event

1、先定義一個觸發的類 :triggerClass
這個類最主要用途是負責和EventArgs()給綁定起來。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 回調函數的應用
{
    //事件的監控者
    public class triggerClass
    {
        //1.委託一個事件監控
        public delegate void TriggerEventHandle(object sender, EventArgs e);
        //2.申明這個出發事件
        public event TriggerEventHandle trigger;
        //3.觸發的邏輯(函數)
        public void TMedthod()
        {
            if (this.trigger !=null)
            {
                Console.WriteLine("這個事件觸發了!");
                Console.WriteLine("通過new EventArgs(),已將觸發告知Hoster監控者!");
                this.trigger(this,new EventArgs());//綁定觸發的事件(把觸發和監控條件通過new EventArgs()方法關聯起來)
            }
        }

    }
}

2、再定義一個監管者類:Hoster
顧名思義就是觸發後,回造成什麼樣的結果。即爲回調了。

// An highlighted block
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 回調函數的應用
{
    
    //事件的接受者
    public class Hoster
    {

        //觸發後的反應處理情況(處理函數)
         void GetTriggMedthod(object sender, EventArgs e)
        {

            Console.WriteLine("我得到了觸發,我的結果是**********");

        }
        //用構造函數取註冊該事件
        public  Hoster(triggerClass triggInstance )
        {
            triggInstance.trigger += new triggerClass.TriggerEventHandle(GetTriggMedthod);
        }


    }
}

3、最後在主邏輯上觸發這個所謂的**“事件”**:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 回調函數的應用
{
    class Program
    {

        //主邏輯上完成觸發流程
        static void Main(string[] args)
        {
            triggerClass tr1 = new triggerClass();
            Hoster host = new Hoster(tr1);

            int index = 0;
            for (int i = 0; i < 1000; i++)
            {
                index = i;
                while (index == 100)
                {
                    Console.WriteLine("條件到達,開始觸發");
                    tr1.TMedthod();
                    index = index + 1;
                    Console.ReadKey();
                }
            }
        }
    }
}

最後說一下,一直困擾我很久不明白的地方。
我一直不理解這個事件及機制,傳來傳去就搞暈了。其實只要這樣大概理解,就很簡單。關係更深層次的不做探究。小弟能力有限。
打比方:有三個角色,角色一,個爲“傳遞消息者”跑腿的。角色二、EventArgs(),這個就是理解爲消息的管道、途徑等。角色三,Hoster監管者,就是得到消息後,做出什麼樣的反應。
角色一:委託一個事件、申明事件等都是爲了要將觸發的內容綁定在EventArgs()上。
角色二:負責傳遞消息。
角色三:通過EventArgs()上的消息,做出反應。
最後show一下結果:
在這裏插入圖片描述
2020-06-21

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章