www.doronamir.com

E-mail: doron@doronamir.com

 

 

מה זה אינדקסר ?  Indexers

 

האינדקסר מאפשר לבנות אובייקט המנהל איברים באופן סידורי בדומה למערך

כלומר אובייקט המייצג רצף תאים ומאפשר פנייה לתא מסויים ע"י אינדקס מספרי

או אינדקס מחרוזתי .

 

בדוגמה הנ"ל ניתן לראות תכנית המגדירה טיפוס MyIndexer

טיפוס זה מכיל 3 משתני מחרוזת string ואינדקסר

אינדקסר  בדומה ל Properties בנוי מ set ו get

ההגדרה של ה indexer הינה :

public ReturnType this[IndexType temp]

{

get}}

set}}

}

 

באינדקס המוגדר בתכנית ניתן לפנות לתאי האינדקסר ע"י טקסט ולא מספר

התא הראשון הינו First השני Second השלישי Trainer

האינדקסר מכיל  2 משפטי switch  משפט ה get שולף את הערכים מהתאים

ומשפט ה set מאתחל אותם.הפניה את מבנה מערך זה מתבצע ע"י שם התאים

ולא לפי מספר התאים.

 

במקרה לפנייה לתא במערך שאינו קיים נעלה חריג

IndexOutOfRangeException

 

התכנית מדפיסה את האינדקסר המכיל 3 תאים ומבקשת לאתחל את המערך בשנית

ומדפיסה את המחלקה החדשה.

 

(בהמשך קיימת תכנית נוספת המדגימה אינקסר בעל אינקס מספרי בדומה למערך)

 

// www.doronamir.com

 

using System;

 

namespace Indexer2

{

    public class MyIndexer

    {

        string a0="Hello",a1="World",a2="Doron Amir";

 

        public string this[string temp]

        {

            get

            {

                switch(temp)

                {

                    case "First":return a0;

                    case "Second":return a1;

                    case "Trainer":return a2;

                       

                    default:throw new IndexOutOfRangeException("Out of range");

                }

            }

            set

            {

                switch(temp)

                {

                    case "First":a0=value;break;

                    case "Second":a1=value;break;

                    case "Trainer":a2=value;break;

               

                    default:throw new IndexOutOfRangeException("Out of range");

                }

            }

        }

    }

 

    class MainClass

    {

        static void Main()

        {

           

            MyIndexer Vector = new MyIndexer();

            Console.WriteLine( Vector["First"]);

            Console.WriteLine( Vector["Second"]);

            Console.WriteLine( Vector["Trainer"]);

           

 

            Console.WriteLine( " Enter Vector[First] ");

            Vector["First"]=Console.ReadLine();

 

            Console.WriteLine( " Enter Vector[Second]");

            Vector["Second"]=Console.ReadLine();

 

            Console.WriteLine( " Ente Vector[Trainer]");

            Vector["Trainer"]=Console.ReadLine();

 

            Console.WriteLine( Vector["First"]);

            Console.WriteLine( Vector["Second"]);

            Console.WriteLine( Vector["Trainer"]);

            Console.ReadLine();

 

        }

    }

}

 

תוצאה

Hello

World

Doron Amir

 

 Enter Vector[First]

C#

 Enter Vector[Second]

VB.NET

 Ente Vector[Trainer]

Doron

 

C#

VB.NET

Doron

 

 

דוגמה נוספת עבור אינדקסר הכולל אינדקס מספרי :

 

// www.doronamir.com

 

using System;

 

namespace Indexer

{

    public class MyIndexer

    {

        int a0=10,a1=20,a2=30,a3=40,a4=50;

 

        public int this[int temp]

        {

            get

            {

                switch(temp)

                {

                    case 0:return a0;

                    case 1:return a1;

                    case 2:return a2;

                    case 3:return a3;

                    case 4:return a4;

                    default:throw new IndexOutOfRangeException("Out of range");

                }

            }

            set

            {

                switch(temp)

                {

                    case 0:a0=value;break;

                    case 1:a1=value;break;

                    case 2:a2=value;break;

                    case 3:a3=value;break;

                    case 4:a4=value;break;

                    default:throw new IndexOutOfRangeException("Out of range");

                }

            }

        }

    }

 

    class MainClass

    {

        static void Main()

        {

            int i;

            MyIndexer Vector = new MyIndexer();

            for(i=0;i<5;i++)

            {

                Console.Write("Vector[{0}]={1} ",i,Vector[i]);

            }

            Console.WriteLine();

            i=0;

            do

            {

            Console.WriteLine("Enter Value[{0}]",i);

            Vector[i]=int.Parse (Console.ReadLine()) ;

            i++;

            }while(i<5);

 

            for(i=0;i<5;i++)

            {

                Console.Write("Vector[{0}]={1} ",i,Vector[i]);

            }

            Console.ReadLine();

       

        }

    }

}

 

תוצאה

Vector[0]=10 Vector[1]=20 Vector[2]=30 Vector[3]=40 Vector[4]=50

Enter Value[0]

11

Enter Value[1]

22

Enter Value[2]

33

Enter Value[3]

44

Enter Value[4]

55

Vector[0]=11 Vector[1]=22 Vector[2]=33 Vector[3]=44 Vector[4]=55