15 июня 2014 г.

Ограничения параметров типа

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

Ограничения позволяют сократить количество типов, которые могут использовать создаваемый нами тип, всего таких ограничений 6:
  • where T : struct - только тип значения, Nullable не допускается;
  • where T : class - только ссылочные типы;
  • where T : <имя_класса> - только указанный класс или его наследники;
  • where T : <имя_интерфейса> - только тип, который является или реализует указанный интерфейс. Через запятую можно указать несколько интерфейсов, в т.ч. и универсальных;
  • where T : U - T должен быть такого же типа что и U или его наследником;
  • where T : new() - тип должен иметь открытый (public) конструктор без параметров, это ограничение всегда должно указываться последним. Так же позволяет легко создавать новый экземпляр указанного типа:


Ограничения по базовому классу или интерфейсу предоставляют доступ к полям и методам указанного класса или интерфейса соответственно:


Следует так же помнить еще один момент - при использовании ограничения where T : class операторы == и != применяемые к T проверяют только равенство ссылок, даже если эти операторы перегружены в T.

Еще кое что по поводу операторов == и !=. Если универсальный тип не имеет ограничений - эти операторы вообще нельзя применять по отношению к T.

Комментариев нет:

Отправить комментарий