Son Haberler
Anasayfa / Yazılım / C# / Indexers (İndeksleyiciler)

Indexers (İndeksleyiciler)

Indexers (indeksleyiciler) yazım biçimi olarak properties (özelliklere) benzemektedirler. Indexers bir nesnenin dizi gibi indekslenmesini sağlar. Tıpkı bir array (dizi) tanımladığımız da bu array içinde hangi indeksteki elemanı görmek istiyorsak çağırdığımız gibi, indexer?lar da Class?ımızın bir array gibi olmasını sağlamaktadır. Örneğin class içindeki 7. Elemanı getir dendiğinde bu elemanı rahatlıkla getirebiliriz. Tanımlanması properties gibi sadece fazladan bir geri dönüş tipi ve köşeli parantezle aldığı parametreyi söylüyoruz. Indexers aynı methods gibi overload edilebilmektedir.

Örnek bir indexer tanımlaması :

public string this [ int Indeks ]
get {
}
set {
}

Buradaki public deyiminden sonraki kısım indeksleyicinin eriştiği koleksiyonun türünü tanımlar, örnekte string olarak belirttim. Köşeli parantez içindeki int Indeks parametresi tam sayı olmak zorunda (int) değildir fakat tam sayı olması beklenir.

Örnek bir kod parçacığı yaparsak :

Sadece bu şekilde kullanılması biraz anlamsız olabilir, çünkü indeksleyici tanımlamadan da diziyi yönetebilirdik. Fakat buradaki sadece basit bir örnek, daha geniş bir uygulama da farklı yönetimleri sağlamak için indeksleyicilere ihtiyaç duymak zorunda kalabiliriz. Bir örnek daha yaparsak bu örneğimizde de dizinin kapasitesini öğrenelim. Uygulamamız biraz daha zenginleşsin.

İndeksleyiciler dizi ile ilişkilendirildikleri için ve dizilerde birden fazla boyuta sahip olabildikleri için indeksleyiciler parametre alabilirler. Aynı özellikler gibi hem get ( ) hem de set ( ) yordamlarını içermek zorunda değildir. Sadece get ( ) yordamı olursa bu read-only (sadece okunabilir) , sadece set ( ) yordamı olursa bu write-only (sadece yazılabilir) indeksleyici olur.

İndeksleyiciler, özelliklerden farklı olarak yeniden yüklenebilir yani overload edilebilir ancak statik olarak tanımlamazlar.

2 yorum

  1. örnek konu için çok uygun. ancak 12. eleman istendiğinde indexer’in get bloğundaki consol.readline fonksiyonundan ötürü programın takılacağını düşünüyorum.

    teşekkürler.

  2. Bilgilendirme için teşekkürler Yaşar Bey.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir