Синтаксис:
Используется csharp
using System;
public delegate void EventDelegate<TData>(Event<TData> data);
public struct Event<TData>
{
public TData data;
}
static public class EventDispatcher<EventType>
{
static public event Action<Event<EventType>> OnEvent;
static public void Broadcast(EventType data)
{
if (OnEvent != null)
OnEvent(new Event<EventType> {data = data});
}
}
static public class EventDispatcherExt
{
static public void Broadcast<T>(this T data)
{
EventDispatcher<T>.Broadcast(data);
}
}
public delegate void EventDelegate<TData>(Event<TData> data);
public struct Event<TData>
{
public TData data;
}
static public class EventDispatcher<EventType>
{
static public event Action<Event<EventType>> OnEvent;
static public void Broadcast(EventType data)
{
if (OnEvent != null)
OnEvent(new Event<EventType> {data = data});
}
}
static public class EventDispatcherExt
{
static public void Broadcast<T>(this T data)
{
EventDispatcher<T>.Broadcast(data);
}
}
ну и пример использования:
Синтаксис:
Используется csharp
public class Player
{
public struct OnPlayerDiedEvent
{
public PlayerInfo player;
}
public Player()
{
EventDispatcher<OnPlayerDiedEvent>.OnEvent += OnSomePlayerDied;
}
void OnSomePlayerDied (Event<OnPlayerDiedEvent> obj)
{
}
public void OnDie()
{
new OnPlayerDiedEvent() { player = this }.Broadcast();
}
}
{
public struct OnPlayerDiedEvent
{
public PlayerInfo player;
}
public Player()
{
EventDispatcher<OnPlayerDiedEvent>.OnEvent += OnSomePlayerDied;
}
void OnSomePlayerDied (Event<OnPlayerDiedEvent> obj)
{
}
public void OnDie()
{
new OnPlayerDiedEvent() { player = this }.Broadcast();
}
}
В большенстве случаев помогает избавится от лишних зависимостей в коде. Пользуйтесь на здоровье)