Я стараюсь максимально придерживаться дизайна фреймворка. Рекомендации даже при разработке библиотек классов, предназначенных только для внутреннего использования.
В какой-то степени это облегчает мою жизнь, поскольку я использую анализ кода для автоматизации проверки мест, где я не могу использовать передовой опыт.
Но вот случай, когда я чувствую себя очень вынужденным просто игнорировать рекомендации.
Поскольку ограничение EventArgs было удалено из EventHandler в .NET 4, зачем кому-то использовать класс, производный от EventArgs (как указано в https://msdn.microsoft.com/en-us/library/ms229011).(v=vs.110).aspx) в настоящее время вместо используя желаемый тип данных напрямую и избегая затрат на выделение другого объекта и встраивание в него нужных данных?
Например, нужно написать следующее:
public class ExceptionEventArgs : EventArgs
{
private readonly Exception _exception;
public ExceptionEventArgs(Exception exception)
{
_exception = exception;
}
public Exception Exception
{
get
{
return _exception;
}
}
}
public event EventHandler<ExceptionEventArgs>;
гораздо более подробный, поскольку требует дополнительного распределения вместо:
public event EventHandler<Exception>;
Пару недель назад я даже создал общий EventArgs для использования в другом классе, но мне кажется глупым делать это только ради того, чтобы придерживаться рекомендаций.
public class EventArgs<T> : EventArgs
{
private readonly T _data;
public EventArgs(T data)
{
_data = data;
}
public T Data
{
get
{
return _data;
}
}
}
Итак, есть ли минусы использования
EventHandler<NotAnEventArgsDerivedClass>
для классов, предназначенных только для внутреннего* использования?
* Под этим я действительно подразумеваю использование на продукте, состоящем из нескольких сборок, каждый из которых предназначен для использования исключительно самим продуктом.
EventHandler<T>
достаточно хорошо. - person SLaks   schedule 09.04.2016