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

C# 索引器進階應用(二):命名索引器與 TempRecord 完整範例

     編輯:關於C語言

索引器命名

預設名稱 `Item`,可用 `[IndexerName("TheItem")]` 屬性指定自訂名稱(編譯器元資料),其他語言(如 VB.NET)呼叫時可見此名稱。

完整範例:`TempRecord` 溫度記錄


class TempRecord
{
    private float[] _temps = { 56.2f, 56.7f, 56.5f, 56.9f, 58.8f,
                               61.3f, 65.9f, 62.1f, 59.2f, 57.5f };

    public DateTime Date { get; set; } // 自動實作屬性

    public int Length => _temps.Length; // 唯讀屬性供邊界檢查

    [IndexerName("TheItem")]
    public float this[int index]
    {
        get => _temps[index];
        set => _temps[index] = value;
    }
}

class MainClass
{
    static void Main()
    {
        var tr = new TempRecord();
        tr[3] = 58.3f; // set 存取器
        tr[5] = 60.1f;
        for (int i = 0; i < 10; i++)
        {
            if (i < tr.Length)
                Console.WriteLine($"Element #{i} = {tr[i]}"); // get 存取器
            else
                Console.WriteLine($"Index {i} out of range");
        }
        // 取消註解測試例外
        // try { Console.WriteLine(tr[tr.Length]); }
        // catch (ArgumentOutOfRangeException ex) { Console.WriteLine(ex); }
    }
}

關鍵點解析

  • `this[int index]` 定義索引器,`get`/`set` 對應讀寫。
  • 用戶端驗證索引(`i < Length`)避免例外;或讓索引器內部拋出 `ArgumentOutOfRangeException`。
  • 替代方案:公開陣列 `_temps` 直接存取 `tr._temps[i]`,但失去封裝與邊界檢查。
  • 索引器可多參數(如 `this[int x, int y]`)、可多載、可介面定義。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved