索引器类似于属性。和属性相似,索引器一样有get和set访问器。
索引器与属性的不同点:
1、每个属性的名称必须唯一,而每一个索引器的签名必须唯一。
2、索引器的“属性名”统一为this。而不能为其他,专门用于定义索引器。
3、索引器的参数列表包含在方括号而不是圆括号之内。
4、属性可以是静态的,而索引器只能为实例成员。
5、属性的get访问器没有参数,而索引器的get访问器可以有参数,而且索引器的get访问器和set访问器的参数相同。
6、索引器可以有多个形参,比如访问多维数组时。
索引器和数组对比:
数组 索引器
索引类型 整型,0-n 可以为任意类型
是否存储数据 是 否,通过访问器操作存在其他地方的数据,例如集合或数组字符串等。
是否允许重载 否 是,一个类可以有多个索引器
代码示例1:
class Program
{
static void Main(string[] args)
{
Index index = new Index();
Console.WriteLine(index[1]); //输出 刘备
Console.WriteLine(index[2]); //输出 关羽
Console.WriteLine(index[3]); //输出 张飞
index[3] = "诸葛亮";
Console.WriteLine(index[3]); //输出 诸葛亮
Console.ReadKey();
}
}
public class Index
{
string Name1 = "刘备";
string Name2 = "关羽";
string Name3 = "张飞";
public string this[int Id]
{
get
{
switch (Id)
{
case 1:
return Name1;
break;
case 2:
return Name2;
break;
case 3:
return Name3;
break;
default:
return "";
break;
}
}
set
{
switch (Id)
{
case 1:
Name1 = value;
break;
case 2:
Name2 = value;
break;
case 3:
Name3 = value;
break;
}
}
}
}
代码示例2-字符串访问以及索引器的重载示例:
class Program
{
static void Main(string[] args)
{
Index index = new Index();;
Console.WriteLine(index[0]); //输出 刘备
index.dic = new Dictionary<string, string>();
index.dic.Add("诸葛亮","村夫");
Console.WriteLine(index["诸葛亮"]); //输出 村夫
Console.ReadKey();
}
}
public class Index
{
string[] strArr = { "刘备", "关羽", "张飞" };
public string this[int i]
{
get
{
return strArr[i];
}
set
{
strArr[i] = value;
}
}
public Dictionary<string, string> dic;
public string this[string name]
{
get
{
return dic[name];
}
set
{
dic[name] = value;
}
}
}

浙公网安备 33010602011771号