C# 索引器(Indexer)学习笔记
1. 什么是索引器
索引器(Indexer)是C#中的一种特殊属性,它允许对象与其内部数据进行关联,并提供对该数据的访问。通过索引器,我们可以像访问数组或集合元素那样访问对象的内部数据。
2. 索引器的语法
索引器可以被看作是一个特殊的属性,它使用 this 关键字来定义。下面是一个基本的索引器语法:
csharpCopy Codepublic object this[int index]
{
get
{
// 返回指定index所表示的数据
}
set
{
// 设置指定index所表示的数据为value
}
}
- public:索引器访问级别为公共的。
- object:索引器返回的数据类型。
- this[]:控制索引器的行为。
- int index:用于访问对象内部数据的索引。
注意:C#中的索引器也支持多个参数,即多维索引器。
3. 索引器的实例
下面是一个简单的例子,我们创建了一个名为 Product
的类,并定义了一个 Products
索引器,用于保存商品信息。
csharpCopy Codepublic 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 CodeProduct prod = new Product();
prod[0] = "苹果";
prod["苹果"] = 5.5M;
Console.WriteLine(prod[0]); // 输出:苹果
Console.WriteLine(prod["苹果"]); // 输出:5.5
在上面的代码中,prod[0]
表示通过索引访问商品名称,而 prod["苹果"]
则表示通过商品名称访问商品价格。
总结
索引器是C#中一种非常强大的特性,它允许我们像访问数组或集合元素那样访问对象的内部数据,可以极大地简化代码,提高效率。