class Program
{
static void Main(string[] args)
{
Student stu = new Student();
stu[1] = "张三";
Console.WriteLine(stu[1]);
Console.ReadKey();
}
}
class Student
{
public string FirstName;
public string SecondName;
public string ThirdName;
public string this[int index]
{
set {
switch (index) {
case 1: FirstName = value; break;
case 2: SecondName = value; break;
case 3: ThirdName = value; break;
default: throw new Exception("错误的序号");
}
}
get{
switch(index){
case 1:return FirstName;
case 2:return SecondName;
case 3:return ThirdName;
default: throw new Exception("错误的序号");
}
}
}
}
如上所示声明索引的时候应注意:
1索引的名称使用this代替的。
2.参数在this后面的[]里面。
在上面所示,索引和属性比较像还因为:1和属性一样,在赋值时,索引调用set访问器,在使用时索引调用get访问器。2 set访问器中有一个隐式参数value。3 get访问器中返回的值与索引的类型相同。4 get和set访问器不能被显示调用。
我感觉还是看几个例子比较好。以便更好地理解。
class MyClass
{
int a, b;
public int this[int index]
{
get { return 0 == index ? a : b; }
set
{
if (index == 0) a = value;
else b = value;
}
使用索引器可以用类似于数组的方式为对象建立索引。
get accessor returns a value." data-guid="5e97def07fe15e931d526cafa5b97644">get 访问器返回值。 set accessor assigns a value." data-guid="66b9797a805b510e697d60c805140aeb">set 访问器分配值。
this keyword is used to define the indexers." data-guid="c34f23e68daf270013978542591de397">this 关键字用于定义索引器。
value keyword is used to define the value being assigned by the set indexer." data-guid="599578d2a780928307c04f6ca2b0f058">value 关键字用于定义由 set 索引器分配的值。
索引器不必根据整数值进行索引,由您决定如何定义特定的查找机制。
索引器可被重载。
索引器可以有多个形参,例如当访问二维数组时。