اینجا میتونی برنامه نویسی ویندوز رو به طور کاملا رایگان یاد بگیری
2 سال پیش / خواندن دقیقه

Indexer در زبان سی شارپ

Indexer نوع خاصی در سی شارپ است که بسیار شبیه property ها است. این نوع خاص به کلاس ها و یا ساختارها اجازه می‌دهد به کالکشن های داخلی خود به روش دسترسی به آرایه ها دسترسی پیدا کنند. در این فصل با Indexer ها در سی شارپ آشنا میشویم.

Indexer

Indexer ها از نظر  قاعده دستوری شبیه property ها هستند اما در قاعده دستوری آنها از کلمه کلیدی this هم استفاده میشود :

Public <return type> this[<parameter type> index]
{
                Get{
                // return the value from the specified index
    }
                Set{
                // set values at the specified index
    }
}

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

class StringDataStore
    {
        private string[] strArr = new string[10]; // internal data storage
        public string this[int index]
        {
            get
            {
                if (index < 0 && index >= strArr.Length)
                    throw new IndexOutOfRangeException("Cannot store more than 10 objects");
                return strArr[index];
            }
            set
            {
                if (index < 0 && index >= strArr.Length)
                    throw new IndexOutOfRangeException("Cannot store more than 10 objects");
                strArr[index] = value;
            }
        }
    }
class Program
    {
        static void Main(string[] args)
        {
            StringDataStore strStore = new StringDataStore();
            strStore[0] = "One";
            strStore[1] = "Two";
            strStore[2] = "Three";
            strStore[3] = "Four";
            for (int i = 0; i < 10; i++)
                Console.WriteLine(strStore[i]);
        }
    }

خروجی نمونه مثال فوق به شکل زیر است :

One Two Three Four

در نمونه مثال بالا کلاس StringDataStore یک indexer را برای آرایه داخلی خود پیاده سازی کرده است. بنابراین اکنون شی StringDataStore می‌تواند همچون یک آرایه برای اضافه کردن و واکشی داده های رشته استفاده شود. در نمونه مثال بالا از آرایه ای رشته ای استفاده کرده ایم اما شما می توانید از هر نوع کالکشن دیگری که مورد نیازتان هست استفاده کنید.

نسخه های متفاوت از Indexer

میتوان با مشخص کردن نوع های مختلف برای Indexer نسخه های متفاوتی از آن را ایجاد کرد. نمونه مثال زیر نشان می‌دهد که چطور یک Indexer میتواند با دو نوع string و int کار کند :

class StringDataStore
{
    
    private string[] strArr = new string[10]; // internal data storage
    public StringDataStore()
    {
    }
    public string this[int index]
    {
        get
        {
        if (index < 0 &&  index >= strArr.Length)
        throw new IndexOutOfRangeException("Cannot store more than 10 objects");
        return strArr[index];
        }
        set
        {
            if (index < 0 &&  index >= strArr.Length)
            throw new IndexOutOfRangeException("Cannot store more than 10 objects");
            strArr[index] = value;
        }
    }
    public string this[string name]
    {
        get
        {
            foreach (string str in strArr){
                if(str.ToLower() == name.ToLower())        
                    return str;
                }
                    
            return null;
        }
    }
}
class Program
{
    static void Main(string[] args)
    {
        StringDataStore strStore = new StringDataStore();
        strStore[0] = "One";
        strStore[1] = "Two";
        strStore[2] = "Three";
        strStore[3] = "Four";
        
        Console.WriteLine(strStore["one"]);
        Console.WriteLine(strStore["two"]);
        Console.WriteLine(strStore["Three"]);
        Console.WriteLine(strStore["FOUR"]);
    }
}

خروجی نمونه مثال  فوق به شکل زیر است :

One Two Three Four

 

ایجاد کد Indexer به صورت خودکار در ویژوال استودیو

ویژوال استودیو یک راه میانبر را برای ایجاد خودکار Indexer فراهم می‌آورد که در این صورت نیاز نیست به صورت دستی همه آن را تایپ کنید. برای این کار کافیست کلمه Indexer را نوشته و سپس کلید Tab را فشار دهید. در این صورت ویژوال استادیو یک قالب Indexer را برای شما ایجاد خواهد کرد :
Indexer در زبان سی شارپ



شاید از نوشته‌های زیر خوشتان بیاید
نظر خود را درباره این پست بنویسید ...

منوی سریع