У меня есть несколько пользовательских событий, на которые класс может подписаться или не подписаться.
Action<Game1, MoveEventArgs> MoveEvent;
Action<Game1, InitializeEventArgs> InitializeEvent;
Action<Game1, DrawEventArgs> DrawEvent;
Action<Game1, LoadContentEventArgs> LoadContentEvent;
Я бы хотел каким-то образом объединить их, чтобы можно было легко передавать их в другие функции.Например, в списке или словаре.
Я предложил два решения.Во-первых, нужно изменить объявления событий с:
Action<Game1, InitializeEventArgs> InitializeEvent;
public virtual void Initialize(object o, InitializeEventArgs e) { }
на:
Action<Game1, EventArgs> InitializeEvent;
public virtual void Initialize(object o, EventArgs e)
{
InitializeEventArgs initializeEventArgs = (InitializeEventArgs)e;
}
Это позволит мне создавать структуры данных с использованием типа Action<Game1, EventArgs>
, но будет означать, что я потеряюнабирая методы подписчика событий, возможно, приводящие к исключениям приведения.
Второй - создание структуры с моими событиями, в которой я могу передавать классы / методы.
public struct Events
{
public Action<Game1, MoveEventArgs> MoveEvent { get; set; }
public Action<Game1, InitializeEventArgs> InitializeEvent { get; set; }
public Action<Game1, DrawEventArgs> DrawEvent { get; set; }
public Action<Game1, LoadContentEventArgs> LoadContentEvent { get; set; }
}
Что я могу затемиспользуйте для подписки на событие в соответствующем классе / методе, используя:
Events.InitializeEvent += Initialize;
Это кажется хорошим, но потенциально может стать очень большой структурой, особенно если бы у меня было большое числособытий.
Итак, я думаю, что мой главный вопрос: есть ли у кого-нибудь улучшения для этих идей или что-то другое?