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.