27 Haziran 2010 Pazar

Generic Kisitlamalar

Generic kisitlamalarda tip kisitlamasi yoktur. Yani

Class Ornek< T >
{
}

dersek, T yerine tum tipler gelebilir. Ama bazi durumlarda tip kisitlamasi yapmak isteyebiliriz. Ornegin, yas bilgisi isteyen bir metodumuza string gelmesin diyebiliriz, daha dogrusu referans turlu bir deger girilmemesini isteyebiliriz. Bu tarz kisitlamalari su sekilde olusturuyoruz;

class SadeceRefTurluler< T > where T:class
{
//T: sadece referans turlu tipler gelebilir.
}

class SadeceDegerTurluler< T > where T : struct
{
//T yerine sadece deger turluler gelebilir.
}

class SadeceDbConnectionYadaOndanKalitilanlar< T >where T : DbConnection
{
//T yerine DbConnection ya da DbConnection'dan kalitilan herhangi bir tip gelebilir.
}

class SadeceForeachIleGezilebilenler< T > where T : IEnumerable 
{
//T yerine sadece IEnumerable interface'nin implement eden bir tip gelir.
}

class X< T > where T : new() //bunu yazmazsak ide bizim T ile ornekledigimiz metodun abstract olmadigini veya parametre alan bir ctor oldugunu varsayabilir.
{
//Abstract olamaz.
//Default Ctor'i olmak zorunda

T yeni = new T(); //sorun olusmaz
}

0 yorum: