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

Вид: 17968|Ответ: 0

[Источник] C#, где анализ использования

[Скопировать ссылку]
Опубликовано 12.07.2016 11:35:43 | | |

Клауза where используется для указания типовых ограничений, которые могут служить переменными для параметров типа, определённых в обобщённых декларациях.
1. Ограничения интерфейса.
Например, можно объявить общий класс MyGenericClass, чтобы параметр типа T мог реализовать<T> интерфейс IComparable:

публичный класс<T> MyGenerricClass, где T:IComparable { }

2. Ограничение базового класса: Указывает, что тип должен использовать указанный класс в качестве базового класса (или самого класса), который будет использоваться в качестве параметра типа для данного общего типа.
После использования такого ограничения оно должно появиться перед всеми другими ограничениями типа параметра.
класс MyClassy<T, U>
где T : класс
где U : struct
{
}

Клауза 3.where также может включать ограничения конструкторов.
Вы можете использовать новый оператор для создания экземпляра параметра типа; Но аргумент типа должен быть ограничен строительным ограничением new() для этого. Ограничение new() сообщает компилятору, что любой тип аргумента должен иметь доступный конструктор без параметров (или по умолчанию). Например:
публичный класс <T> MyGenerricClass, где T: IComparable, new()
{
Следующая строка невозможна без ограничения new():
T item = новый T();
}
Ограничение new() появляется в конце клаузы «where».

4. Для нескольких параметров типа каждый параметр типа использует клаузу where
Например:
interface MyI { }
Словарь класса<ТКей, ТВал>
где TKey: IComparable, IEnumerable
где TVal: MyI
{
Public void Add(TKey key, TVal val)
{
}
}

5. Также можно накладывать ограничения на параметры типов общих методов, например:

публичный bool <T>MyMethod(T t), где T : IMyInterface { }

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

делегат T <T>MyDelegate(), где T : new()





Generic Where

Generic Where может квалифицировать параметры типа. Существует несколько способов.

·где T : struct ограничивает параметр типа, который T должен унаследовать от System.ValueType.

·где T: класс ограничивает тип Параметр T должен быть эталонным типом, то есть он не может быть унаследован от System.ValueType.

где T : new() ограничивает параметр типа, T должен иметь конструктор по умолчанию

·где T : NameOfClass ограничивает параметр типа, который T должен унаследовать от класса или реализовать интерфейс.

Эти квалификаторы могут быть комбинированы, например: публичный класс Точка, где T : класс, IComparable, new()




Предыдущий:c# NHibernate Help Class
Следующий:c# http слушает потоки с помощью HttpListener
Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com