Использует общий класс DataEventArgs<TData>
, а не объявляет и использует собственный класс наследуемого класса EventArgs, в объявлении события, является нарушением конвенции "шаблон".Net Event? Или в некоторых случаях считается плохой практикой?
(Соглашение об именовании имен args - это использование имени события и добавление постфикса "EventArgs". Использование DataEventArgs<TData>
исключает имя события, хотя оно показывает тип передаваемых данных.)
Возможно, вы можете утверждать, что общий класс DataEventArgs является закрытым для расширений, например добавлением другого свойства, если вы не можете изменить класс, который вы используете для TData.
Более подробное объяснение:
При объявлении стандартного делегирования делегата, который включает некоторые данные, я понимаю, что стандартное событие "шаблон" означает объявить его с помощью общего делегата EventHandler:
public event EventHandler<SomethingHappendEventArgs> SomethingHappend;
Если конкретный SomethingHappendEventArgs
объявлен чем-то вдоль строк
public class SomethingHappendEventArgs : EventArgs
{
public SomeDataType Value { get; private set; }
public SomethingHappendEventArgs(SomeDataType data)
{
this.Value = data;
}
}
При поиске по сайту я заметил, что существует несколько пространств имен Microsoft, которые поставляют общий класс DataEventArgs (включая Microsoft.Practices.Prism.Events). Однако я нигде не мог найти никаких рекомендаций или условных указаний о том, когда использовать это вместо настраиваемого класса данных событий, например SomethingHappendEventArgs или наоборот.
Итак, если есть одна часть данных, которую я хочу включить в данные события, есть ли какие-то причины, по которым я должен использовать настраиваемые классы данных событий, например SomethingHappendEventArgs, вместо объявления таких событий?
public event EventHandler<DataEventArgs<SomeDataType>> SomethingHappend;
где общий DataEventArgs
может быть объявлен примерно так:
public class DataEventArgs<TData> : EventArgs
{
public TData Value { get; private set; }
public DataEventArgs(TData value)
{
this.Value = value;
}
}