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.

Leave a Reply

Your email address will not be published. Required fields are marked *