Если вы не читали предыдущую статью, то рекомендую начать с неё (Обобщения часть 1). В этой статье рассмотрена работа с несколькими обобщениями, ограничениями обобщений.
Использование нескольких обобщений.
Если возникнет ситуация, когда необходимо реализовать больше одного обобщения, то как с ними работать? Для реализации нескольких обобщений достаточно вписать их через запятую в скобках <>.
Далее с ними можно работать также, как и с одиночным обобщением.
Ограничение обобщений
Для чего ограничения? Иногда возникает ситуация, когда необходимо воспользоваться функционалом типа данных. Но как это сделать, когда класс не знает о том, что за тип данных в обобщении? Для этого и существуют ограничения.
На рисунке выше представлен пример, когда ограничение необходимо. Нужно, чтобы тип T обязательно имел конструктор, иначе сервис не будет работать (внутри реализации dbservice есть функционал, которому требуется возможность создать переменную через конструктор).
Как ограничения записываются?
После указания класса (интерфейса) с обобщением/обобщениями пишется ключевое слово where, далее обобщение : условие.
Условиями могут являться : классы, интерфейсы, структуры, указание возможности создать класс/тип (new(), class, struct).
Таким же образом указываются ограничения и для методов.
Телеграмм канал: https://t.me/dotnetreview