indexer ها در C#

indexer ها در C#

در C#‌ایندکسرها با استفاده از این کلمه کلیدی this تعریف می شوند. ایندکسرها در C#‌ روی هر دو نوع class و struct‌ قابل اعمال هستند.

تعیرف یک ایندکسر به شما اجازه می دهد کلاسی تعریف کنید که آیتم های آن به صورت آرایه در دسترس باشند. اشیا آن کلاس می توانند با استفاده از عملگر دسترسی آرایه [] مورد دسترسی قرار بگیرند.

ایجاد Indexer

<modifier> <return type> this [argument list]  
{  
    get  
    {  
        // your get block code  
    }  
    set  
    {  
        // your set block code  
    }  

در کد بالا

<modifier>

می تواند private, public, protected, internal باشد.

<returen type>

می تواند هر نوع valid ی در c#‌ باشد

this

کلمه کلیدی خاص در C# برای نشان دادن اینکه شی کلاس جاری است

[argument list]

پارامترهای ایندکسر را مشخص می کند.

نکات مهم که در رابطه با ایندکسر ها باید به یاد داشته باشیم:

۱- ایندکسرها همیشه با کلمه کلیدی this ایجاد می شوند.

۲- Parameterized propertyُ، ایندکسر نامیده می شود.

۳- ایندکسرها از طریق دسترسی دهندهای get set برای عملگر [] پیاده سازی می شوند.

۴- در ایندکسر مجاز به استفاده از modifier‌های ref و out‌ نیستیم.

۵- لیست پارامتر formal ایندکسر مطابق با متد است و حداقل باید یک پارامتر مشخص شده باشد.

۶- ایندکسر عضو نمونه ای است که نمی تواند static‌باشد اما property می تواند static باشد.

۷- ایندکسر ها روی گروهی از المان ها استفاده می شوند. 

۸- ایندکسر با امضای آن شناسایی می شود در حالیکه property با نامش شناسایی می شود.

۹- ایندکسرها از طریق ایندکس شان استفاده می شوند در حالیکه property ها با نام شان دسترسی می شوند.

۱۰- ایندکس می تواند overload شود.

ایندکسر مانند property ها با توابع get و set تعریف می شود. تفاوت اصلی این است که نام ایندکسر کلمه کلیدی this است.

مثال زیر نحوه استفاده از ایندکسر را نشان می دهد:

using System;  
namespace Indexer_example1  
{  

     class IndexerClass  
     {  
            private string[] names = new string[10];  
            public string this[int i]  
            {  
                get  
                {  
                    return names[i];  
                }  
                set  
                {  
                    names[i] = value;  
                }  
            }  
     }  
    class Program  
    {  
        
        static void Main(string[] args)  
        {  
            IndexerClass Team = new IndexerClass();  
            Team[0] = "Rocky";  
            Team[1] = "Teena";  
            Team[2] = "Ana";  
            Team[3] = "Victoria";  
            Team[4] = "Yani";  
            Team[5] = "Mary";  
            Team[6] = "Gomes";  
            Team[7] = "Arnold";  
            Team[8] = "Mike";  
            Team[9] = "Peter";  
            for (int i = 0; i < 10; i++)  
            {  
                Console.WriteLine(Team[i]);  
            }  
            Console.ReadKey();  
        }  
    }  
}

تفاوت بین ایندکسر ها و proprety‌ ها

Indexer Property
ایندکسر با کلمه کلیدی this ایجاد می شود نیازی به این کلمه کلیدی ندارد
ایندکسها با امضا شناسایی می شوند propery ها با نام شان شناسایی می شوند
ایندکسرها با اندیس ها دسترسی می شوند propery‌ها با نام شان دسترسی می شوند
ایندکس ها عضوی از شی هستند، لذا نمی توانند static‌ باشند property ها می توانند علاوه بر اینکه اعضای نمونه باشند static هم باشند
دسترسی دهنده get یک ایندکسر لیست پارامتر formal ایندکسر را دارد دسترسی دهنده get یک property پارامتری ندارد
دسترسی دهنده set یک ایندکسر لیست پارامتر formal ایندکسر را علاوه برا پارامتر مقدار دارد. دسترسی دهنده set یک property شامل پارامتر مقدار ضمنی است.

ایندکسر ها معمولا برای کلاس هایی استفاده می شوند که ساختارداده هایی مثل آرایه، لیست، map و غیره را ارائه می کنند.

منبع C-sharpcorner