تبلیغات

اورلود کردن ایندکسرها در سی شارپ (Overloading of Indexers)

ایندکسرهای سی شارپ را نیز می‌توان همانند متدها اورلود (Overload) کرد. حالا این یعنی چه؟! یعنی اینکه بتوانیم چندین نوع ایندکسر در کلاس تعریف کنیم! همانند متدها که می‌توان چندین نوع را با یک نام تکراری اما با پارامترهای مختلف تعریف کرد. مثلا تصور کنید که یک ایندکسر برای وردی‌های int و یک ایندکسر برای ورودی‌های string تعریف کنید.

مثال 1

کد زیر را در نظر بگیرید:

class FuLLKadeIndexer
{
    private string[] word = new string[2];

    public string this[int flag]
    {
        get
        {
            string temp = word[flag];
            return temp;
        }
        set
        {
            word[flag] = value;
        }
    }

    public string this[float flag]
    {
        get
        {
            string temp = word[1];
            return temp;
        }
        set
        {
            word[1] = value;
        }
    }
}

دو ایندکسر تعریف شده است که یکی از آنها یک ورودی از نوع int دریافت کرده و دیگری یک ورودی از نوع float! هردویشان نیز خروجی string برمی‌گردانند.

در کد بالا یک آرایه‌ی رشته‌ای داخل کلاس تعریف شده است که سه خانه دارد. در حالتی که ایندکسر int دریافت کند، آن را را برای ایندکس همین آرایه استفاده کردیم؛ ولی اگر float دریافت کند، عدد یک را برای ایندکس آرایه استفاده کردیم! البته این یک مثال است و اجباری نیست که حتی اصلا منطق دو ایندکسر شبیه به هم باشد و می‌توانند برای خودشان کار جداگانه‌ای انجام دهند.

از کلاس بالا برای مثال بصورت زیر استفاده کردیم:

class Program
{
    static void Main(string[] args)
    {
        FuLLKadeIndexer Obj = new FuLLKadeIndexer();

        Obj[0] = "Hello";

        Obj[1.0f] = " Geeks";

        Console.WriteLine(Obj[0] + Obj[1.0f]);
    }
}

خروجی:

Hello Geeks

مثال 2

اجازه دهید در مثال زیر، برای یکی از ایندکسرها تنها از get استفاده کنیم (یعنی فقط خواندنی شود) اما برای ایندکسر دیگر، هردو را خواهد داشت:

class FuLLKadeIndexer
{
    private string[] str = new string[2];

    public string this[int flag]
    {
        get
        {
            string temp = str[flag];
            return temp;
        }
        set
        {
            str[flag] = value;
        }
    }
    public string this[string flag]
    {
        get
        {
            return " FuLLKade.COM.";
        }
    }
}

جالب اینکه در ایندکسر دوم، اصلا با پارامتر ورودی کاری نداریم و همواره یک خروجی برمی‌گردانیم 😀 (البته این مثمال کاربردی نیست و توضیه نمی‌شود و صرفا جهت درک آن گفته شد)

برای مثال بصورت زیر از کلاس بالا استفاده می‌کنیم:

class Program
{
    static void Main(string[] args)
    {
        FuLLKadeIndexer Obj = new FuLLKadeIndexer();

        Obj[0] = "This is";

        Console.WriteLine(Obj[0] + Obj["GFG"]);
    }
}

خروجی این کد:

FuLLKade.COM
درس قبلی (ایندکسرها)

درباره نویسنده

هادی اکبرزاده

[ مدیر فول کده ]

یه کلاسِ تعریف نشده ... فقط برای ارتباط کاری تلگرام پیام بدید ...

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

نظرات ثبت شده بدون دیدگاه

توضیحات پیشنهادی نظرات اشتراک