在C#中,索引器可以看成是属性的一种特殊形式。它和属性一样,可以定义cs#get
和cs#set
。定义好索引器之后,它可以使类像数组一样访问,但它和数组还是有区别的。
索引器和属性的区别
- 索引器以函数签名方式
cs#this
来标识,而属性采用名称来标识,名称可以任意 - 索引器可以重载,而属性不能重载。只要索引器的函数签名不同,就可以定义多个索引器。
- 索引器不能声明为静态(
cs#static
),而属性可以有静态属性。索引器永远属于实例成员。
索引器和数组的区别
- 索引器的索引值类型不限定为整数,可以是其它类型;而数组的索引只能是整数。
- 索引器可以重载,可以有多个;而数组的索引只能有一个。
- 索引器没有直接数据存储的地方;而数组有。
索引器定义的代码例子
class IndexTest
{
private Dictionary<int, string> values = new Dictionary<int, string>();
// 基本索引
public string this[int i]
{
get { return values[i]; }
set { values[i] = value; }
}
// 索引重载
public string this[string i]
{
get { return values[int.Parse(i)]; }
set { values[int.Parse(i)] = value; }
}
// 多维索引
public string this[int i, int j]
{
get { return values[i] + values[j]; }
}
}