Иногда у вас есть обобщенная логика, которая требует функциональности от нескольких типов одновременно.Например, мне когда-то приходилось выполнять ту же логику для элементов управления Button
, LinkButton
и ImageButton
из ASP.NET.Каждый из них по отдельности происходит от WebControl
и реализует интерфейс IButtonControl
;нет базового класса, который их объединяет.
Мне нужно было связать обработчик с событием Click
, предоставляемым IButtonControl
, и установить обработчик кликов клиента через коллекцию Attributes
, которая доступнана WebControl
.Чтобы включить метод, который выполняет обе функции, я выбрал только несколько ограничений типа:
private T CreateButton<T>() where T : WebControl, IButtonControl, new()
{
var button = new T();
button.Click += ...;
button.Attributes["onClick"] = ...;
return button;
}