C#学习之索引器

索引器是c#中提供允许像访问数组一样访问类或结构的实例的一种方式。索引器类似于属性,不同之处在于他的访问器采用参数,并用this关键字来定义。

1. 索引器的定义语法:

       private T[] arr = new T[100];

        public T this[int i]
        {
            get
            {
                return arr[i];
            }

            set
            {
                arr[i] = value;
            }
        }

 

  1) 访问修饰符,此处是public,索引器的类型和参数类型必须至少如同索引器本身一样是可访问的;

  2)类型T,根据定义的实例类型;

  3)关键字this,如果要为索引器提供一个别的语言可以使用的名字,可以使用name特性:此索引器重命名为ReNamed,不提供名称特性将生成Item默认名称;

        [System.Runtime.CompilerServices.IndexerName("ReNamed")]
        public int this[int index]
        {
        }

  4)get,set访问器方法,以及所以index. index类型可以不是int类型,像string;

 

2. 接口中的索引器
  1)与类索引器不同,接口中的索引器不能使用修饰符,访问器没有体,表示索引器是读写,只读还是只写;

  2)当类使用同一索引器签名实现一个以上的接口时,为避免多义性,需要使用完全限定名,即用接口名.this[int index], 如:

interface test1
{
    int this[int index]
    {
        get;
        set;
    }
}

interface test2
{
    int this[int index]
    {
        get;
        set;
    }
}

class Program
{
    int[] arr=new int[100];
    public int test1.this[int index]
    {
        get
        {
            return arr[index];
        }
        set
        {
            arr[index] = value;
        }
    }
}


3. 属性和索引器的区别:

属性

索引器

允许像调用公共数据成员一样调用方法,

允许对一个对象本身使用数组表示法来访问该对象内部集合中的元素。

可以为静态成员或实例成员。

必须为实例成员。

属性的 get访问器没有参数,属性的 set访问器包含隐式 value 参数

索引器的 get, set 访问器具有与索引器相同的形参表。

支持对自动实现的属性使用短语法。

不支持短语法。

 

 

 

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