首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> ASP.NET 基礎

ASP.NET 索引器完整指南:語法、特性、多參數與重載實戰

     編輯:ASP.NET 基礎

前言:讓類別像陣列一樣被存取

索引器 讓類別實例支援 obj[index] 語法,本質是「帶參數的屬性」。適用於封裝集合、矩陣、快取、動態屬性包等場景。本文系統整理索引器語法規則、五大存取修飾詞、四大繼承修飾詞、多參數/重載模式與完整範例。

索引器語法結構


[修飾詞] 回傳型別 this[參數列表]
{
    get { /* 回傳值 */ }
    set { /* value 為指派值 */ }
}

核心特性速查表

特性說明
關鍵字this 取代方法名,類別僅能定義一個名為 this 的索引器
參數至少一個,型別任意(不限整數),可多參數
重載支援簽章不同的多個索引器
存取修飾詞new、public、protected、internal、private
繼承修飾詞virtual、sealed、override、abstract
靜態不支援 static(索引器屬於實例)
基類呼叫override 時用 base[index] 存取基類實作

基本範例:泛型集合包裝


public class SampleCollection<T>
{
    private readonly T[] _arr = new T[100];

    public T this[int i]
    {
        get => _arr[i];
        set => _arr[i] = value;
    }
}

// 使用
var coll = new SampleCollection<string>();
coll[0] = "Hello, World";
Console.WriteLine(coll[0]); // Hello, World

多參數索引器:二維矩陣


public class Matrix<T>
{
    private readonly T[,] _data;
    public Matrix(int rows, int cols) => _data = new T[rows, cols];

    public T this[int row, int col]
    {
        get => _data[row, col];
        set => _data[row, col] = value;
    }
}

var m = new Matrix<int>(3, 3);
m[1, 2] = 99;
Console.WriteLine(m[1, 2]); // 99

索引器重載:字串鍵與整數索引並存


public class DualKeyStore<T>
{
    private readonly Dictionary<string, T> _byName = new();
    private readonly List<T> _byIndex = new();

    public T this[string name]
    {
        get => _byName[name];
        set => _byName[name] = value;
    }

    public T this[int index]
    {
        get => _byIndex[index];
        set
        {
            if (index == _byIndex.Count) _byIndex.Add(value);
            else _byIndex[index] = value;
        }
    }
}

介面中定義索引器


public interface IStringIndexer<T>
{
    T this[string key] { get; set; }
}

常見陷阱與最佳實務

  • 邊界檢查:get/set 內部應驗證索引範圍,拋出 ArgumentOutOfRangeException 或回傳預設值,避免 IndexOutOfRangeException 洩露內部結構。
  • 唯讀索引器:僅提供 get,適合不可變集合。
  • 效能:索引器編譯為 get_Item/set_Item 方法,與直接呼叫方法效能相同,無額外開銷。
  • 命名慣例:單一參數用 index、key;多參數用 row/col、x/y。

總結

索引器是「語法糖」,將 obj.GetItem(i) 簡化為 obj[i],大幅提升 API 可讀性。掌握「單/多參數、重載、介面定義、繼承覆寫」完整語法,即可設計出如 List<T>、Dictionary<K,V>、DataTable 般直覺易用的集合型別。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved