Шаблоны. Звучит, как нечто очень далекое от программирования. Однако шаблоны являются крайне полезным инструментом. Фактически все динамические структуры в C# (динамические массивы, списки, очереди, стеки и пр) используют шаблонные методы. Также можно достаточно часто встретить и альтернативные названия такие как обобщенные типы, обобщения или generics.

Что такое шаблоны?

Предположим, необходимо разработать класс / метод, который работал бы с разными типами данных. Пока мы еще не знаем шаблонов, решением кажется создания отдельного метода для каждого типа данных. Другим решением может оказаться использование типа Object. Однако и подобный вариант крайне сомнителен: неудобен, небезопасен и нерационален с точки зрения использования памяти. Именно в данном случае следует использовать шаблоны. Синтаксис достаточно прост.

В данном случае метод DoAny может обработать любой переданный ему тип данных. Буква T в треугольных скобках говорит о шаблонности метода. Следует заметить, что может быть использован любой другой символ. Однако общепринятым считается именно символ T (template — шаблон). Далее, эта буква будет меняться на тип данных, используемый нами при вызове метода. Использование шаблонных методов так же достаточно просто.

В треугольных скобках указывается тип данных, который будет использоваться при выполнении метода. Однако следует заметить, что такая попытка вызова метода

приведет к ошибке.

Пример Generics.

Мы создали шаблонный класс. Теперь мы можем использовать любой тип данных, при использовании описанного класса. Создавая конкретный объект следует указать используемый тип данных. Так, к примеру, мы можем создать массив как строк, так и чисел, а при желании можем указать другой класс.

Однако далеко не всегда нам необходимо поддерживать все типы данных. Для этого достаточного указать ограничение шаблона при помощи ключевого слова where.

Здесь XXXXX может принимать одно из значений.

  • Class. Шаблон создается для классов, не объявленных как sealed.
  • struct. Использование шаблонов на основе структур.
  • new(). Параметр <T> должен быть классом, обладающим конструктором по умолчанию.
  • Имя_класса. Шаблон поддерживает использование типов данных, являющихся наследником указанного.
  • Имя_интерфейса. Использование классов, которые реализуют указанный интерфейс.

К примеру, при подобном объявлении класса.

Мы сможем использовать только целочисленный тип данных. Данный пример несколько лишен смысла, потому как начисто отсекает мощь шаблонов, однако отлично показывает, возможность ограничивать используемые типы данных.

Полагаю, это необходимый минимум для использования шаблонов. Удачных вам экспериментов, коллеги.

Также рекомендую ознакомиться со статьей C# объектно-ориентированное программирование (ООП)

P.S. Присоединяйся в любой удобной для тебя социальной сети. Для меня очень важно оставаться с тобой на связи, ведь у меня есть еще много полезной информации о программировании для тебя, которой я хочу с тобой поделиться.
[DISPLAY_ULTIMATE_PLUS]

Рубрики: C#

%d такие блоггеры, как: