索引器(Indexer) 索引器允许类或结构的实例按照与数据相同的方式进行索引。索引器类似于属性,不同之处在于它们的访问器采用参数。所以索引器也被称为有参属性。
示例一:
using System ;
class ArrClass//没有索引器的类 { private readonly string name; public ArrClass(string name) { this.name = name; }
public string Name { get{return name;} } }
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]);
} }
-------------------------
索引器与数组的比较
1>索引器的索引值(Index)类型不受限为整数
用来访问数组的索引值(Index),其类型一定为整数,然而索引器可以定义其他类型的索引值。
2>索引器允许重载(Overloading)
一个类并不限制只能够定义一个索引器,只要索引器的函数签名不同,一个类就可以拥有很多个索引器,你可以重载它的功能。
3>索引器不是一个变量
索引和数组不同的地方在于,索引器并没有直接对应引用数据存储的地方,而数组则有。索引器有get访问器与set访问器,用来指明要读取或写入索引器元素时,需要执行的代码。
---------------------------
索引器与属性的不同点:
标识方式:属性以名称来标识;索引器则以函数签名来标识。
索引器可以被重载:因为属性时以名称标识的,所以不能被重载;索引器是用函数签名标识的,因此可以重载。
索引器不可以声明为static:属性可以为static,而索引器永远属于实例成员,不能为static
|
请发表评论