Правильное использование EventArgs

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

public event EventHandler OnAborted;

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

Я могу использовать:

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

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

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

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

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


person Mike Eason    schedule 16.03.2015    source источник
comment
Если вы не передаете никаких данных, просто используйте EventArgs.Empty. Преимущество EventArgs.Empty перед new EventArgs заключается в том, что он не выделяет без необходимости и не создает новый объект в куче.   -  person Dai    schedule 16.03.2015
comment
@Dai Это полезно знать, спасибо. Есть ли у EventArgs какое-либо другое назначение, помимо того, что он является базовым классом для пользовательских EventArgs?   -  person Mike Eason    schedule 16.03.2015


Ответы (1)


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

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

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

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

person Tomasz Jaskuλa    schedule 16.03.2015