C# 이벤트 디스패치
22897 단어 C#
using System;
using System.Collections;
using System.Collections.Generic;
public class EventManager
{
private static Dictionary<EventType, Delegate> EventDic = new Dictionary<EventType, Delegate>();
#region
//none parameter
public static void AddListenr(EventType eventType, DelegateCallBack delegateCallBack)
{
if (!EventDic.ContainsKey(eventType))
{
EventDic[eventType] = delegateCallBack;
}
else
{
EventDic[eventType] = (DelegateCallBack)EventDic[eventType] + delegateCallBack;
}
}
//one parameter
public static void AddListenr<T>(EventType eventType, DelegateCallBack<T> delegateCallBack)
{
if (!EventDic.ContainsKey(eventType))
{
EventDic[eventType] = delegateCallBack;
}
else
{
EventDic[eventType] = (DelegateCallBack<T>)EventDic[eventType] + delegateCallBack;
}
}
//two parameter
public static void AddListenr<T, X>(EventType eventType, DelegateCallBack<T,X> delegateCallBack)
{
if (!EventDic.ContainsKey(eventType))
{
EventDic[eventType] = delegateCallBack;
}
else
{
EventDic[eventType] = (DelegateCallBack<T,X>)EventDic[eventType] + delegateCallBack;
}
}
#endregion
#region
//none parameter
public static void RemoveListener(EventType eventType, DelegateCallBack delegateCallBack)
{
if (EventDic.ContainsKey(eventType))
{
//
EventDic[eventType] = (DelegateCallBack)EventDic[eventType] - delegateCallBack;
}
}
//one parameter
public static void RemoveListener<T>(EventType eventType, DelegateCallBack<T> delegateCallBack)
{
if (EventDic.ContainsKey(eventType))
{
//
EventDic[eventType] = (DelegateCallBack<T>)EventDic[eventType] - delegateCallBack;
}
}
//two parameter
public static void RemoveListener<T,X>(EventType eventType, DelegateCallBack<T,X> delegateCallBack)
{
if (EventDic.ContainsKey(eventType))
{
//
EventDic[eventType] = (DelegateCallBack<T,X>)EventDic[eventType] - delegateCallBack;
}
}
#endregion
#region
//none parameter
public static void BrocastEvent(EventType eventType)
{
if (EventDic.ContainsKey(eventType))
{
DelegateCallBack delegateCallBack = (DelegateCallBack)EventDic[eventType];
delegateCallBack();
}
}
//one parameter
public static void BrocastEvent<T>(EventType eventType,T arg1)
{
if (EventDic.ContainsKey(eventType))
{
DelegateCallBack<T> delegateCallBack = (DelegateCallBack<T>)EventDic[eventType];
delegateCallBack(arg1);
}
}
//two parameter
public static void BrocastEvent<T,X>(EventType eventType, T arg1,X arg2)
{
if (EventDic.ContainsKey(eventType))
{
DelegateCallBack<T,X> delegateCallBack = (DelegateCallBack<T,X>)EventDic[eventType];
delegateCallBack(arg1,arg2);
}
}
#endregion
}
#region
public delegate void DelegateCallBack();
public delegate void DelegateCallBack<T>(T arg1);
public delegate void DelegateCallBack<T,X>(T arg1,X arg2);
public delegate void DelegateCallBack<T,X,Y>(T arg1,X arg2,Y arg3);
public delegate void DelegateCallBack<T,X,Y,Z>(T arg1,X arg2,Y arg3,Z arg4);
#endregion
#region
public enum EventType
{
eventType1,
eventType2,
eventType3,
}
#endregion
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
WebView2를 Visual Studio 2017 Express에서 사용할 수 있을 때까지Evergreen .Net Framework SDK 4.8 VisualStudio2017에서 NuGet을 사용하기 때문에 패키지 관리 방법을 packages.config 대신 PackageReference를 사용해야...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.