Klauzula where tiek izmantota, lai norādītu tipa ierobežojumus, kas var kalpot kā mainīgie tipa parametriem, kas definēti vispārējās deklarācijās. 1. Saskarnes ierobežojumi. Piemēram, varat deklarēt vispārēju klasi MyGenericClass, lai tipa parametrs T varētu ieviest IComparable<T> interfeisu:
publiskā klase MyGenericClass<T>, kur T:IComparable { }
2. Bāzes klases ierobežojums: norāda, ka tipam ir jāizmanto norādītā klase kā pamatklase (vai pati klase), lai to izmantotu kā šī vispārējā tipa tipa parametru. Kad šāds ierobežojums ir izmantots, tam jāparādās pirms visiem pārējiem parametra tipa ierobežojumiem. klase MyClassy<T, U> kur T : klase kur U : struct
{
}
3.where klauzula var ietvert arī konstruktora ierobežojumus. Jauno operatoru var izmantot, lai izveidotu tipa parametra instanci; Bet tipa arguments ir jāierobežo ar konstruktora ierobežojumu new(). Ierobežojums new() informē kompilatoru, ka jebkura veida argumentam ir jābūt pieejamam bez parametriem (vai noklusējuma) konstruktoram. Piemēram: publiskā klase MyGenericClass <T> , kur T: IComparable, new()
{ Šāda rindiņa nav iespējama bez new() ierobežojuma: T postenis = jauns T();
} Ierobežojums new() tiek parādīts klauzulas where beigās.
4. Vairāku tipu parametriem katrs tipa parametrs izmanto klauzulu where, Piemēram: interfeiss MyI { } klase Vārdnīca<TKey,TVal> kur TKey: IComparable, IEnumerable kur TVal: MyI
{ public void Add(TKey key, TVal val)
{
}
}
5. Varat arī pievienot ierobežojumus vispārējo metožu tipa parametriem, piemēram:
publiskais bool MyMethod<T>(T t) kur T : IMyInterface { }
Ņemiet vērā, ka tipa parametru ierobežojumu aprakstīšanas sintakse ir vienāda gan pārstāvjiem, gan metodēm:
delegāts T MyDelegate<T>(), kur T : jauns()
Vispārīgi, kur
Vispārīgi Kur var kvalificēties tipa parametri. Ir vairāki veidi.
·kur T : struct ierobežo tipa parametru T, kas jāpārmanto no System.ValueType.
·kur T: klase ierobežo tipu Parametram T jābūt atsauces tipam, tas ir, to nevar pārmantot no System.ValueType.
kur T : new() ierobežo tipa parametru T jābūt noklusējuma konstruktoram
·kur T : NameOfClass ierobežo tipa parametru T jāpārmanto no klases vai jāievieš interfeiss.
Šos apzīmētājus var kombinēt, piemēram: publiskā klase Punkts, kur T : klase, IComparable, new() |