Klauzule where se používá k určení typových omezení, která mohou sloužit jako proměnné pro typové parametry definované v obecných deklaracích. 1. Omezení rozhraní. Například můžete deklarovat generickou třídu MyGenericClass, takže parametr typu T může implementovat<T> IComparable rozhraní:
public class MyGenericClass<T>, kde T:IComparable { }
2. Omezení základní třídy: Označuje, že typ musí použít zadanou třídu jako základní třídu (nebo samotnou třídu), aby mohla být použita jako parametr typu pro daný generický typ. Jakmile je takové omezení použito, musí se objevit před všemi ostatními omezeními na typ parametru. třída MyClassy<T, U> kde T : třída kde U : struktur
{
}
Klauzule 3.kde může také obsahovat konstruktorová omezení. Nový operátor můžete použít k vytvoření instance typového parametru; Typ argument však musí být omezen konstruktorovým omezením new() pro tento účel. Omezení new() dává kompilátoru vědět, že jakýkoli typ argumentu musí mít přístupný konstruktor bez parametrů (nebo výchozí). Například: public class MyGenericClass <T> , kde T: IComparable, new()
{ Následující řádek není možný bez omezení new(): T položka = nový T();
} Omezení new() se objevuje na konci klauzule where.
4. Pro více typových parametrů každý typ parametr používá kde klauzuli, Například: rozhraní MyI { } třídní slovník<TKey, TVal> kde TKey: Srovnávatelný, Spočetný kde TVal: MyI
{ veřejná prázdnota Přidat (TKey klíč, TVal val)
{
}
}
5. Můžete také připojit omezení k typovým parametrům obecných metod, například:
public bool MyMethod<T>(T t) kde T : IMyInterface { }
Všimněte si, že syntaxe pro popis omezení typových parametrů je stejná jak pro delegáty, tak pro metody:
delegovat T MyDelegate<T>(), kde T : new()
Obecné kde
Obecné kde může kvalifikovat typové parametry. Existuje několik způsobů.
·kde T : struct omezuje parametr typu T musí zdědit ze System.ValueType.
·kde T: třída omezuje typ Parametr T musí být referenční typ, tedy nemůže být zděděn ze System.ValueType.
kde T : new() omezuje typ parametru T, který musí mít výchozího konstruktora
·kde T : NameOfClass omezuje typový parametr, který T musí zdědit z třídy nebo implementovat rozhraní.
Tyto kvalifikátory lze kombinovat, například: veřejná třída Bod kde T : třída, IComparable, new() |