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

C# 索引子完整指南:語法、多參數、介面實作與進階應用

     編輯:關於C#

索引子核心概念

索引子讓類別實例支援 obj[index] 語法存取內部集合/資料。本質是帶參數的屬性,使用 this 關鍵字定義。

基本語法

class DataSeries
{
    private float[] _data = { 1.1f, 2.2f, 3.3f };

    public int Length
    {
        get => _data.Length;
        set => Array.Resize(ref _data, value);
    }

    // 索引子
    public float this[int index]
    {
        get => _data[index];
        set => _data[index] = value;
    }
}

// 使用
var ds = new DataSeries();
Console.WriteLine(ds[0]); // 1.1
ds[1] = 9.9f;
Console.WriteLine(ds[1]); // 9.9

索引子特性

  • 參數型別不限於 int:可為 string、enum、多參數。
  • 可多載:同類別可定義多個參數簽章不同的索引子。
  • 可在介面中定義:強制實作類別提供索引存取。
  • 不可為 static:屬於實例成員。
  • 存取修飾詞:get/set 可個別設定 (如 public get; private set;)。

多參數與字串索引子

class Matrix
{
    private double[,] _m = new double[3,3];
    public double this[int row, int col]
    {
        get => _m[row, col];
        set => _m[row, col] = value;
    }
}

class WeekWeather
{
    public string this[string day] // 字串索引
    {
        get => day switch
        {
            "Monday" => "Rainy",
            "Friday" => "Sunny",
            _ => "Cloudy"
        };
    }
}

介面中定義索引子

interface IRepository<T>
{
    T this[int id] { get; set; }
}

class UserRepository : IRepository<User>
{
    private Dictionary<int, User> _db = new();
    public User this[int id]
    {
        get => _db.TryGetValue(id, out var u) ? u : null;
        set => _db[id] = value;
    }
}

進階應用場景

場景索引子設計
資料表列存取row["ColumnName"] (DataRow 風格)
多維陣列/矩陣matrix[row, col]
快取/字典包裝cache[key] 附加過期/統計邏輯
位元操作bits[index] 獲取/設定特定位
動態物件搭配 DynamicObject 實作動態索引

索引子 vs 屬性 vs 方法

  • 單一值、語意為「屬性」→ 屬性。
  • 集合存取、語意為「按鍵取值」→ 索引子。
  • 需多參數、有副作用、非單純存取→ 方法 (GetValue(key))。

總結

索引子提供直觀的集合存取語法,是建構領域特定語言 (DSL) 風格 API 的利器。善用多載、介面定義與非 int 參數,能大幅提升 API 表達力。

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