C# 索引器(Indexer)学习笔记

1. 什么是索引器

索引器(Indexer)是C#中的一种特殊属性,它允许对象与其内部数据进行关联,并提供对该数据的访问。通过索引器,我们可以像访问数组或集合元素那样访问对象的内部数据。

2. 索引器的语法

索引器可以被看作是一个特殊的属性,它使用 this 关键字来定义。下面是一个基本的索引器语法:

csharpCopy Code
public object this[int index] { get { // 返回指定index所表示的数据 } set { // 设置指定index所表示的数据为value } }
  • public:索引器访问级别为公共的。
  • object:索引器返回的数据类型。
  • this[]:控制索引器的行为。
  • int index:用于访问对象内部数据的索引。

注意:C#中的索引器也支持多个参数,即多维索引器。

3. 索引器的实例

下面是一个简单的例子,我们创建了一个名为 Product 的类,并定义了一个 Products 索引器,用于保存商品信息。

csharpCopy Code
public class Product { private string[] names = new string[10]; private decimal[] prices = new decimal[10]; public string this[int index] { get { return names[index]; } set { names[index] = value; } } public decimal this[string name] { get { int index = Array.IndexOf(names, name); if (index == -1) { throw new ArgumentException($"商品 {name} 不存在"); } return prices[index]; } set { int index = Array.IndexOf(names, name); if (index == -1) { throw new ArgumentException($"商品 {name} 不存在"); } prices[index] = value; } } }

在这个例子中,我们定义了两个不同的索引器,分别用于访问商品名称和价格。以下是如何使用这些索引器:

csharpCopy Code
Product prod = new Product(); prod[0] = "苹果"; prod["苹果"] = 5.5M; Console.WriteLine(prod[0]); // 输出:苹果 Console.WriteLine(prod["苹果"]); // 输出:5.5

在上面的代码中,prod[0] 表示通过索引访问商品名称,而 prod["苹果"] 则表示通过商品名称访问商品价格。

总结

索引器是C#中一种非常强大的特性,它允许我们像访问数组或集合元素那样访问对象的内部数据,可以极大地简化代码,提高效率。