Tarayıcınız JavaScript! desteklememektedir.

Generic Yapi

Merhaba Arkadaslar,

Generic Yapiya giris yapmadan önce Non-Generic yapiyi ele alalim:

Örnegin ArrayList.

ArrayList System.Collections kütüphanesinde yer aliyor ve içerisinde object türünden eleman kabul ediyor. Object türünden eleman kabul etmesi bizim için büyük avantaj gibi gözükse de, olusturdugumuz nesneleri içerisinde barindirmak istedigimizde problem yasayabiliyoruz.

Ama içerisinde barindiracagimiz elemanlar string,int,double,float,DateTime,bool vs deger türü ise en azindan daha kullanisli hal aliyor. 

(*ArrayList ile ilgili bilginiz yoksa, buraya tiklayarak makalemizi okumanizi öneririm.)

ArrayList non-generic bir yapi. Bundan dolayi içerisinde herhangi bir class nesnesi barindiriyor olmamiz (kendi tanimladigimiz), eger tek bir nesne ise yine cast islemi ile kulllanisli olabilir.

Ancaaak....

Eger ki içerisinde 1 den fazla nesne barindiracaksak problem yasama ihtimalimiz çok yüksek.

Mesela, bir Ogrenci nesnemiz bir de Ogretmen nesnemiz olsun ve biz ArrayList.Add(Ogrenci),ArrayList.Add(Ogretmen) diye ikisinide ArrayList'imizde ekleyelim.

Sonrasinda bir döngü kuralim ve içerisindeki elemanlara ulasmaya çalisalim.

Hata verdi degil mi? Iste demin söylemeye çalistigim bu. Çözümü tabii ki var, söyle ki;

foreach(var item in ArrayList)
{
   if(item is Ogrenci)
   {
       Console.WriteLine(item.OgrenciAdi);
   }
   else if(item is Ogretmen)
   {
       Console.WriteLine(item.OgretmenAdi);
   }
}

Yukarida ki kullanim, tüm nesneleri teker teker tanimlayarak kullanilir. Ama düsünün, eger 20 tane nesneniz varsa, hepsini tanimlamak isinizi baya uzatir.

Simdi gelelim Generic Yapiya...

Generic yapilar Class,List vs farketmeksizin bizden bir T degeri ister. Mesela bir Generic List tanimlayalim;

List<Ogrenci> ogrListesi = new List<Ogrenci>();

Yukaridaki kullanimda, T degeri olarak Ogrenci nesnesini verdik. Biz bunu yazdigimizda çok basit geliyor ama arka planda muazzam bir is yükü var!

Ogrenci nesnesinin içerisindeki tüm propertyler, fieldlar bizim için listeye eklenebilir, kullanilabilir, silinebilir, güncellenebilir durumda olacaktir.

Ayni zamanda IEnumerable interface'ini implement ettigi için Generic List'ler sayilabilir, döngü ile içerisindeki elemanlara ulasilabilirdir.

Tabii Generic'ler sadece List ile sinirli degil. SortedList, HashSet, SortedSet, Dictionary, SortedDictionary vs Generic yapilar mevcut. 
Bunlarla alakali yazdigim makaleleri okumanizi öneririm.(Yazmadiklarimi ise firsat buldukça yaziyorum.)

Ayni zamanda, Generic Class'lar da var. Yine ayni sekilde T degeri verdigimiz, ve yalnizca o T degeri ile islem yapan...

Onu da bir sonraki makalemizde ele alacagim...

Kod'la kalin...