Как группировать пользовательские события - PullRequest
0 голосов
/ 10 июня 2019

У меня есть несколько пользовательских событий, на которые класс может подписаться или не подписаться.

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;

Это кажется хорошим, но потенциально может стать очень большой структурой, особенно если бы у меня было большое числособытий.

Итак, я думаю, что мой главный вопрос: есть ли у кого-нибудь улучшения для этих идей или что-то другое?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...