C#’ta Indexer Kavramı
Örneğin Array’lerden bildiğiniz üzere bazı objeler üzerinde degisken[0], degisken[1] şeklinde değer alabilmek ve değer atamak mümkündür.
Peki kendi yazdığınız bir class içerisinde bunu nasıl yapabilirsiniz? Bunun için C# özel bir keyword içeriyor: this. “this” keyword’unun içinde bulunduğumuz class’ın o anki instance’ına erişmek için kullanıldığını hepimiz biliyoruz fakat aşağıdaki örnekte de görebileceğiniz üzere bu keyword’ün başka bir kullanımı daha var.
using System.Web; namespace Sunali { public class CSharpIndexer { private string[] data = new string[4]; public string this[int index] { get { return data[index]; } set { data[index] = value; } } public void WriteToStream(HttpResponse response) { for (int i = 0; i < data.Length; i++) { response.Write(this[i] + ""); } } } }
Aşağıdaki kod bir ASPX dosyasının içeriğidir…
namespace Sunali { public class ClassToUserIndexer : System.Web.UI.Page { protected override void OnLoad(EventArgs e) { DoSomething(); base.OnLoad(e); } public void DoSomething() { CSharpIndexer csi = new CSharpIndexer(); csi[0] = "Ahmet"; csi[1] = "Ali"; csi[2] = "Ayşe"; csi[3] = "Mehmet"; csi[4] = "Coşkun"; csi.WriteToStream(Response); } } }
Not: Örnekte görmüş olduğunuz class’a ait indexer “string” değer döndürmek ve kabul etmek üzere yazıldı fakat siz “this” keyword’ünden önce bulunan “string” tipi yerine istediğiniz tipi yazarak indexer özelliğinden faydalanabilirsiniz.