25 Mart 2013 Pazartesi

C# Generic Yapılar: Generic de neyin nesi?

Büyük üstadlar üstad olana kadar çok satır kod yazdılar. Yazdıkça gördüler ki aynı kod bloğunu her ihtiyacı oldukları yerlerde ufak tefek modifikasyonlardan geçirip tekrar tekrar kullanıyorlar. Ayrıca casting, boxing-unboxing operasyonları yapmaktan uygulamanın response zamanı Harem-Sirkeci feribotu seferiyle aynı süreye denk geliyor. Dediler ki bu iş böyle olmaz, gelin beyler kafaya kafaya verip adımızı tarihe yazalım. Yıl 1999, dün gibi hatırlıyorum :)

Uzun süren toplantılar, beyin fırtınaları, araştırmalar, küfür kıyamet derken nihayet 2005 yılında .NET Framework 2.0 versiyonu ile Generic Mimarisi hayatımıza girmiş oldu.

"Yukarıdaki cümleye katılmıyorum, genericler hayatıma girmedi, asla da giremeyecek" diyorsanız;

Yanılıyorsunuz :) Tabi zorla güzellik olmaz. Aşağıda okuyacağınız üç paragraf generic yapılarıyla ilgilenip, ilgilenmeyeceğinize dair kendinizi kandırmadan cevap verebilmenizi sağlayacak.


Şimdi kupa bardağımıza iyi bakın arkadaşlar,şaşı bak şaşır yapıyoruz :) Hemen bardak sınıfını zihninizde canlandırın. Yükseklik, çap, renk, ağırlık propertylerini tanımladınız bile... Bir de buna Doldur() fonksiyonu ekledik mi fevkalenin fevkinde olacak. Buraya kadar sıkıntı yok, peki Doldur fonksiyona parametre olarak ne verip, bardağı neyle doldururdunuz?

Verilecek cevap basit: Bardağı sıvı olan herhangi bir şeyle doldurabiliriz. Çay, kahve, ayran, kola, cappuccino, oralet, bira, su vs.... Zaten sıvı olmayan şeylerle doldurmak isteseydim kova sınıfını tasarladım öyle değil mi?

Normal Şartlar Altında bardağımızı şöyle dolduruyoruz:
  1. Önceden kısık ateşte hazırladığımız bardak sınıfından bir örnek nesne (instıns) çıkartılır.
  2. Örnek nesnenin Doldur fonksiyonu çağırılarak, bardak ne ile dolacaksa ilgili parametre verilir.



Bakınız Doldur fonksiyonum 16 çeşit parametre alacak şekilde tasarlanmış. Önceden neyi tanımladıysam onunla bardağı doldurabiliyorum. Çok iyi, hatta mühendislik harikası... Yalnız şöyle bir sıkıntı var:

16 çeşit yerine 124 çeşit parametre tipim olsaydı bu tiplere özel kod yapılarını parmaklarımın ucundaki deriyi eritip kemiğimi dışarını fırlatana kadar (iğrencim kabul) klavyeyle mi boğuşaktım yoksa burayı tıklayarak irfan boyutunda huzura mı erecektim :)

Sevgiyle kalın...