Derinlemesine yazılım eğitimleri için kanalımı takip edebilirsiniz...

C# Indexer Yapıları

Bu yazımda C#’ta indexer yapılarından bahsedeceğim.Öncelikle yapının ne olduğundan bahsedeyim.Aslında çoğu yerde kullandığımız yapılardır.Dizilerde indeks numarasına göre çalışırken,SqlDataReader nesnesinde kolonları çekerken ya da bir koleksiyonda elemanlarımıza ulaşırken kullanırız.Mesela SqlDataReader’dan örnek vereyim.SqlDataReader dr adında bir nesnemiz olsun ve bu SqlDataReader’a çekilmiş verilerden istediğim kolona nasıl ulabilirim.dr[“kolonadi”] şeklinde.İşte bu yapıları oluşturmayı göstereceğim.

INDEXER
Bildiğimiz propertyler gibi get ve set blokları vardır.Class içindeki bir dizi ya da koleksiyon yapısının elemanlarını vermeye ya da set etmeye yararlar.
Şimdi aşağıdaki örneği inceleyiniz.

    class Indexer
    {
        int[] sayilar = new int[5];
        public int this[int index]
        {
            get
            {
                return sayilar[index];
            }
            set
            {
                sayilar[index] = value;
            }
        }
    }

Yukarıdaki kodları incelerseniz eğer, sayilar adında int dizisi tanımlanmıştır ve 5 elemanlıdır.(Ben sadece yapıyı teorik olarak gösteriyorum.Basit ama anlaşılır.)Indexer yapısı propertylere çok benzer.Tek fark this[] sözcüğündedir.Indexerımızın parametresine gönderdiğimiz int tipindeki değer, sayilar dizisinde o değere karşılık gelen indeks numaralı elemana gidecektir.Gerekli get ve set işlemini o indekste yapacaktır.Indexer’a isim vermeyiz.Bu şekilde oluşturulurlar.
Şimdi kullanımını görelim.

            Indexer deneme = new Indexer();
            deneme[0] = 3;
            deneme[3] = 4;
            MessageBox.Show(deneme[0] + " " + deneme[3]);

Yukardaki kodu izah edelim.Indexer sınıfından deneme referansı yaratılıyor ve bu referansa Indexer nesnesi bağlanıyor.
deneme[] yazdığımız zaman, köşeli parantez içine girilen sayı Indexer sınıfında oluşturduğumuz Indexerımıza gidiyor ve oradaki sayilar dizininde, o değere denk gelen indeks numaralı elemanı seçiyor.deneme[0] = 3 ve deneme[3] = 4 yazdığım zaman, set bloğunda bu veriler seçilen elemanlara aktarılıyor.Bunları okumaya kalktığımızda da get bloğu çalışıyor.Ve seçilen elemanların değerleri gönderiliyor.(İsterseniz diğer indeksleride doldurabilirsiniz.)

Indexer yapıları Overload edilebilirler.Tek şart parametreleri farklı olmalıdır.Bunuda aşağıdaki kodlarla örnekleyelim.

        public int this[int index]
        { }
        public int this[string elemanadi]
        { }
        public string this[double deneme]
        { }

Yukarıda gördüğünüz gibi bir sınıfın indexerını overload yaptım.
Şimdilik bu kadar.Bir sonraki yazımda görüşmek üzere.
İyi çalışmalar.

Bunlar da hoşunuza gidebilir...

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir