C Sharp/Ключові слова/where
При створенні типів generic, ключове слово where використовується для того, щоб описати спеціальні обмеження, які дозволяють використовувати певні типи, які можуть застосовуватись як аргумент для параметру типу який використовується в декларації generic. Наприклад, ви можете визначити клас типу generic, MyGenericClass, таким способом що тип, який задається в якості параметру T має бути типом, що реалізує інтерфейс IComparable:
public class MyGenericClass<T> where T:IComparable { }
Конструкція where може також містити обмеження на наявність конструктора. Можна створювати екземпляри зазначеного в параметрі типу за допомогою оператора new, але для цього вам необхідно додати обмеження на наявність у даного типу конструктора по замовчуванню (без параметрів). Конструкція new() дозволяє повідомити компілятору, що будь-який аргумент типу має мати доступним конструктор без параметрів.
Наприклад:
public class MyGenericClass<T> where T : IComparable, new()
{
// Подібна конструкція не можлива без обмеження new():
T item = new T();
}
Конструкція new() завжди є останньою у виразі where.
Якщо існує декілька параметрів типу, обмеження для них можна задавати по черзі:
class Dictionary<TKey, TVal>
where TKey : IComparable, IEnumerable
where TVal : IMyInterface
{
public void Add(TKey key, TVal val)
{
}
}