C#的监听事件

前段时间发现需要对特定情况进行回调,便试着写了下面的监听事件
这里是对自己需要的监听事件的添加

	using System;
//这里随便建了一个类
class Map
{
    int m_id;
}
class MyEventArgs : EventArgs
{
    //声明一个变量(此处是使用的是自己建的类型)
    Map m_map;
    //写一个自己的事件参数
    public MyEventArgs(Map map)
    {
        this.m_map = map;
    }
    public Map Map { get { return m_map; } }
}
class CheckMapTrigger
{
    //定义一个委托类型的事件
    public event EventHandler<MyEventArgs> OnInput;
    public void WaitTrigger(Map map)
    {
        if (map != null)
        {
            OnInput(this, new MyEventArgs(map));
        }
    }
}

创建监听事件的位置

using System;
CheckChildOut m_checkChildOut = new CheckChildOut();
        Action<MyEventArgs> action;
        public void Add(Action<MyEventArgs> getAction)
        {
            m_checkChildOut.OnInput += M_OnInput;
            action = getAction;
        }
        public void Rmv()
        {
            m_checkChildOut.OnInput -= M_OnInput;
        }
        private void M_OnInput(object sender, MyEventArgs e)
        {
            action(e);
        }
        public void ChangeHomePageShow(cfg.map map)
        {
            m_checkChildOut.WaitCfg(map);
        }

为监听事件的使用创建的方法

class CheckEvent
{
    //简单单例
    private CheckEvent() { }
    private static CheckEvent instance = null;
    public static CheckEvent Inst()
    {
        if (instance == null)
        {
            instance = new CheckEvent();
        }
        return instance;
    }
    //创建监听
    CheckMapTrigger m_mapTrigger = new CheckMapTrigger();
    //声明回调
    Action<MyEventArgs> m_eventArgs;
    //添加回调
    public void Add(Action<MyEventArgs> getAction)
    {
        m_mapTrigger.OnInput += M_OnInput;
        m_eventArgs = getAction;
    }
    //删除回调
    public void Rmv()
    {
        m_mapTrigger.OnInput -= M_OnInput;
    }
    private void M_OnInput(object sender, MyEventArgs e)
    {
        m_eventArgs(e);
    }
    public void CallMap(Map map)
    {
        m_mapTrigger.WaitTrigger(map);
    }
}

对监听事件的数据处理的类的参考写法

class AddClass
{
    void Awake()
    {
        CheckEvent.Inst().Add((param) => { UseEvent(param); });
    }
    void Destory()
    {
        CheckEvent.Inst().Rmv();
    }
    //需要使用监听事件的对应方法
    void UseEvent(MyEventArgs myEventArgs)
    {
       //调用 myEventArgs.Map可以获得对应map数据
    }
}

监听事件传参的地方

class Use
{
    Map map;
    Button button;
    //列举调用方法
    void UseEvent()
    {
        button.onClick.AddListener(() => { CheckEvent.Inst().CallMap(map); });
    }
}

以上就是一个简单的监听事件的写作

你可能感兴趣的:(c#)