EventArgs.Empty разъяснение?

У меня есть метод

protected void Item_Click(object sender, EventArgs e)
{     }

Я хотел, чтобы этот другой код вызывал этот метод. (на самом деле не нужно sender ни e)

что-то вроде:

Item_Click(null, null)

Но потом я вспомнил, что могу использовать EventArgs.Empty вместо.

Мышь, зависшая над ним, показывает:

Чего ждать?

EventArgs.Empty представляет событие? это не. он должен представлять пустой аргумент, а не событие.

как string.empty представляют пустую строку.

  • Я что-то здесь упускаю?

1 ответ

Решение

Это просто плохая документация, объединяющая два понятия в одном слове. Последняя документация кажется немного лучше:

Предоставляет значение для использования с событиями, которые не имеют данных о событиях.

Проблема в том, что "событие" имеет два отдельных значения:

  • Событие, на которое вы можете подписаться
  • Единственный "экземпляр" этого события поднимается

Например, было бы неразумно сказать: "Подписаться на KeyPress событие для получения событий, связанных с клавиатурой. "

(Слово "делегат" так же плохо, используется для описания типов делегатов и их экземпляров.)

Это все прискорбно, но будьте уверены, что у вас есть правильная идея.

Кроме того, если вы хотите вызвать метод, отличный от того, когда вызывается событие, я бы потенциально разделил его на два метода:

// This only exists to handle the event, delegating to the DoSomething method
private void HandleItemClicked(object sender, EventArgs e)
{
    DoSomething();
}

// This can be called from other code, and should be named according to what it
// does.
private void DoSomething()
{
}

Если вы подписываетесь на событие вручную, вам даже не нужен дополнительный метод:

item.Click += delegate { DoSomething(); };

Таким образом, вы даете понять, что ваш "настоящий" метод не заботится об отправителях или аргументах событий, и вам не нужно указывать "фиктивные" значения при его вызове.

Другие вопросы по тегам