İçindekilerGirişİndex
YukarıİlkÖncekiSonrakiSon
Geriİleri
Yazdır
Zafer Teker
tekzaf@yahoo.com

C#.Net'te Indexer

C# dilinin değişik özelliklerinden biri Indexer özelliği. Bu özellik ile istediğin her class bir diziymiş gibi kullanabiliyoruz. Bir class'ın içindeki bir diziye veya collection'a [] operatorunu kullanarak erişilebiliyor.

Örneğin Sinif class'ımız olsun. Bu class öğrencilerin numaralarını bir dizi şeklinde tutabilir. Biz bir sınıfın öğrencilerinin numaralarına aşağıdaki gibi erişebiliriz.

Sinif sinif=new Sinif();
int ilkNo=sinif[0];
sinif[3]=123;

yukarıdaki kodda sinif[0] ile o sinifaki ilk numaraya erişmiş oluyoruz. Daha sonra 3. öğrencinin numarasını 123 yapıyoruz.

Sinif class'ını bu şekilde kullanabilmek için Sinif class'ına aşağıdaki gibi bir property eklenmelidir.

public int this[int i]{
	get{
		// bir eleman döndürülmeli
	}
	set{
		// verilen değer set edilmeli
	}
}

yukarıdaki gibi bir property Sinif class'ına eklendiğinde artık [] operatörünü kullanabiliriz.

aşağıda Sinif class'ı görülmektedir. Sinif class'ına bir main ekleyerek bir test yapılmaktadır.

Sinif.csİndir Göster Gizle Kopar Satır Gizle Satır Göster
  1 using System;
  2 namespace TestApp
  3 {
  4   public class Sinif
  5   {
  6     private int[] ogrenciNumaralari;
  7     public int[] OgrenciNumaralari{
  8       set{
  9         ogrenciNumaralari=value;
 10       }
 11     }
 12     public int Length{
 13       get{
 14         return ogrenciNumaralari.Length;
 15       }
 16     }
 17     public int this[int i]{
 18       get{
 19         if(i>-1&&i<ogrenciNumaralari.Length){
 20           return ogrenciNumaralari[i];
 21         }else{
 22           throw new IndexOutOfRangeException("Hatalı İndex");  
 23         }
 24       }
 25       set{
 26         if(i>-1&&i<ogrenciNumaralari.Length){
 27           ogrenciNumaralari[i]=value;
 28         }else{
 29           throw new IndexOutOfRangeException("Hatalı İndex");  
 30         }
 31       }
 32     }
 33     public static void Main(string[] args){
 34       int[] numaralar=new int[]{12,13,45,56,78,90};
 35       Sinif sinif=new Sinif();
 36       sinif.OgrenciNumaralari=numaralar;
 37       sinif[0]=10;
 38       for(int i=0;i<sinif.Length;i++){
 39         Console.WriteLine(sinif[i]);
 40       }
 41     }
 42   }
 43 }

Sonuç

Indexer özelliği ilginç bir özellik olmasına rağmen fazla kullanılması gerekmiyor . Belki tek yararı kullanımı daha kolaylaştırıyor olması. İndexer yapmak yerine Sinif class'ına verNumara(int index) şeklinde bir method ekleyebilirdik. Set etmek içinse tabi setNumara(int index,int number) şeklinde bir method eklememiz gerekir. Bu kullanımı biraz daha zorlaştırıyor o kadar. Yine de karar programcıya ait.

Dosya Listesi

İçindekilerGirişİndex
YukarıİlkÖncekiSonrakiSon
Geriİleri
Yazdır