A where záradék olyan típuskorlátok meghatározására szolgál, amelyek változóként szolgálhatnak általános deklarációban definiált típusparaméterekhez. 1. Interfész korlátai. Például deklarálhatunk egy generikus MyGenericClass osztályt, így a típusparaméter T megvalósíthatja az IComparable<T> interfészt:
public class<T> MyGenericClass where T:IComparable { }
2. Alap osztálykorlátozás: Azt jelzi, hogy egy típusnak a megadott osztályt kell használnia alap osztályként (vagy magát az osztályt), hogy az adott általános típus típusparaméterként használható legyen. Ha ilyen korlátozást alkalmaznak, annak minden más paramétertípusra vonatkozó korlátozás előtt kell megjelennie. osztály MyClassy<T, U> ahol T : osztály ahol U : struct
{
}
A 3.where klauzula tartalmazhat konstruktor korlátokat is. Az új operátorral létrehozhatsz egy típusparaméter példányát; De a típusargumentumot ehhez a new() konstruktor feltétele korlátozza. Az új() korlátozás jelzi a fordítónak, hogy bármely típusú argumentusnak elérhető paraméter nélküli (vagy alapértelmezett) konstruktorral kell rendelkeznie. Például: public class <T> MyGenericClass, ahol T: IComparable, new()
{ A következő vonal nem lehetséges új() korlátozás nélkül: T tétel = új T();
} Az új() korlátozás a hol mellékmondat végén jelenik meg.
4. Több típusparaméter esetén minden típusparaméter egy ahol klauzulatot használ, Például: interface MyI { } osztály szótár<TKey, TVal> ahol TKey: IComparable, IEnumerable ahol TVal: MyI
{ public void Add(TKey key, TVal val)
{
}
}
5. Általános metódusok típusparamétereihez is hozzáadhatsz korlátozásokat, például:
public bool MyMethod<T>(T t) ahol T : IMyInterface { }
Megjegyzendő, hogy a típusparaméter-korlátok leírásának szintaxisa ugyanaz mind a delegáltak, mind a metódusok esetében:
delegált T <T>MyDelegate(), ahol T : new()
Általános hol
A generic Where típusparamétereket is minősíthet. Több módja is van.
·ahol T : struct korlátozza a típusparamétert, amelynek T-nek örökölnie kell a System.ValueType-tól.
·ahol T: osztály korlátozza a típust T paraméternek referenciatípusnak kell lennie, vagyis nem örökölhető a System.ValueType típustól.
ahol T : new() korlátozza a típusparamétert, T-nek alapértelmezett konstruktorral kell rendelkeznie
·ahol T : NameOfClass korlátozza azt a típusparamétert, amelyet T-nek örökölnie kell egy osztályból vagy interfészt kell megvalósítania.
Ezek a kvalifikátorok kombinálhatók, például: public class Pont, ahol T : class, IComparable, new() |