Files
My-Notes/笔记/CSharp/核心/索引器.md
T

56 lines
1.1 KiB
Markdown
Raw Normal View History

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
#封装
#核心