Yazılım Mimarileri ve Tasarım Desenleri Üzerine

C# Generic Koleksiyonlar

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.

Mobil sürümden çık