Klausa where digunakan untuk menentukan batasan jenis yang dapat berfungsi sebagai variabel untuk parameter jenis yang ditentukan dalam deklarasi generik. 1. Kendala antarmuka. Misalnya, Anda dapat mendeklarasikan kelas generik MyGenericClass, sehingga parameter jenis T dapat mengimplementasikan antarmuka IComparable<T>:
kelas publik MyGenericClass<T> di mana T:IComparable { }
2. Batasan kelas dasar: Menunjukkan bahwa jenis harus menggunakan kelas yang ditentukan sebagai kelas dasar (atau kelas itu sendiri) untuk digunakan sebagai parameter jenis untuk jenis generik tersebut. Setelah batasan tersebut digunakan, itu harus muncul sebelum semua batasan lain pada jenis parameter. kelas MyClassy<T, U> di mana T : kelas di mana U : struct
{
}
Klausul 3.where juga dapat menyertakan batasan konstruktor. Anda dapat menggunakan operator baru untuk membuat instance parameter jenis; Tetapi argumen type harus dibatasi oleh batasan konstruktor new() untuk ini. Batasan new() memberi tahu kompiler bahwa semua jenis argumen yang disediakan harus memiliki konstruktor tanpa parameter (atau default) yang dapat diakses. Sebagai contoh: kelas publik MyGenericClass <T> di mana T: IComparable, new()
{ Baris berikut tidak dimungkinkan tanpa batasan new(): T item = new T();
} Batasan new() muncul di akhir klausa where.
4. Untuk beberapa parameter jenis, setiap parameter jenis menggunakan klausa where, Misalnya: antarmuka MyI { } kelas Kamus<TKey,TVal> di mana TKey: IComparable, IEnumerable tempat TVal: MyI
{ public void Tambahkan (Kunci TKey, TVal val)
{
}
}
5. Anda juga dapat melampirkan batasan ke parameter jenis metode generik, seperti:
bool publik MyMethod<T>(T t) di mana T : IMyInterface { }
Perhatikan bahwa sintaks untuk mendeskripsikan batasan parameter jenis sama untuk delegasi dan metode:
delegasi T MyDelegate<T>() di mana T : new()
Generik Tempat
Generik Di mana dapat memenuhi syarat parameter jenis. Ada beberapa cara.
·di mana T : struct membatasi parameter jenis yang harus diwarisi T dari System.ValueType.
·di mana T: class membatasi jenis Parameter T harus berupa jenis referensi, yaitu, tidak dapat diwarisi dari System.ValueType.
di mana T : new() membatasi parameter jenis T harus memiliki konstruktor default
·di mana T : NameOfClass membatasi parameter jenis yang harus diwarisi T dari kelas atau mengimplementasikan antarmuka.
Kualifikasi ini dapat digabungkan, seperti: kelas publik Titik di mana T : class, IComparable, new() |