Where-klausulen brukes for å spesifisere typebegrensninger som kan fungere som variabler for typeparametere definert i generiske deklarasjoner. 1. Grensesnittbegrensninger. For eksempel kan du erklære en generisk klasse MyGenericClass, slik at typeparameteren T kan implementere IComparable-grensesnittet<T>:
offentlig klasse MyGenericClass<T> hvor T:IComparable { }
2. Basisklassebegrensning: Indikerer at en type må bruke den spesifiserte klassen som baseklasse (eller selve klassen) for å brukes som typeparameter for den generiske typen. Når en slik begrensning er brukt, må den vises før alle andre begrensninger på parametertypen. klasse MyClassy<T, U> hvor T : klasse hvor U : struct
{
}
3.where-klausulen kan også inkludere konstruktørbegrensninger. Du kan bruke den nye operatoren til å lage en instans av en typeparameter; Men typeargumentet må begrenses av konstruktørbegrensningen new() for dette. New()-begrensningen lar kompilatoren vite at enhver type argument må ha en tilgjengelig parameterløs (eller standard) konstruktør. For eksempel: offentlig klasse MyGenericClass <T> hvor T: IComparable, new()
{ Følgende linje er ikke mulig uten new()-begrensning: T element = ny T();
} New()-begrensningen vises på slutten av where-klausulen.
4. For flere typeparametere bruker hver typeparameter en where-klausul, For eksempel: grensesnitt MyI { } klasseordbok<TKey, TVal> hvor TKey: IComparable, IEnumerable hvor TVal: MyI
{ offentlig tomrom Add (TKey key, TVal val)
{
}
}
5. Du kan også knytte begrensninger til typeparametere for generiske metoder, slik som:
offentlig bool MyMethod<T>(T t) hvor T : IMyInterface { }
Merk at syntaksen for å beskrive typeparameterbegrensninger er den samme for både delegater og metoder:
delegat T MyDelegate<T>() hvor T : new()
Generisk hvor
Generisk Hvor kan kvalifisere typeparametere. Det finnes flere måter.
·hvor T : struct begrenser typeparameteren T må arve fra System.ValueType.
·hvor T: klasse begrenser typen Parameteren T må være en referansetype, det vil si at den ikke kan arves fra System.ValueType.
hvor T : new() begrenser typeparameteren T må ha en standardkonstruktør
·hvor T : NameOfClass begrenser typeparameteren T må arve fra en klasse eller implementere et grensesnitt.
Disse kvalifikatorene kan kombineres, for eksempel: offentlig klasse Punkt hvor T: klasse, IComparable, new() |