C#索引器(Indexer)
索引器(英文名:Indexer)是类中的一个特殊成员,它能够让对象以类似数组的形式来操作,使程序看起来更为直观,更容易编写。索引器与属性类似,在定义索引器时同样会用到 get 和 set 访问器,不同的是,访问属性不需要提供参数而访问索引器则需要提供相应的参数。
定义索引器
C# 中属性的定义需要提供属性名称,而索引器则不需要具体名称,而是使用 this 关键字来定义,语法格式如下:
索引器类型 this[int index]
{
// get 访问器
get
{
// 返回 index 指定的值
}
// set 访问器
set
{
// 设置 index 指定的值
}
}
【示例】下面通过一个完整的示例来演示索引器的使用:
using System;
namespace net.yinzhong
{
class Demo
{
static void Main(string[] args){
Demo names = new Demo();
names[0] = “C#教程”;
names[1] = “索引器”;
for ( int i = 0; i < Demo.size; i++ ){
Console.WriteLine(names[i]);
}
Console.ReadKey();
}
static public int size = 10;
private string[] namelist = new string[size];
public Demo(){
for (int i = 0; i < size; i++)
namelist[i] = "NULL";
}
public string this[int index]{
get{
string tmp;
if( index >= 0 && index <= size-1 ){
tmp = namelist[index];
}else{
tmp = "";
}
return ( tmp );
}
set{
if( index >= 0 && index <= size-1 ){
namelist[index] = value;
}
}
}
}
}
运行结果如下:
C#教程
索引器
NULL
NULL
NULL
NULL
NULL
NULL
索引器重载
索引器可以被重载,而且在声明索引器时也可以带有多个参数,每个参数可以是不同的类型。另外,索引器中的索引不必是整数,也可以是其他类型,例如字符串类型。
【示例】下面通过示例来演示索引器重载。
纯文本复制
using System;
namespace net.yinzhong
{
class Demo
{
static void Main(string[] args){
Demo names = new Demo();
names[0] = "C#教程";
names[1] = "索引器";
// 使用带有 int 参数的第一个索引器
for (int i = 0; i < Demo.size; i++){
Console.WriteLine(names[i]);
}
// 使用带有 string 参数的第二个索引器
Console.WriteLine("“C#教程”的索引为:{0}",names["C#教程"]);
Console.ReadKey();
}
static public int size = 10;
private string[] namelist = new string[size];
public Demo(){
for (int i = 0; i < size; i++)
namelist[i] = "NULL";
}
public string this[int index]{
get{
string tmp;
if( index >= 0 && index <= size-1 ){
tmp = namelist[index];
}else{
tmp = "";
}
return ( tmp );
}
set{
if( index >= 0 && index <= size-1 ){
namelist[index] = value;
}
}
}
public int this[string name]{
get{
int index = 0;
while(index < size){
if(namelist[index] == name){
return index;
}
index++;
}
return index;
}
}
}
}
运行结果如下:
C#教程
索引器
NULL
NULL
NULL
NULL
NULL
NULL
“C#教程”的索引为:2