C#索引器(Indexer)

作者: adm 分类: C# 发布时间: 2024-03-28

索引器(英文名: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

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!