C # Typeresticted делегат с шаблоном - PullRequest
1 голос
/ 03 апреля 2009

.net EventHandler ограничен шаблонами, которые наследуются от EventArgs. Как это сделать? Реализация (Полученная ссылка в vs) показывает следующий код:

[Serializable]
public delegate void EventHandler<TEventArgs>(object sender, TEventArgs e);

Но я думаю, что TEventArgs - это просто имя. Как я могу написать типизированный делегат, ограничивающий все, что наследуется от MyClass?

1 Ответ

5 голосов
/ 03 апреля 2009

TEventArgs - это параметр общего типа - но он имеет ограничение. Фактическая подпись:

[Serializable]
public delegate void EventHandler<TEventArgs>(object sender, TEventArgs e)
    where TEventArgs : EventArgs

Бит "where TEventArgs : EventArgs" является ограничением типа, что означает, что вы можете предоставить только аргумент типа для TEventArgs, который является EventArgs или производным классом.

По сути, это просто "обычные" обобщения C #, которые применяются только к объявлению делегата.

...