C# 索引器

所谓索引器就是一类特殊的属性,通过它们你就可以像引用数组一样引用自己的类。索引器非常类似于我们前面讲到的属性,但索引器可以有参数列表,且只能作用在实例对象上,而不能在类上直接作用。

索引器和属性有点类似,但却存在着差别如

  1. 属性在类中必须拥有唯一名称,而类中定义的索引器都必须拥有唯一的签名(signature)或者参数列表(索引器重载的实现)。
  2. 属性可以定义为static的,但是索引器去必须在实例化后在可以使用
  3. 为索引器定义的访问函数可以访问传递给索引器的参数,而属性访问函数则没有参数。 

索引器结构:

<modifier> <return type> this [argument list]
  ...{
     get
     ...{
       // Get codes goes here
      }
     set
     ...{
       // Set codes goes here
       }
   }

注:

  modifier:修饰词,如private, public, protected or internal

  this:在C#中this是一个特殊的关键字,它表示引用类的当前实例。在这里它的意思是当前类的索引。

  argument list:这里指索引器的参数。

class Sample
    {
        public string indexValue;
        public string this[int index]
        {
            get { return string.Format("返回的索引号是:{0}", index); }
            set { indexValue = value; }
        }

    }

  当然除了类中可以定义索引器外,接口也是可以的,如IList和 IDictionary集合接口都声明了索引器以便访问其存储的项目

  在为接口声明索引器的时候,记住声明只是表示索引器的存在。你只需要提供恰当的访问函数即可,不必包括范围修饰符。以下代码把索引器声明为接口ISample的一部分:

interface ISample { 
string this[int index] 
{ 
get; 
set; 
} 

  

相应实现的类则必须为ISample(继承的接口)的索引器具体定义get和set访问函数。 

class SampleCollection<T>
{
    private T[] arr = new T[100];
    public T this[int i]
    {
        get
        {
            return arr[i];
        }
        set
        {
            arr[i] = value;
        }
    }
}

  

 

原文地址:https://www.cnblogs.com/zk2003/p/2978324.html