События С# без аргументов. Как обращаться с ними?
В настоящее время я работаю над системой меню для игры, и у меня есть стандартная иерархия для экранов и элементов экрана. (Экраны содержат некоторую коллекцию элементов экрана). Я хотел бы, чтобы элементы экрана отправляли событие в класс экрана, чтобы объявить, что оно выбрано. Однако в этом случае мне не нужны аргументы о событиях. Я не уверен, какой синтаксис должен создать событие без каких-либо аргументов. Я нашел решение, которое передает индекс игрока в качестве аргумента события. (Моя игра строго однопользовательская, так что это необязательно.)
public event EventHandler<PlayerIndexEventArgs> Selected;
^ - Как это событие объявляется, где PlayerIndexEventArgs наследуется от EventArgs. Можно ли опустить PlayerIndexEventArgs или использовать тип по умолчанию для отправки аргументов? (Может быть, только базовый класс EventArgs?)
Ответы
Ответ 1
Вы можете использовать делегаты Action. Это намного элегантнее, чем использование данных, которые вам никогда не понадобятся (я имею в виду EventArgs).
Здесь вы определяете события:
public event Action EventWithoutParams;
public event Action<int> EventWithIntParam;
И здесь вы запускаете события:
EventWithoutParams();
EventWithIntParam(123);
Вы можете найти всю необходимую информацию в Action или Действие < Т > .
Любое из этих событий может быть инициализировано делегатом no-op ... = delegate { };
, так что вам не нужно проверять значение null перед запуском события.
Ответ 2
Попробуйте:
public event EventHandler Selected;
затем позвонить..
Selected(null, EventArgs.Empty);
Таким образом, это определение события по умолчанию, и вам не нужно передавать какую-либо информацию, если вы этого не хотите.
Ответ 3
Вы можете просто написать:
public event EventHandler Selected;
Ответ 4
(Может быть, только базовый класс EventArgs?)
Вы должны сделать именно это.
В Документах MSDN EventArgs:
Этот класс не содержит данных о событиях; он используется событиями, которые не передают информацию о состоянии обработчику события при возникновении события.
Ответ 5
Идя по типу PlayerIndexEventArgs
, который вы упомянули, я предполагаю, что вы используете XNA, правильно? Если да, взгляните на образец Game State Management. Если код не поможет вам понять, как это сделать в любом случае.