using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EventManager
{
public static Dictionary<EventType, Delegate> MyEvent = new Dictionary<EventType, Delegate>();
public static void OnListenerAdding(EventType eventType, Delegate action)
{
//判断委托如果不存在就创建一个
if (!MyEvent.ContainsKey(eventType))
{
MyEvent.Add(eventType, null);
}
Delegate oldAction = MyEvent[eventType];
if (oldAction != null && oldAction.GetType() != action.GetType())
{
throw new Exception(string.Format("尝试为事件{0}添加不同类型的委托,当前事件所对应的委托是{1},要添加的委托类型为{2}", eventType, oldAction.GetType(), action.GetType()));
}
}
public static void OnListenerRemoving(EventType eventType, Delegate action)
{
if (MyEvent.ContainsKey(eventType))
{
Delegate oldAction = MyEvent[eventType];
if (oldAction == null)
{
throw new Exception(string.Format("移除监听错误:事件{0}没有对应的委托", eventType));
}
else if (oldAction.GetType() != action.GetType())
{
throw new Exception(string.Format("移除监听错误:尝试为事件{0}移除不同类型的委托,当前委托类型为{1},要移除的委托类型为{2}", eventType, oldAction.GetType(), action.GetType()));
}
}
else
{
throw new Exception(string.Format("移除监听错误:没有事件码{0}", eventType));
}
}
private static void OnListenerRemoved(EventType eventType)
{
if (MyEvent[eventType] == null)
{
My
Unity事件的监听与广播系统Delegate
最新推荐文章于 2023-05-07 18:00:01 发布