索引子宣告語法結構
[attributes] [modifiers] 回傳型別 this[參數清單] {
get { /* 讀取邏輯 */ }
set { /* 寫入邏輯 */ }
}
可用修飾詞一覽
| 修飾詞 | 說明 |
| new | 遮蔽基類別同名索引子 |
| public/protected/internal/private | 存取層級控制 |
| virtual | 允許衍生類別 override |
| sealed | 禁止進一步 override(需配合 override) |
| override | 覆寫基類別 virtual 索引子 |
| abstract | 強制衍生類別實作(類別需 abstract) |
實作範例:團隊成員名單管理
using System;
class Team {
private string[] _names = new string[8];
public string this[int index] {
get => _names[index];
set => _names[index] = value;
}
}
class Program {
static void Main() {
var team = new Team();
team[0] = "Alice";
team[1] = "Bob";
for (int i = 0; i < 2; i++)
Console.WriteLine(team[i]);
}
}
索引子 vs 屬性:何時選擇?
- 需多參數或動態計算存取 → 索引子
- 單一邏輯屬性、語意清晰 → 屬性
- 索引子可支援多維度(如
matrix[x, y]),屬性無法做到。
常見陷阱
- 忘記檢查索引邊界 → 拋出
IndexOutOfRangeException。
- 在
get 中執行耗時運算(如資料庫查詢),導致效能問題。
- 將索引子當成陣列直接序列化(需自訂邏輯)。