C#事件使用+=-=使用起来是很方便的,但是却不能整体清空所有事件。比如一个常见的操作,打开界面注册监听事件,关闭界面需要把所有的事件清空了,这要在写一堆-=操作,如果漏清空的话肯定会造成隐患,如果在lua里这个很容易,但是C#却不行。所以我想了个办法,对Action和Func进行一次包装,就可以解决这个问题了。
这里我只封装了两个参数,大家可以继续拓展新的参数,我在项目里一共拓展了5个参数,完全够用了。
usingSystem;
usingSystem.Collections.Generic;
publicclassActionManager
{
Dictionary
使用方法如下,注意我们自己封装的事件必须要new。
usingUnityEngine;
publicclassMain:MonoBehaviour
{
NewActionMyAction=newNewAction();//事件需要new
NewFuncMyFunc=newNewFunc();//事件需要new
ActionManagerm_ActionManager=newActionManager();
publicvoidMyFunction(stringstr)
{
Debug.Log("MyFunction"+str);
}
publicintMyFunction1(stringstr)
{
Debug.Log("MyFunction1"+str);
return1;
}
privatevoidOnGUI()
{
if(GUILayout.Button("注册事件"))
{
m_ActionManager.RegAction(MyAction,MyFunction);
m_ActionManager.RegAction(MyFunc,MyFunction1);
}
if(GUILayout.Button("发事件"))
{
MyAction.Invoke("参数1");
MyFunc.Invoke("参数2");
}
if(GUILayout.Button("清空"))
{
m_ActionManager.Clear();
}
}
}
事件管理器可以放在UI或者模块的基类中,这样子类在写的时候可以直接this.RegAction注册事件,关闭界面或者卸载模块的时候由父类调用Clear方法,这样业务逻辑就不需要在写-=这样的代码了。
总结
到此这篇关于C#事件管理器如何清空所有监听的文章就介绍到这了,更多相关C#事件管理器清空所有监听内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!