LOGO

LOGO
LOGO
ads header

Breaking News

Generic(Türe Özgü) Sınıflar nedir?

*****************http://www.kazimcesur.com/c-generics/**************************
Generic’ler tasarlandığımız interface, class, metod yada parametrelerin (argümanların) belirli bir tip için değil bir şablon yapısına uyan her tip için çalışmasını sağlayan bir yapıdır. Generic’ler C++’taki şablon (template)’lerle benzerlik göstermesine karşın, uygulanış (implementation) bakımından farklılıklar göstermektedir. Generic ve C++ şablon (template)’lar arasındaki farklılıkları bu linkteninceleyebilirsiniz. Generic’ler.Net 2.0 ile birlikte kullanıma sunulmuştur.

Generic’lerin bize sağladığı avantajlar :
  • Yazılım parçacıkları içerisinde tekrar kullanılabilir kod yazmamıza yardımcı olarak kod tekrarını önler.
  • Kaliteli ve daha yönetilebilir kod yazmamıza olanak sağlar.
  • Çalışma zamanında (run time) gereksiz Cast ve Boxing-Unboxing kullanmasını önlediğinden efektif performans sağlar.
  • Derleme zamanında (compile time) (type safe) tip güvenli değişken kullanılmasını zorlayarak çalışma zamanında oluşabilecek tip dönüşüm hatalarını önler.
  • Programcıya kod üzerinde daha güçlü esnek bir kontrol sağlar.

Generic Koleksiyonlar (Generics Collections)
Generic koleksiyonlar System.Collections.Generics namespace’i sayesinde kullanılabilir. Bu namespace içirisinde çeşitli parametreleştirilmiş koleksiyon/konteynır sınıfları barındırmaktadır. Bunları kullanmak için sadece koleksiyonun tipini belirtip parametre olarak geçmek yeterlidir.

*********************************************************************************

Generic tipler .Net 2.0 ile birlikte gelen yeniliklerden birisidir. Generic tipte yapılan bir tanımlama, bu tipin hangi tipler ile çalışabileceğini belirlemeye olanak sağlamaktadır. .Net platformunda generic tiplere örnek olarak List<T>Nullable<T>, Dictionary<T,K> gibi tipleri verebiliriz. Bu tipler System.Collections.Generic ad uzayında barınmaktadır. Bunun yanında kendi generic  tiplerimizi tanımlamak da mümkündür.
Neden Generic Tipleri Kullanmalıyız
Generic tipleri kullanmamızın en temel sebeplerinden biri, nesnelerin Object türüne dönüştürülmesi(casting işlemi) veya Object türündeki nesnelerin istenen tipe çevrilmesi sorunudur. Yani generic kullanımlar sayesinde tip dönüştürme sorununu ortadan kaldırmaktır. Generic tiplerin iki önemli avantajı bulunmaktadır.
  • Runtime(Çalışma zamanı) HatalarıObject tip dönüşütürme işlemi sırasında oluşabilecek hataları derleyici anlayamamaktadır. Örneğin string tipindeki bir değişkeni object tipine dönüştürdüğümüzü varsayalım, daha sonra da bu object türünü int tipine dönüştürmeye çalıştığımızda derleme sırasında bir hata oluşmayacaktır. Ancak runtime esnasında bir hata oluşacaktır. Generic tiplerin kullanılması ise bu hataların derleme sırasında yakalanarak müdahale edilmesini sağlamaktadır. Ayrıca oluşturulan generic tiplerin hangi tipler ile çalışabileceğini de sınırlayabilmekteyiz.
  • Performans etkisi: Tip dönüştürme işlemleri işlemcinin zamanını almakta ve performansı olumsuz etkilemektedir. Generic tiplerde ise böyle bir durum söz konusu değildir. Çalışılacak türler başlangıçta belirlendiği için tip dönüşümüne gerek kalmamaktadır.

Örnek 1

En basit anlamda generic sınıfları anlatmaya çalışırsak varolan bir generic yapıdan örnek vermek istiyorum sıkça kullandığımız bir liste türü olan List ile T yerine istediğiniz tür objeyi geçerek listeye o türde veriler ekleyeceğinizi belirtebiliyor olası veri uyuşmazlıklarından bir nebze de olsa kurtulmuş oluyorsunuz. List türüne bir örnek verelim hemen, bu örneğimizde 5 kişinin adının saklandığı bir liste oluşturacağız.
List sınıfını kullanabilmek için System.Collections.Generic namespace’ini eklemeyi unutmayınız. Üstteki kodda List generic sınıfına string tipini verdiğimiz için Add metodunda parametre olarak string geçebileceğiz bunun haricinde başka bir tip değer geçilemez.

Örnek 2

Şimdi kendi generic sınıfımızı oluşturalım ve nasıl yapıldığı anlamaya çalışalım. Web programcılarının en çok kullandığı terimlerden biri olan Result yani sonuç kümelerinden yola çıkarak bir senaryo oluşturmaya çalışalım. Şimdi web’de her sayfada yaptığınız istekler sonucunda farklı veri kümeleri döner bu farklı veri kümeleri için farklı sınıfllar oluşturmaktansa generic bir yapı ile aynı sonuç kümesi fakat sadece geriye dönecek veri kümesi türünü generic sınıfına parametre geçerek ayarlayabiliriz. Alttaki kodda demek istediğimiz daha net anlayabilirsiniz.
Generic Sonuç sınıfımız.
Üstteki koddada gördüğünüz gibi Sonuc sınıfı içerisindeki Basarili ve Mesaj özellikleri sabit tipte fakat Data özelliği sınıfa parametre olarak geçilen tipte dönmektedir. biz bu örneğimizde Sonuç özelliğine int tipinde bir değer verelim.

Hiç yorum yok