Это просто плохая документация, сочетающая две концепции в одном слове. latest documentation кажется немного лучше:
Предоставляет значение для использования с событиями, которые не имеют данных о событиях.
Беда в том, что «событие» имеет два отдельных значения:
- Событие, которое вы можете подписаться на
- Единый «экземпляр» этого события воспитываются
Например, было бы неразумно говорить: «Подпишитесь на событие 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(); };
Таким образом, вы сделаете это ясно, что ваш «реальный» метод не заботится об отправителе или событий аргументах, и вам не нужно, чтобы обеспечить «фиктивные» значения при вызове.
@RoyiNamir: Абсолютно нет. KeyPress - это событие, а не экземпляр делегата. –
Jon, но не событие - это просто ключевое слово accesor для делегата? Так что подписка на событие похожа на подписку на делегата, но с дополнительными ограничениями (+ = vs = и т. Д.) –
@RoyiNamir: Нет, это не так. Это как разница между свойством и полем. Пожалуйста, прочитайте http://csharpindepth.com/Articles/Chapter2/Events.aspx –