Sąlyga where naudojama nurodyti tipo apribojimus, kurie gali būti naudojami kaip kintamieji tipo parametrams, apibrėžtiems bendrosiose deklaracijose. 1. Sąsajos apribojimai. Pavyzdžiui, galite deklaruoti bendrąją klasę MyGenericClass, kad tipo parametras T galėtų įdiegti IComparable<T> sąsają:
viešoji klasė MyGenericClass<T>, kur T:IComparable { }
2. Bazinės klasės apribojimas: nurodo, kad tipas turi naudoti nurodytą klasę kaip pagrindinę klasę (arba pačią klasę), kad būtų naudojamas kaip to bendrojo tipo tipo parametras. Kai toks apribojimas naudojamas, jis turi būti rodomas prieš visus kitus parametro tipo apribojimus. klasė MyClassy<T, U> kur T : klasė kur U : struct
{
}
3.where sąlyga taip pat gali apimti konstruktoriaus apribojimus. Galite naudoti naują operatorių, kad sukurtumėte tipo parametro egzempliorių; Tačiau tam tipo argumentas turi būti apribotas konstruktoriaus apribojimo new(). New() apribojimas leidžia kompiliatoriui žinoti, kad bet kokio tipo pateiktas argumentas turi turėti prieinamą parametrų neturintį (arba numatytąjį) konstruktorių. Pavyzdžiui: viešoji klasė MyGenericClass <T> , kur T: IComparable, new()
{ Ši eilutė neįmanoma be new() apribojimo: T punktas = naujas T();
} Apribojimas new() rodomas sąlygos where pabaigoje.
4. Kelių tipų parametrams kiekvienas tipo parametras naudoja sąlygą where, Pavyzdžiui: sąsaja MyI { } klasė Žodynas<TKey,TVal> kur TKey: IComparable, IEnumerable kur TVal: MyI
{ public void Add(TKey key, TVal val)
{
}
}
5. Taip pat galite pridėti apribojimus bendrųjų metodų tipo parametrams, tokiems kaip:
viešasis bool MyMethod <T>(T t) kur T : IMyInterface { }
Atkreipkite dėmesį, kad tipo parametrų apribojimų aprašymo sintaksė yra vienoda tiek atstovams, tiek metodams:
delegatas T MyDelegate<T>() kur T : new()
Bendras Kur
Bendrieji Kur galima kvalifikuoti tipo parametrus. Yra keli būdai.
·kur T : struct apriboja tipo parametrą, kurį T turi paveldėti iš System.ValueType.
·kur T: klasė riboja tipą Parametras T turi būti nuorodos tipas, t. y. jo negalima paveldėti iš System.ValueType.
kur T : new() apriboja tipą parametras T turi turėti numatytąjį konstruktorių
·kur T : NameOfClass apriboja tipą, kurį parametras T turi paveldėti iš klasės arba įdiegti sąsają.
Šiuos kvalifikatorius galima derinti, pvz.: viešoji klasė Taškas, kur T : klasė, IComparable, new() |