【C#每日一帖】索引器-索引器与数组属性的比较

索引器(Indexer)
索引器容许类或结构的实例按照与数据相同的方式进行索引。索引器相似于属性,不一样之处在于它们的访问器采用参数。因此索引器也被称为有参属性。

示例一: 数组

using System ; 函数

class ArrClass//没有索引器的类
{
private readonly string name;
public ArrClass(string name)
{
this.name = name;
}

public string Name
{
get{return name;}
}
} this


class IndexClass//带索引器的类
{
private string [] name = new string [10];
public string this[int index]
{
get{return name[index];}
set{name[index] = value;}
}
//索引器与属性不一样的是,这里没有属性名,而是用this表示索引。
//索引的定义与方法不一样的是,用方括号[],而不是圆括号(),同时索引的定义中没有方法名,只用this。
//索引的使用像数组,都使用[],但与数组不一样的是,数组的[]中只能使用整数做下标,而索引的[]中能够使用各类类型。
//索引也能够重载,同一个类中的多个索引要求参数列表(签名)必须不一样,即:或者参数个数不一样,或者是参数类型不一样,或者参数类型的顺序不一样。
}
class Test
{
static void Main()
{
//数组类的使用
ArrClass[] a = new ArrClass[10]; 
a[0] = new ArrClass ("张三");
a[1] = new ArrClass ("李四");
a[2] = new ArrClass ("王五");
Console.WriteLine (a[0].Name);
Console.WriteLine (a[1].Name);
Console.WriteLine (a[2].Name);

//索引器的使用
IndexClass b = new IndexClass ();
b[0] = "张三";
b[1] = "李四";
b[2] = "王五";
Console.WriteLine (b[0]);
Console.WriteLine (b[1]);
Console.WriteLine (b[2]);

}
} spa

------------------------- 索引

索引器与数组的比较 get

1>索引器的索引值(Index)类型不受限为整数 string

用来访问数组的索引值(Index),其类型必定为整数,然而索引器能够定义其余类型的索引值。 it

2>索引器容许重载(Overloading) class

一个类并不限制只可以定义一个索引器,只要索引器的函数签名不一样,一个类就能够拥有不少个索引器,你能够重载它的功能。 变量

3>索引器不是一个变量

索引和数组不一样的地方在于,索引器并无直接对应引用数据存储的地方,而数组则有。索引器有get访问器与set访问器,用来指明要读取或写入索引器元素时,须要执行的代码。

---------------------------

索引器与属性的不一样点:

标识方式:属性以名称来标识;索引器则以函数签名来标识。

索引器能够被重载:由于属性时以名称标识的,因此不能被重载;索引器是用函数签名标识的,所以能够重载。

索引器不能够声明为static:属性能够为static,而索引器永远属于实例成员,不能为static

相关文章
相关标签/搜索