Подтвердить что ты не робот

События С# без аргументов. Как обращаться с ними?

В настоящее время я работаю над системой меню для игры, и у меня есть стандартная иерархия для экранов и элементов экрана. (Экраны содержат некоторую коллекцию элементов экрана). Я хотел бы, чтобы элементы экрана отправляли событие в класс экрана, чтобы объявить, что оно выбрано. Однако в этом случае мне не нужны аргументы о событиях. Я не уверен, какой синтаксис должен создать событие без каких-либо аргументов. Я нашел решение, которое передает индекс игрока в качестве аргумента события. (Моя игра строго однопользовательская, так что это необязательно.)

public event EventHandler<PlayerIndexEventArgs> Selected;

^ - Как это событие объявляется, где PlayerIndexEventArgs наследуется от EventArgs. Можно ли опустить PlayerIndexEventArgs или использовать тип по умолчанию для отправки аргументов? (Может быть, только базовый класс EventArgs?)

4b9b3361

Ответ 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. Если код не поможет вам понять, как это сделать в любом случае.