Klauzula where sa používa na špecifikáciu typových obmedzení, ktoré môžu slúžiť ako premenné pre typové parametre definované v generických deklaráciách. 1. Obmedzenia rozhrania. Napríklad môžete deklarovať generickú triedu MyGenericClass, aby typový parameter T mohol implementovať IComparable<T> rozhranie:
public class MyGenericClass<T>, kde T:IComparable { }
2. Obmedzenie základnej triedy: Označuje, že typ musí použiť špecifikovanú triedu ako základnú triedu (alebo samotnú triedu), ktorá má byť použitá ako parameter typu pre daný generický typ. Keď sa takéto obmedzenie použije, musí sa objaviť pred všetkými ostatnými obmedzeniami na typ parametra. trieda MyClassy<T, U> kde T : trieda kde U : štruktúra
{
}
Klauzula 3.kde môže tiež obsahovať obmedzenia konštruktora. Nový operátor môžete použiť na vytvorenie inštancie typového parametra; Ale typ argument musí byť obmedzený konštruktorovým obmedzením new() pre toto. Obmedzenie new() dáva kompilátorovi vedieť, že akýkoľvek typ argumentu musí mať prístupný konštruktor bez parametrov (alebo predvolený). Napríklad: public class MyGenericClass <T> , kde T: IComparable, new()
{ Nasledujúci riadok nie je možný bez obmedzenia new(): T položka = nová T();
} Obmedzenie new() sa objavuje na konci klauzuly where.
4. Pre viaceré typové parametre každý typový parameter používa klauzulu where, Napríklad: interface MyI { } triedny slovník<TKey, TVal> kde TKey: Porovnateľné, IEnumerovateľné kde TVal: MyI
{ verejná prázdnota Pridať (TKey kľúč, TVal val)
{
}
}
5. Môžete tiež priradiť obmedzenia k typovým parametrom generických metód, napríklad:
public bool MyMethod<T>(T t) kde T : IMyInterface { }
Upozorňujeme, že syntax na popis obmedzení typových parametrov je rovnaká pre delegátov aj metódy:
delegate T MyDelegate<T>(), kde T : new()
Generické kde
Generický Kde môže kvalifikovať typové parametre. Existuje niekoľko spôsobov.
·kde T : štruktúra obmedzuje typový parameter T musí zdediť zo System.ValueType.
·kde T: trieda obmedzuje typ Parameter T musí byť referenčný typ, teda nemôže byť zdedený zo System.ValueType.
kde T : new() obmedzuje typový parameter T, ktorý musí mať predvolený konštruktor
·kde T : NameOfClass obmedzuje typový parameter, ktorý musí T zdediť z triedy alebo implementovať rozhranie.
Tieto kvalifikátory možno kombinovať, napríklad: public class Point where T : class, IComparable, new() |