c#索引器
1.索引器:C#中的类成员,使得对象可以像数组一样被引用,使程序看起来更直观。
一个简单的案例:
1 class TestIdx
2 {
3 public string this[int i]
4 {
5 get {
6 return names[i];
7 }
8 set {
9 names[i] = value;
10 }
11 }
12 private string[] names= {"lily","lucy","tom" }; //私有字段names
13 }
1 static void Main(string[] args)
2 {
3 TestIdx tidx = new TestIdx();
4 string str_name = tidx[0]; //调用get方法,取值
5 tidx[1] = "sam"; //给索引器赋值,其实就是调用set方法
6 Console.ReadKey();
7 }
TestIdx 这个类的实例显然不能直接操作private字段names,可以在类中定义一个索引器,来达到操作names的目的
2.索引器语法:
从以上这个最简单的案例总结一下索引器的语法: [权限修饰符] 返回值类型 this[参数类型 参数名]
{
get 方法
set方法
}
ps:可能我理解的不够深,处于封装的考虑,保护成员变量,存储集合类对象设置为私有,然后设置访问他们的方法,那么把访问他们的方法也设为私有,我理解不了,pativate类型的索引器有什么作用,在我看来就是闲的蛋疼。
3.索引器与属性同为c#的语法糖,这里做一下比较:
属性用名称来标识,名称随便取,索引器用this关键字来标记;
索引器有参数列表,和一般的方法不同之处在于写在了[]中...,所以索引器可以重载,属性当然不可以了;
属性可以用static修饰,索引器不行,索引器只能通过实例来操作。
需要特别注意的是不光只能通过数字索引,还可以是字符串等类型,索引器也允许多个索引器参数:
字符串索引案例:
class TestIdx2 {
public Dictionary<string, string> dic = new Dictionary<string, string>() { {"a1","aaa"},
{"b1","bbb" }, {"c1","ccc" } };
public string this[string str]
{
get {
return dic[str];
}
set {
dic[str] = value;
}
}
}
static void Main(string[] args)
{
TestIdx2 idx2 = new TestIdx2();
string stmp = idx2["a1"]; //get方法,取值
idx2["b1"] = "ccccc"; //set方法,赋值
Console.ReadKey();
}
多个索引器参数(案例没什么实际意义):
class Person
{
public string this[int x, int y]
{
get
{
return "" + x + y;
}
set
{
Console.WriteLine("x=" + x + ",y=" + y + ",value=" + value);
}
}
}
static void Main(string[] args)
{
Person p1 = new Person();
p1[1, 2] = "hello";
string s = p1[1, 2];
Console.WriteLine(s);
}

浙公网安备 33010602011771号