C# 索引器

以下为个人理解,不喜勿喷:

索引器主要包含三个知识点:

1.索引器是针对于数组的属性

C#中属性是针对于字段的,通过set和get限制字段的访问与赋值。

同样,索引器也具有set和get,可以通过set和get限制对数组的访问与赋值。

2.索引器能够建立类与类内数组的索引

为便于解释,我们先建立一个包含数组a和b的类c

class C
{ public int[]a=new int[5];
  public int[]b=new int[5];
  public int this[int index]
    {
      get{return a[index];}
      set{a[index]=value;}
    }
}

在没有建立索引器时,要访问a[1]我们需要c.a[0],但在建立索引器之后,我们可以通过c[0]直接访问a[0],代码中建立了数组a与类c的索引,需要注意的是,我们可以建立a与c的索引,也可以建立b与c的索引,但是不能同时建立a,b与c的索引(这也很好理解,假定同时建立了a,b与c的索引,那么c[0]代表的是a[0]还是b[0]呢?)

3.索引器可以重载

private string[] namelist = new string[size];
public string this[int index]
      {
         get
         {
            string tmp;

            if( index >= 0 && index <= size-1 )
            {
               tmp = namelist[index];
            }
            else
            {
               tmp = "";
            }

            return ( tmp );
         }
         set
         {
            if( index >= 0 && index <= size-1 )
            {
               namelist[index] = value;
            }
         }
      }
      public int this[string name]
      {
         get
         {
            int index = 0;
            while(index < size)
            {
               if (namelist[index] == name)
               {
                return index;
               }
               index++;
            }
            return index;
         }

      }

代码摘自菜鸟教程-C#教程-C#索引器-重载索引器,网址:C# 索引器(Indexer) | 菜鸟教程 (runoob.com)

这个例子(只放了索引器和数组)中就重载了索引器,使访问时既可以c[0]通过索引号0访问,也可以通过c["name"]索引值访问。

另外,索引器还可以多参,似乎多个也是用来指定访问的,类似于重载中提到的,多参我也不太懂,就不写了。

还有一个问题就是:一个类只能与一个数组建立索引吗?即使有多个不同类型的数组存在?

希望大佬帮忙解答一下,感谢。

你可能感兴趣的:(C#,c#)