Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 17968|Відповідь: 0

[Джерело] C#, де аналіз використання

[Копіювати посилання]
Опубліковано 12.07.2016 11:35:43 | | |

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

публічний клас<T> MyGenericClass, де 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
Наступний:c# http слухає потоки за допомогою HttpListener
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com