Jawaban:
Sederhananya, ini membatasi parameter generik ke kelas (atau lebih spesifiknya tipe referensi yang bisa berupa kelas, antarmuka, delegasi, atau tipe array).
Lihat artikel MSDN ini untuk perincian lebih lanjut.
Ini adalah batasan tipe generik . Dalam hal ini berarti tipe generik T
harus menjadi tipe referensi (kelas, antarmuka, delegasi, atau tipe array).
Ini adalah batasan tipe T
, yang menentukan bahwa itu harus kelas.
The where
klausa dapat digunakan untuk menentukan batasan jenis lain, misalnya:
where T : struct // T must be a struct
where T : new() // T must have a default parameterless constructor
where T : IComparable // T must implement the IComparable interface
Untuk informasi lebih lanjut, lihat halaman MSDN pada where
klausa , atau batasan parameter umum .
where T : class, IComparable, new()
Itu membatasi T
untuk tipe referensi . Anda tidak akan dapat menempatkan tipe nilai ( struct
kecuali tipe primitif string
) di sana.
where T: class
secara harfiah berarti itu T has to be a class
. Ini bisa berupa tipe referensi apa saja. Sekarang setiap kali kode apapun panggilan Anda DoThis<T>()
metode itu harus menyediakan kelas untuk menggantikan T . Misalnya jika saya akan memanggil DoThis<T>()
metode Anda maka saya harus memanggilnya seperti berikut:
DoThis<MyClass>();
Jika metthod Anda seperti berikut:
public IList<T> DoThis<T>() where T : class
{
T variablename = new T();
// other uses of T as a type
}
Lalu di mana T muncul dalam metode Anda, itu akan diganti oleh MyClass. Jadi metode terakhir yang dipanggil kompiler, akan terlihat seperti berikut:
public IList<MyClass> DoThis<MyClass>()
{
MyClass variablename= new MyClass();
//other uses of MyClass as a type
// all occurences of T will similarly be replace by MyClass
}
new T()
tidak mungkin dengan where T : class
. Anda harus menentukan where T: new()
untuk diizinkan melakukannya.
Ini disebut batasan parameter tipe. Secara efektif itu membatasi tipe T apa.
Argumen tipe harus merupakan tipe referensi; ini berlaku juga untuk semua kelas, antarmuka, delegasi, atau tipe array.
Di sini T merujuk ke Kelas. Ini bisa menjadi tipe referensi.
'T' mewakili tipe generik. Itu berarti dapat menerima semua jenis kelas. Artikel berikut mungkin membantu:
http://www.15seconds.com/issue/031024.htm