Ограничения позволяют сократить количество типов, которые могут использовать создаваемый нами тип, всего таких ограничений 6:
Ограничения по базовому классу или интерфейсу предоставляют доступ к полям и методам указанного класса или интерфейса соответственно:
Следует так же помнить еще один момент - при использовании ограничения where T : class операторы == и != применяемые к T проверяют только равенство ссылок, даже если эти операторы перегружены в T.
Еще кое что по поводу операторов == и !=. Если универсальный тип не имеет ограничений - эти операторы вообще нельзя применять по отношению к T.
- 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.
Комментариев нет:
Отправить комментарий