27 Haziran 2010 Pazar

C#'da Generic Kavrami

C# 2.0 ile birlikte hayatimiza giren ve bir daha da cikmamasini istedigimiz Generic siniflari uygulamalarimiza buyuk kolaylik getiriyor. Kisaca aciklamak gerekirsek, kendileri tiplerden bagimsiz nesne tasarimlari ve metot yazimlarini olusturmamizi sagliyor. Iyice acmak gerekirse, biz class veya metot yazarken ornegin kullanicinin girecegi tipin nesne tanimlamasi sirasinda belirlenmesini isteriz. Kisaca kod uzerinde soyle tanimlarsak;

public static void DegerAl(int a) //burada kullanicidan nesne orneklenmesi sirasinda int deger aliriz.
{
}

integer girmek zorunda olmasin kullanici. String deger de girebilsin. Ne yapmamiz gerekecek bu sefer, ayni class isminden string bir parametre alan baska bir fonksiyon alacagiz, yani overload edecegiz. Kullanici daha sonra double girmek istesin, daha sonra char, sonra byte ... iste gordugunuz gibi tum girilen degerler icin overload etmek zorunda kalicaktik. 10-15 overload metodun yaptigini tek satirda Generic Siniflarin yardimiyla yapacagiz simdi.

public static void DegerAl< T >(T t)
{
}

Burada T tipinden bir parametre istedigimizi belirtiyor. T yerine string, int .... tum tipler gecerli olacaktir.



Yukarida da goruldugu gibi obj2. dedigimiz zaman intellisense bizden string deger isteyecek, cunku yukarida yerine string yazmistik biz.



Yukarida da gordugunuz gibi T yerine int yazdigimiz zaman parametre olarak da intellisense bizden artik T degil int bir deger girmemizi istiyor. Oraya string yazsak bizden ayrica string bir deger isteyecekti.
Ayrica asagidaki iki screenshot'i incelemekte fayda var. Buradan da anlayacagimiz uzere intellisense bize buyuk kolayli sagliyor gordugunuz uzere.
1-

2-



0 yorum: