C#索引器(Indexer)
索引器(英文名:Indexer)是类中的一个特殊成员,它能够让对象以类似数组的形式来操作,使程序看起来更为直观,更容易编写。索引器与属性类似,在定义索引器时同样会用到 get 和 set 访问器,不同的是,访问属性不需要提供参数而访问索引器则需要提供相应的参数。
【示例】下面通过示例来演示索引器重载。
定义索引器
C# 中属性的定义需要提供属性名称,而索引器则不需要具体名称,而是使用 this 关键字来定义,语法格式如下:
索引器类型 this[int index]
{
// get 访问器
get
{
// 返回 index 指定的值
}
// set 访问器
set
{
// 设置 index 指定的值
}
}
using System; namespace c.biancheng.net { class Demo { static void Main(string[] args){ Demo names = new Demo(); names[0] = "C语言中文网"; names[1] = "http://c.biancheng.net/"; names[2] = "C#教程"; names[3] = "索引器"; 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语言中文网
http://c.biancheng.net/
C#教程
索引器
NULL
NULL
NULL
NULL
NULL
NULL
索引器重载
索引器可以被重载,而且在声明索引器时也可以带有多个参数,每个参数可以是不同的类型。另外,索引器中的索引不必是整数,也可以是其他类型,例如字符串类型。【示例】下面通过示例来演示索引器重载。
using System; namespace c.biancheng.net { class Demo { static void Main(string[] args){ Demo names = new Demo(); names[0] = "C语言中文网"; names[1] = "http://c.biancheng.net/"; names[2] = "C#教程"; names[3] = "索引器"; // 使用带有 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语言中文网
http://c.biancheng.net/
C#教程
索引器
NULL
NULL
NULL
NULL
NULL
NULL
“C#教程”的索引为:2