2026-06-21 09:51:55 +08:00
|
|
|
# 索引器
|
2026-04-13 15:40:15 +08:00
|
|
|
概念:
|
2026-06-21 09:51:55 +08:00
|
|
|
- 索引器(Indexer)可以让对象像数组一样通过 `[]` 访问
|
|
|
|
|
- 它很像属性,只是访问器带参数
|
|
|
|
|
- 一般用一个数组和索引器写法来实现按照下标访问成员
|
2026-04-13 15:40:15 +08:00
|
|
|
|
|
|
|
|
通常用法:
|
2026-06-21 09:51:55 +08:00
|
|
|
- 封装内部数组或集合
|
|
|
|
|
- 让类的使用方式更自然
|
2026-04-13 15:40:15 +08:00
|
|
|
|
|
|
|
|
语法:
|
2026-06-21 09:51:55 +08:00
|
|
|
```csharp
|
|
|
|
|
访问修饰符 返回值类型 this[参数列表]
|
2026-04-13 15:40:15 +08:00
|
|
|
{
|
2026-06-21 09:51:55 +08:00
|
|
|
get { }
|
|
|
|
|
set { }
|
2026-04-13 15:40:15 +08:00
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
案例:
|
2026-06-21 09:51:55 +08:00
|
|
|
```csharp
|
|
|
|
|
class Team
|
2026-04-13 15:40:15 +08:00
|
|
|
{
|
2026-06-21 09:51:55 +08:00
|
|
|
private string[] members = new string[3];
|
|
|
|
|
|
|
|
|
|
public string this[int index]
|
2026-04-13 15:40:15 +08:00
|
|
|
{
|
2026-06-21 09:51:55 +08:00
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
return members[index];
|
|
|
|
|
}
|
|
|
|
|
set
|
|
|
|
|
{
|
|
|
|
|
members[index] = value;
|
|
|
|
|
}
|
2026-04-13 15:40:15 +08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2026-06-21 09:51:55 +08:00
|
|
|
Team team = new Team();
|
|
|
|
|
team[0] = "小明";
|
|
|
|
|
Console.WriteLine(team[0]);
|
2026-04-13 15:40:15 +08:00
|
|
|
```
|
2026-06-21 09:51:55 +08:00
|
|
|
|
|
|
|
|
补充:
|
|
|
|
|
- 索引器也可以只有 `get`,做成只读
|
|
|
|
|
- 索引器也可以有多个参数,比如 `this[int row, int col]`
|
|
|
|
|
|
2026-04-13 15:40:15 +08:00
|
|
|
注意:
|
2026-06-21 09:51:55 +08:00
|
|
|
1. 索引器写法里的名字固定是 `this`,不是自定义名字
|
|
|
|
|
2. 索引器本质上还是类成员,不是数组本身
|
|
|
|
|
3. `[]` 不是直接重载出来的,==而是通过索引器语法提供的==
|
|
|
|
|
4. 如果内部是真实数组或列表,通常还要自己考虑越界问题
|
2026-04-13 15:40:15 +08:00
|
|
|
|
2026-06-18 20:01:30 +08:00
|
|
|
#封装
|
|
|
|
|
#核心
|