|1.


C# dilinde generics kullanırken, generics' e argüman olarak verdiğimiz tip parametreleri üzerinde çeşitli kısıtlar belirtebiliriz. Kısıt belirtmek kimi yerde zaruridir, çünkü derleyici bu kısıtlar ile bazı şeylerin nasıl işlediğiniz anlamış olur. Örneğin generics için kullandığımız T gibi bir tipi birşeye cast etmek istiyorsak, kısıt ile t tipinin atası olan sınıfı belirtmemiz gerekebilir.


Belirtebileceğimiz kısıt çeşitleri şöyledir:
where T: struct
Burdaki T tipi, herhangi bir 'value type' olabilir. Ancak null değerler kabul etmiyor olmalıdır.
where T : class
Burdaki T tipi, bir referans tipinde olmalıdır. Yani class, interface, delegate veya array tipinde olabilir.
where T : new()
T tipinin parametre almayan ve public olan bir constructor'ı olmalıdır. Bu kısıtlama diğer kısıtlamalar ile beraber kullanılacaksa en son belirtilmelidir.
where T : <base class name>
T tipinin, belirtilen 'base class' veya bundan türeyen bir sınıf olmalıdır.
where T : <interface name>
Burdaki T tipi, belirtilen 'interface' veya bu interface'i gerçekleyen bir sınıf olmalıdır. Kısıt olarak, peş peşe birçok interface belirtilebilir. Belirtilen bu interfacelerin kendisinin de generic olmasıda mümkündür.
where T : U
Bu kısıtta belirtilen T tipi, yine generic olarak belirtilen U tipinden türeyen bir sınıf olmalıdır.
Ayrıca bakınız: generics