C# ICollection Interface

Merhaba arkadaşlar,

C# Collection yazımda koleksiyonlar hakkında genel hatlarıyla bilgi sahibi olduk. C# Collection yazıma buradan ulaşabilirsiniz. Bu yazımda System.Collection isim alanında (namespace) bulunan ICollection arayüzünü ele alacağız. Bu arayüzü kullanarak kendi koleksiyon tabanlı sınıfımızı oluşturarak işin mutfağında neler dönüyor onları pekiştireceğiz.

Şimdi ICollection tanımına dönecek olursak, bir koleksiyonda bulunan en temel metotları ve özellikleri içerir. ICollection IEnumerable arayüzünü uygulamaktadır. Yani ICollection arayüzünü uygulayan her nesne kendi içinde barındırdığı koleksiyon nesnesine foreach yapısı ile erişebilir.

Hadi şimdi ICollection arayüzünü kullanarak kendi koleksiyonumuzu geliştirelim. Şimdi MyCollection diye bir sınıf oluşturuyoruz ve ICollection arayüzünü uyguluyoruz. Bu arayüzü uyguladığımız için ve koleksiyon nesnemizin düzgün çalışabilmesi için uygulamamız gereken bazı özellikler ve metotlar var.

Şimdi koleksiyon özelliğini kazandırdığımız sınıfımıza aynı tür veya farklı türden elemanları bir arada tutacak bir özelliğe ihtiyacımız var. Bunun için bütün veri tiplerinin atası olan object nesnesini kullanacağız.

Aynı tür veya farklı türden nesneleri bir arada tutmak için object türünden bir array tanımladık. Yapıcı method ile varsayılan olarak 8 elemanlı bir dizi yaratılır.

Koleksiyon nesnemizdeki elemanlara arasında ilerlemek için IEnumerable arayüzünün metodu olan GetEnumerator() ile bir IEnumerator geriye döndürmemiz gerekiyor. IEnumerable ve IEnumerator arayüzlerini hatırlamıyorsan bu yazıma göz at derim. MyCollection sınıfındaki GetEnumerator() methodundaki yield anahtar sözcüğü dikkatinizi çekmiştir. Bu anahatar sözcüğü ile aslında koleksiyon nesnesi oluşturabiliyoruz. Yield anahtar sözcüğüne daha sonra detaylı değineceğim.

Tek eksiğimiz koleksiyonumuza ekleyeceğimiz nesnelerimiz için bir methoda ihtiyacımız var. Hemen bir Add(object item) methodunu sınıfımıza ekliyoruz ve kodumuzu refactor ediyoruz.

Şimdi asıl konumuza geri dönersek MyCollection sınıfımızı bir koleksiyon gruplamak için hazır duruma getirdik. Şimdi bir örnekle oluşturduğumuz bu nesnenin sonuçlarına bakalım.

Bu örnekle ICollection arayüzünü uygulayıp en temel anlamda kendi koleksiyon sınıfımızı nasıl oluşturduğumuzu görmüş olduk.

Bir sonraki yazımda System.Collection isim alanında bulunan IComparer arayüzünnden bahsedip örnek bir uygulama ile pekiştiriyor olacağız.

Kaynaklar:

Her Yönüyle C# 7.0, Sefer Algan, Pusula Yayincilik

https://docs.microsoft.com/en-us/dotnet/api/system.collections.icollection?view=netframework-4.8

https://docs.microsoft.com/tr-tr/dotnet/csharp/programming-guide/concepts/collections

Leave a Comment