一、C#索引器
C#的索引器是一种特殊的类成员,它允许类和结构的实例按照与数组相同的方式进行索引,索引器的访问器可以使用参数,被称为有参属性。
当一个类包含了数组和集合成员时,索引器将大大简化对数组或集合成员的存取操作。
1. 索引器的声明
声明索引器的语法格式如下:
修饰符 数据类型 this[索引类型名称 参数名]
{
get{//取数据}
set{//存数据}
}
?修饰符:可以使用的修饰符有new、public、protected、internal、private、virtual、sealed、override和abstract等。
?数据类型:将要存取的数组或集合元素的类型。
?this:用于定义索引器。表示操作本对象的数组或集合成员,可以简单地把它理解为索引器的名字,因此用户不能定义索引器的名称。
索引类型名称:表示该索引器使用哪一种类型的索引来存取数组或集合元素。可以是整型、也可以是字符串。
?参数名:参数的名称。
?大括号:“{}”之间是索引值的访问声明,使用get关键字(返回值)和set关键字(分配值)定义了对被索引的元素的读写权限。set索引器中的value关键字用于定义由set索引器分配的值。
索引器不必根据整数值进行索引,而且索引器可以被重载。
2. 索引器的使用
索引器的操作方法和数组类似,通过索引器可以存取类的实例的数组成员。
一般格式如下:
对象名[索引]其中索引的数据类型必须与索引器的索引类型相同。如:
A a = new A();
a[0] = 100;
a[1] = 101;
Console.WriteLine(a[0]);
Console.WriteLine(a[1]);表示先创建一个对象a,再通过索引来引用该对象中的数组元素。
二、索引器和属性的比较
另外,所有适用于属性的规则,都可以用于索引器。
三、示例
示例一
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Test
{
class Program
{
class classTest
{
private long[] arr = new long[100]; // 私有数组
public long this[int index] // 索引器,包含形参index
{
get // get访问器
{
return arr[index];
}
set // set访问器
{
arr[index] = value;
}
}
}
static void Main(string[] args)
{
// C#索引器-www.baike369.com
classTest classTest1 = new classTest();
classTest1[0] = 100;
classTest1[1] = 101;
Console.WriteLine(classTest1[0]);
Console.WriteLine(classTest1[1]);
Console.ReadLine();
}
}
}
运行结果:
100
101
示例二
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Test
{
class Program
{
class classTest<T> // 定义一个泛型类
{
private T[] arr = new T[100]; // 私有数组
public T this[int i] // 索引器,包含形参i
{
get // get访问器
{
return arr[i];
}
set // set访问器
{
arr[i] = value;
}
}
}
static void Main(string[] args)
{
classTest<string> classTest1 = new classTest<string>();
classTest1[0] = "Hello, World";
Console.WriteLine(classTest1[0]);
Console.ReadLine();
}
}
}
运行结果:
Hello, World