Collections - Koleksiyonlar - İsmail GÜRSOY
Ana Sayfa/Yazılım/C#/Collections – Koleksiyonlar
admin 04 Haziran 2011	C# Yorum Yapabilirsiniz 4,413 Goruntulemeler
.NET ortamında genel itibari ile kodlarımızı yazarken bir çok durumda bir çok nesneden oluşan gruplara ihtiyaç duyarız. .NET Framework bunun için bize System.Collections isim alanında koleksiyon diye adlandırdığımız sınıfları sunmaktadır. Bu sınıflara örnek verirsek, ArrayList, BitArray, HashTable, Stack, SortedList, Queu, CollectionBase, DictionaryBase gibi sınıflardır. Bu koleksiyon tabanlı sınıflarda bir türden veya biribirinden farklı türlerde olan bir çok nesneyi aynı grup içinde tutabiliriz. Örneğin en çok kullanılan Array sınıfı ile sadece aynı türden nesneleri bir grup içinde tutabilmekteyiz ve onlara index numaraları ile rahatlıkla ulaşabilmekteyiz. Yalnız Array?de dikkat edilmesi en önemli durum bu sınıf normalde System isim alanında bulunurken diğer üstte saymış olduğum koleksiyon türleri System.Collections isim alanı içinde tutulmaktadır.
Koleksiyon türü sınıflarda birbirinden farklı türdeki nesneleri aynı grup içinde tutabiliriz ve bunlara erişebilmek için foreach döngüsünü kullanabiliriz. Bilindiği üzere dizilerde bildirim aşamasında dizinin boyutunu ve türünü belirtmekteyiz ve bir dizi içinde sadece aynı türden elemanlar olabilir. Boyutu ise daha sonra sadece Array.Resize metotu ile değiştirilebilmektedir. Buna karşılık koleksiyonlar daha dinamik bir yapıdadır ve boyutları dinamik olarak değişebilir ve bir grup içindeki elemanların illaki aynı türden olmasına gerek yoktur. Bu da bize aynı zamanda oldukça esnek bir yapı kazandırmaktadır. Yalnız koleksiyonlar diziler gibi çok boyutlu olmazlar, tek boyutlulardır. Ve koleksiyon türündeki bir grubun elemanları object türündendir. Koleksiyona ekleme veya koleksiyondan okuma işlemlerinde boxing ve unboxing işlemleri otomatik olarak yapılmaktadır. Listede tutulacak değerler aynı türde ise koleksiyonun generic formatı kullanılır.
Koleksiyonlara foreach ile ulaşabilmemizi sağlayan interface IEnumarable?dir. Tüm koleksiyon sınıflarının elemanlarına foreach döngüsü ile erişebildiğimize göre IEnumarable interface?i hepsi için geçerlidir. System.Collections sınıfında IEnumarable haricinde de interfaceler bulunur ve koleksiyonlar bu arayüzlerden bir ya da bir kaçını kullanabilirler.
Bu arayüzlere değinecek olursak;
IEnumarable Interface : Numaratör olarak tanımlanabilir, koleksiyon sınıfları içinde foreach ile gezinmemizi sağlayan arabirimdir. Tek bir metota sahiptir, GetEnumarator(). Bu metot ile geriye IEnumarator arabirimi türünde bir numaralandırma nesnesi döner. Bu nesne aracılığı ile grup elemanları döngüye sokulur.
IEnumarator Interface : Koleksiyondaki her bir elemana erişmemizi sağlayan arayüzdür. MoveNext() ve Reset() isminde iki metotu vardır ayrıca Current isminde bir özelliği bulunmaktadır. MoveNext() ile bir gruptaki bir sonraki elemana erişebiliriz. Reset() ile döngü işlemi sıfırlanır ve listenin başına dönülür. Current ise listenin o anki elemanını döndürür.
ICollection Interface : Bütün koleksiyon sınıflarının desteklediği arabirimdir. Bir koleksiyonda olabilecek en temel metotları ve özellikleri içermektedir. IEnumarable arayüzünden inheritence almıştır. CopyTo gibi metodu Count, IsSynchronized, SyncRoot gibi özellikleri vardır.
IList Interface : Koleksiyon içindeki elemanlara indeksleri ile erişmeyi sağlayan arayüzdür. ICollection ve IEnumarable arayüzlerinden türemiştir. Remove() , Add() , Insert(), RemoveAt(), Clear(), Contains(), IndexOf gibi metotları IsFixedSize, IsReadOnly gibi özellikleri vardır.
IDictionary Interface : Key ? Value mantığında çalışır. Oluşturulan grup elemanlarının her birisi anahtar ve değer olmak üzere iki değer içermektedir. HashTable sınıfının kullanmış olduğu bir arayüzdür. ICollection ve IEnumarable arayüzlerinden inheritence almıştır, dolayısı ile aynı metotlar kullanılabilir. Add(), Remove(), Clear(), Contains() gibi metotlar, IsFixedSize, IsReadOnly, Item, Keys ve values gibi özellikler barındırır.
IDictionaryEnumarator : Bu arayüz ile anahtar değerli ikili çiftlerden sadece değer, sadece anahtar yada hem değer hem anahtar çiftlerini elde edebiliriz, bunun için Value, Key ve Entry isimli özellikleri içerir.
IComparer Interface : Bu arayüz ile iki nesnenin ne şekilde karşılaştırılacağı uygulanabilir, Compare() metotunu barındırır.
IHashProvider Interface : Bu arayüz Object sınıfındaki GetHashCode() metodunu tanımlamaktadıri HashTable sınıfı ile çalışabilmek için kod üretir.
Koleksiyonlar için bu anlatılanları şöyle şekilsel olarak özetleyelim :
Teorik bilgi olarak bunları anlatmaya çalıştım, bir sonraki yazılarda da bu koleksiyon sınıflarına tek tek giriş yapar ve örnekler sunarız.
Etiketlercollection collections koleksiyon nesneleri koleksiyonlar kolleksiyonlar
Onceki Reflection – Yansıma