Klavzula kjer se uporablja za določanje omejitev tipa, ki lahko služijo kot spremenljivke za tipne parametre, definirane v generičnih deklaracijah. 1. Omejitve vmesnika. Na primer, lahko deklarirate generični razred MyGenericClass, tako da parameter tipa T lahko implementira IComparable<T> vmesnik:
public class MyGenericClass<T>, kjer T:IComparable { }
2. Omejitev osnovnega razreda: Pomeni, da mora tip uporabiti določen razred kot osnovni razred (ali sam razred), ki se uporablja kot parameter tipa za ta generični tip. Ko je takšna omejitev uporabljena, se mora pojaviti pred vsemi drugimi omejitvami na tip parametra. razred MyClassy<T, U> kjer je T : razred kjer je U : struct
{
}
Klavzula 3.kjer lahko vključuje tudi omejitve konstruktorjev. Novi operator lahko uporabite za ustvarjanje primerka parametra tipa; Vendar mora biti tip argument omejen s konstruktorsko omejitvijo new() za to. Omejitev new() prevajalniku sporoči, da mora imeti vsak tip argumenta dostopen konstruktor brez parametrov (ali privzeti). Na primer: javni razred MyGenericClass <T> , kjer T: IComparable, new()
{ Naslednja vrstica ni mogoča brez omejitve new(): T element = nov T();
} Omejitev new() se pojavi na koncu klavzule where (kje).
4. Za več tipnih parametrov vsak tipni parameter uporablja klavzulo kje, Na primer: interface MyI { } razredni slovar<TKey, TVal> kjer TKey: Primerljivo, IEštevljivo kjer TVal: MyI
{ javni void Dodaj (TKey ključ, TVal val)
{
}
}
5. Omejitve lahko pripišete tudi tipnim parametrom generičnih metod, kot so:
public bool MyMethod<T>(T t) kjer T : IMyInterface { }
Upoštevajte, da je sintaksa za opis omejitev parametrov tipa enaka tako za delegate kot za metode:
delegate T MyDelegate<T>(), kjer je T : new()
Generično Kjer
Generično Kjer lahko kvalificira tipne parametre. Obstaja več načinov.
·kjer T : struct omejuje parameter tipa, ki ga mora T podedovati od System.ValueType.
·kjer T: razred omejuje tip Parameter T mora biti referenčni tip, torej ga ni mogoče podedovati iz System.ValueType.
kjer T : new() omejuje parameter tipa T, ki mora imeti privzetega konstruktorja
·kjer T : NameOfClass omejuje parameter tipa, ki ga mora T podedovati od razreda ali implementirati vmesnik.
Te kvalifikacije lahko združimo, na primer: javni razred Točka, kjer T : razred, IComparable, new() |