2015-03-16 3 views
3

У меня есть довольно основные события:Правильное использование EventArgs

public event EventHandler OnAborted; 

Все, что мне нужно сделать, это вызвать это событие, я даже не нужно предоставлять какие-либо аргументы, так что нет ничего сложного. Я запутался в правильном использовании аргумента EventArgs.

можно использовать:

if (OnAborted != null) 
    OnAborted(this, EventArgs.Empty); 

Или я могу даже использовать:

if (OnAborted != null) 
    OnAborted(this, new EventArgs()); 

В обоих случаях, EventArgs, кажется, довольно бесполезно, я не могу даже представить какие-либо аргументы (не то, что Мне нужно, но это не главное).

Какое правильное использование EventArgs? Должен ли я создать пользовательский класс, который наследует EventArgs?

+1

Если вы не передаете какие-либо данные, просто используйте «EventArgs.Empty». Преимущество 'EventArgs.Empty' над« новыми EventArgs »заключается в том, что он не требует выделения и создания нового объекта в куче. – Dai

+0

@ Дай Это полезно знать, спасибо. Имеет ли EventArgs какую-либо другую цель помимо базового класса для пользовательских EventArgs? –

ответ

1

Использование EventArgs.Empty не создает новый объект и выделяет его в кучу. Более того, EventArgs.Empty является экземпляром Null Object Pattern. Наличие объекта, представляющего «нет значения», чтобы избежать проверки нулевого значения при его использовании.

Чтобы добавить больше, когда вы должны использовать EventArgs или ваш собственный класс, здесь есть MSDN руководство по Design Event:

Рассматривают с помощью производного класса System.EventArgs в качестве аргумента события, если вы абсолютно уверены, что событию никогда не понадобится переносить какие-либо данные в метод обработки событий, и в этом случае вы можете напрямую использовать тип System.EventArgs.

Если вы определяете событие, которое принимает экземпляр EventArgs вместо определяемого производного класса, вы не можете добавлять данные к событию в более поздние версии. По этой причине предпочтительнее создать пустой производный класс EventArgs. Это позволяет добавлять данные к событию в более поздние версии без внесения изменений.