2013-05-02 3 views
2

У меня есть методEventArgs.Empty разъяснение?

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

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

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

Item_Click(null, null)

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

мышь парит над ней показывает:

enter image description here

Подождите ... Что?

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

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

  • Я что-то пропустил?

ответ

3

Это просто плохая документация, сочетающая две концепции в одном слове. 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(); }; 

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

+0

@RoyiNamir: Абсолютно нет. KeyPress - это событие, а не экземпляр делегата. –

+0

Jon, но не событие - это просто ключевое слово accesor для делегата? Так что подписка на событие похожа на подписку на делегата, но с дополнительными ограничениями (+ = vs = и т. Д.) –

+0

@RoyiNamir: Нет, это не так. Это как разница между свойством и полем. Пожалуйста, прочитайте http://csharpindepth.com/Articles/Chapter2/Events.aspx –