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(); };
Таким образом, вы даете понять, что ваш "настоящий" метод не заботится об отправителях или аргументах событий, и вам не нужно указывать "фиктивные" значения при его вызове.