理解 C# 中的索引器(Indexer)详解与示例

avatar
作者
筋斗云
阅读量:0

文章目录


在这里插入图片描述

在 C# 中,索引器(Indexer)是一种特殊的属性,允许类的实例像数组一样通过索引访问。索引器使得可以定义类似于数组的访问方式,但是访问的对象可以是类的实例,而不仅限于数组。

1. 索引器的基本概念

索引器允许通过类实例的索引来访问该类的实例成员。它的声明类似于属性,但具有参数。通常情况下,索引器用于允许类的实例像数组一样通过索引进行访问。

2. 索引器的语法

索引器的语法如下所示:

public class MyClass {     // 声明一个索引器     public returnType this[indexType index]     {         get         {             // 返回索引位置的值         }         set         {             // 设置索引位置的值         }     } } 
  • returnType: 索引器返回的数据类型,可以是任意有效的 C# 数据类型。
  • indexType: 索引的参数类型,可以是整数、字符串或其他合法类型。
  • get: 获取索引位置的值的访问器。
  • set: 设置索引位置的值的访问器。

3、索引器示例

下面通过一个简单的示例来演示如何定义和使用索引器。

3.1. 定义一个简单的索引器

首先,我们定义一个名为MyCollection的类,包含一个私有的数组和一个索引器。

public class MyCollection {     private int[] items = new int[10];      public int this[int index]     {         get         {             if (index >= 0 && index < items.Length)             {                 return items[index];             }             else             {                 throw new ArgumentOutOfRangeException("index");             }         }         set         {             if (index >= 0 && index < items.Length)             {                 items[index] = value;             }             else             {                 throw new ArgumentOutOfRangeException("index");             }         }     } } 

3.2. 使用索引器

接下来,我们创建MyCollection类的实例,并通过索引器访问和修改内部数组元素。

class Program {     static void Main(string[] args)     {         MyCollection collection = new MyCollection();          // 通过索引器设置元素值         collection[0] = 1;         collection[1] = 2;         collection[2] = 3;          // 通过索引器获取元素值         for (int i = 0; i < 3; i++)         {             Console.WriteLine(collection[i]);         }     } } 

运行程序,输出结果如下:

1 2 3 

4、索引器进阶

4.1. 多维索引器

C#索引器可以支持多维索引,如下所示:

public class Matrix {     private int[,] items = new int[3, 3];      public int this[int row, int col]     {         get         {             if (row >= 0 && row < 3 && col >= 0 && col < 3)             {                 return items[row, col];             }             else             {                 throw new ArgumentOutOfRangeException("row or col");             }         }         set         {             if (row >= 0 && row < 3 && col >= 0 && col < 3)             {                 items[row, col] = value;             }             else             {                 throw new ArgumentOutOfRangeException("row or col");             }         }     } } 

4.2. 索引器重载

C#允许对索引器进行重载,如下所示:

public class MyCollection {     private int[] items = new int[10];     private string[] strings = new string[10];      public int this[int index]     {         get         {             // ...         }         set         {             // ...         }     }      public string this[string key]     {         get         {             // ...         }         set         {             // ...         }     } } 

5. 索引器的注意事项

  • 索引器可以具有多个参数,但每个参数的类型必须唯一。
  • 索引器的参数可以是值类型或引用类型。
  • 可以根据需要只声明 get 或 set 访问器,但至少必须实现其中一个。

6. 总结

索引器是 C# 中一个强大且灵活的特性,允许类的实例像数组一样通过索引来访问。它提供了一种简洁、直观的方式来管理类的实例数据,特别适用于需要按照索引方式进行访问和修改的场景。

通过本文的介绍和示例,希望读者能够理解并掌握 C# 中索引器的使用方法和基本原理,从而能够在实际项目中灵活运用。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!