C#中索引器的实现 【转】

索引器允许类或者结构的实例按照与数组相同的方式进行索引。索引器类似属性,但不同之处在于它们的访问器采用参数。它可以像数组那样对对象采用下标。它提供了通过索引方式方便地访问类的数据信息的方法。

C#并不将索引类型限制为整数,所以我们可以通过访问器的重载,实现整数索引或者字符串索引。

重载索引器时,要保证形参的数量或形参类型至少有一不同。这一点同C#中方法重载貌似没有什么区别。

下面我们就通过简单的例子,实现整数索引和字符串索引。

在这个例子中,我们需创建两个类 --> Student   Students

Student类中,包含学生基本信息(属性)和一个方法SayHi()

Students类中,包含我们要创建的两种索引器,一个Student类类型的数组

//Student类  

public Class Student

      {        //构造函数 

            public Student(){}  

            public Student(string name,int age,string hobby)   

                  {       

                        this.Name = name;     this.Age = age;    this.Hobby = hobby;    

                   }    //三个属性 (姓名)Name,(年龄)Age,(爱好)Hobby     

                   private string name;    

                   public String Name      

                          {       

                          get{return name;}           set{name = value;}  

                          }     

                     private int age;      

                     public int Age       {           get{return age;}           set{age = value;}       }         

                     private string hobby;    

                     public string Hobby    {        get{return hobby;}            set{hobby = value;}       }     

                //方法     

              public void SayHi()    

                {  Console.WriteLine("大家好,我是{0},今年{1}岁,喜欢 {2}",Name,Age.ToString(),Hobby);    } 

         }  

//Students类 

  Public Class Students 

          {    //加载时初始化stu数组    

            public Students()     

                 {  stu[0] = new Student("rose",21,"dancing");  

                     stu[1] = new Student("jack",22,"reading");       

                     stu[2] = new Student("mimi",21,"singing");   }   

                //Student类类型数组属性    

                  private Student [] stu = new Student[3];     

                   //整数索引器    

                   public Student this[int index]       {get{return stu[index];} }    

                        //字符串索引器    

                  public Student this[string name]    

                            {           

                               get  {  int i ;  bool found = false;  for(i = 0;i < stu.length;i ++)               

                                    { if(stu[i].Name == name)                  

                                         { found = true;  break; } }     

                                      if(found)  { return stu[i]; }                

                                        else  {return null; }  

                                  }     

                             } 

             } 

Public Class Program 

  {      //Main函数中      

           static void Main()   

                      {Students stu = new Students(); 

                        stu[0].SayHi();        //通过索引查找          

                         stu["rose"].SayHi();   //通过姓名查找  

                         Console.ReadKey();  } 

   }

执行结果:

   

乌龟才背着房子过一辈子
原文地址:https://www.cnblogs.com/Yellowshorts/p/2922662.html