Разбираемся с обобщением generic

Приветствую всех, сегодня поговорим о джанериках.  Джанерики это общий тип параметров.

Обобщение(Универсальные шаблоны) – элемент кода, способный адаптироваться для выполнения общих (сходных) действий над различными типами данных.
Универсальные шаблоны были добавлены в язык C# версии 2.0 и среду CLR. Эта возможность CTS (Common Type System — общая система типов), названа обобщениями (generics).

Его можно разделить на дви вида открытый и закрытий тип, открытый это <T> а закрытый может быть к примеру <int >или <string> Различие в том что мы устанавливаем ограничение в виде типа <int> <string>либо, компилятор сам разбирается какой ему тип будет передан.

Каждый закрытый тип получает свою собственную копию набора статических полей.

Обобщения обеспечивают большую производительность, так как не происходит операции «упаковки-распаковки»(Boxing-Unboxing).

С помощью ключевого слова default можно установить значение по умолчанию для ссылочного типа это будет null, для значений это 0.

Разберем ограничения которые можно использовать в Generic Constraints

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

Очень интересный  пример, который благодаря именно ограничению позволил сделать это:

Если бы не ограничение конструктором без параметров, у нас бы возникла ошибка на стадии компиляции. Этот способ применяется при создании экземпляров, не известных типов.

А теперь посмотрим универсальный метод сортировки.

Мы использовали джанерики тем самым, избежали конкретизации в применении метода Sort() который примет любой массив не зависимо от его типа и отсортирует его. Однако на него наложено ограничения, массив должен реализовывать интерфейс IComparable;

Однако не будем на этом останавливаться и сделаем общие расширение метода.

Мы изменили метод так что он теперь будет доступен из всех переменных реализующий интерфейс IComparable.

Upcast

Ковариантность обобщений – UpCast параметров типов.

Ковариантность обобщений в C# 4.0 ограничена интерфейсами и делегатами.

DownCast

Контрвариантность обобщений – DownCast параметров типов.

Перегрузка обобщенных типов.

Перегрузки обобщенных типов различаются количеством параметров типа, а не их именами.

Общие сведения

Общие сведения об универсальных шаблонах:

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

 

 

Обновлено: 23.03.2018 — 17:21

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.