Bu yazımda C#’ta Generic koleksiyonlardan bahsedeceğim.Generic koleksiyonlar System.Collections.Generic namespacei altında mevcutturlar.Non-Generic koleksiyonlarda tip güvenliği yoktur ancak Generic koleksiyonlar tip güvenliği vardır.Boxing – Unboxing işlemleri yapmamıza gerek kalmadığından performans açısından artış sağlayacaklardır.
Öncelikle Generic koleksiyonların Non-Generic koleksiyonlardan artısı eksisi nedir bir bakalım.Non-Generic koleksiyonlar elemanları object tipten aldıkları için Boxing işlemine uğruyorlar.Haliyle elemanlara erişirkende Unboxing işlemi yapıyoruz.Bazen koleksiyonumuzda tek tipten elemanlar olduğu durumlar olur.Bu amaçla Non-Generic koleksiyonları kullanarak Boxing-Unboxing işlemleri performans açısından bizi olumsuz etkileyecektir.Halbuki Generic koleksiyonları kullanırsak, o tipten bir koleksiyon oluşturup , hem tip güvenliğini sağlarız hemde Boxing – Unboxing işlemine gerek duymamış oluruz.Buda performans açısından bize katkı sağlayacaktır.
Bir çok Generic kolleksiyon olmasına rağmen ben burada Listve Dictionarykoleksiyonlarını göstereceğim.
Aşağıda Non-Generic kolleksiyonlara karşılık gelen Generic kolleksiyonlar listelenmiştir.
| Generic Kolleksiyon | Non-Generic Kolleksiyon |
| Queue<T> | Queue |
| SortedDictionary<K,T> | SortedList |
| Stack<T> | Stack |
| List<T> | ArrayList |
| Dictionary<K,T> | Hashtable |
Yazımız buraya kadar konuya giriş niteliği taşımaktadır.
Bir sonraki sayfada List koleksiyonundan bahseceğim.
List Koleksiyon – (ArrayList’in Generic karşılığı)
ArrayList koleksiyon yapısının Generic karşığı List koleksiyon yapısıdır.
List<string> Lliste = new List<string>();
Yukarıda gördüğünüz Generic List koleksiyonunun imzasıdır.İmzanın <> operatörleri arasında koleksiyonun tipi belirlenir.Bu koleksiyona string tipten başka bir değer giremeyiz.
Lliste.Add("Gençay"); //Doğru
Lliste.Add("Yıldız"); //Doğru
/*Lliste koleksiyonu sadece string tipten veri aldığı için
başkabir tipteki veriyi eklemeye çalışında derleyici direkt hata verecektir.*/
Lliste.Add(12); //Yanlış
Lliste.Add(new Araba());//Yanlış
Bir List koleksiyonunun tipi illaki değer tipinden olmak zorunda değildir.Bir class tipindende koleksiyon oluşturulabilir.
Örneğin Araba.cs classımız olsun.
class Araba
{
}
Artık Araba tipinden nesneler bu koleksiyon içine eklenebilir.Araba.cs sınıfından türeyen sınıflarda çok biçimlilik sayesinde bu koleksiyona eklenebilirler.Örneğin Araba.cs sınıfından kalıtım alan Mercedes.cs ve kalıtım almayan Ford.cs sınıflarımız olsun.
class Mercedes:Araba
{
}
class Ford
{
}
Lliste.Add(new Araba()); //Doğru
Lliste.Add(new Mercedes()); //Doğru
Lliste.Add(new Ford()); //Yanlış
//Ford sınıfından nesneyi koleksiyona ekleyemeden derleyici hata verecektir.
Koleksiyonun metod ve propertylerinin ArrayList’ten bir farkı yoktur.
Bir sonraki sayfada Dictionary koleksiyonundan bahsedeceğim.
Dictionary Koleksiyon – (Hastable’nin Generic karşılığı)
Non-Generik koleksiyonlardan Hashtable koleksiyon yapısının Generic koleksiyon karşılığı Dictionary koleksiyondur.
Dictionary<string,int> Dlist = new Dictionary<string,int>();
Dictionary koleksiyonunun imzası yukarıda gördüğünüz gibidir.<> operatörleri arasına iki tip alır.Birinci değer alacağı keylerin tipleri, ikincisi ise valuelerin tipleridir.Yukarıdaki imza,Keyleri string,Valueleride int olarak almaktadır.
Dlist.Add("Doğum Yılı : ",1992); //Doğru
Dlist.Add("Yaşı", 20); //Doğru
Dlist.Add("Adı","Gençay"); //Yanlış
Dlist.Add(123,"Deneme"); //Yanlış
//Yanlış değerler koleksiyona eklenmeye çalışıldığı anda derleyici hata verecektir.
Metodları ve propertyleri Hastable’inkinden farksızdır.
Bu yazımında sonuna gelmiş olduk.
Bir sonraki yazımda görüşmek üzere..
İyi çalışmalar.