Bu yazıda .NET 2.0 ile birlikte gelmiş ve .NET dillerinin üstünlüğünün bir özelliği olarak görülen Generic veri tiplerini işleyeceğiz. Öncelikle konuyla ilgili koleksiyon sınıfları hakkında bir özet geçmemiz faydalı olacaktır.
Bilindiği gibi .Net Framework, koleksiyonları tanımlamak ve amacına uygun kullanmak için birçok sınıf sunar. System.Collections namespace’in altında bulunan bu sınıflar, ArrayList, HashTable, SortedList, Queue, Stack ve BitArray dır. Koleksiyonlar, Array kullanımına göre daha esnek ve dinamik bir yapıya sahiptir.
ArrayList, Array ve koleksiyon sınıflarının bileşimi gibi tanımlanabilir. Eleman ekleme ve işlemlerinde kolaylık sağlar. Index yöntemiyle elemanlara erişir.
HashTable, index yöntemi yerine key-value mantığını kullanılır. Her elemanın tekil bir key değeri vardır ve elemanlara erişilirken bu key değeri kullanılır.
SortedList, HashTable gibi key-value mantığını kullanır. En büyük avantajı dizinin her zaman sıralı olmasıdır. Eleman eklendikçe SortedList, elemanları yeniden sıralayıp diziyi şekillendirir. Bu da bazen performans kaybına neden olabilir. Bu yüzden belki de dışardan bir dizi oluşturup bir kere de SortedList’in içine atmak daha uygun düşecektir.
Stack, “son giren ilk çıkar”(LIFO) prensibine dayanan bir nesne depolayıcısı olup eleman ekleme ve çıkarma listenin üst kısmından yapılır. Bunun en güzel örneği üst üste konulmuş tabaklardır. İhtiyaç duyuldukça yığından alınacak tabak, en üstteki yani en son konulmuş tabak olacaktır.
Queue, Stack’in tersi olup “ilk giren ilk çıkar”(FIFO) prensibine göre çalışır. Eleman eklemeleri sondan, çıkarmaları ise baştan yapılır. Bilet kuyruğu, buna örnek olarak gösterilebilir. Bilet alma sırası her zaman kuyruğun başındaki kişiye aittir.
BitArray, nesneler yerine Boolean türündeki bit değerlerini depolamak için kullanılan bir veri yapısıdır.
CollectionBase & DictionaryBase Sınıfları
Yukarıda özet verdiğimiz koleksiyon sınıflarda Object türünde her nesneyi depolayabiliyoruz. Bazı durumlarda koleksiyon nesnesinin sadece bizim belirlediğimiz türdeki nesneleri barındırmasını isteriz. Bu durumda koleksiyonun, tip güvenliğini(type-safe) desteklemesi gerekir. .NET 2.0 bu işlemi, generic denilen özel tanımlama biçimleriyle halletmektedir. .NET’in daha önceki sürümlerinde bu tür işlemleri destekleyen temel koleksiyonlar olan CollectionBase & DictionaryBase sınıfları kullanılmaktaydı. Bu sınıflar, tiplendirilmiş koleksiyon nesneler(strongly-typed collection) için temel teşkil eden abstract (VB.NET’te MustInherit) classlardır. Abstract bir class olması, kendisinden doğrudan bir nesne oluşturulamayacağını anlamına gelir.
ArrayList gibi koleksiyonları oluşturmak için IEnumerable, ICollection ve IList arabirimlerini implement etmiş CollectionBase sınıfı, HashTable gibi key-value düzenini barındıran koleksiyonları oluşturmak için de IDictionary, ICollection ve IEnumerable arabirimlerini implement etmiş DictionaryBase sınıfı temel alınır.
Sonraki yazıda .NET 2.0 ile birlikte tip güvenliğini sağlamak amacıyla geliştirilmiş Generic türünü işleyeceğimiz için burada CollectionBase ve DictionaryBase sınıflarını detaylandırmayacağız.
Generic Türler (Generic Types) -I
Bir Cevap Yazın