索引器

请明月發表於2024-10-18

基礎概念

索引器,將一個物件變的可以像陣列一樣使用下標訪問,索引器的建立類似屬性,都需要設定Get和Set方法。
建立格式:

type this[int index]
{
   // get 訪問器
   get
   {
      // 返回 index 指定的值
   }

   // set 訪問器
   set
   {
      // 設定 index 指定的值
   }
}

注意事項

  • 屬性的各種用法同樣適用於索引器。 此規則的唯一例外是“自動實現屬性”。 編譯器無法始終為索引器生成正確的儲存。
  • 只要每個索引器的引數列表是唯一的,就可以對一個型別定義多個索引器。

程式碼示例

IndexNames類建立了基本的索引器,索引器內部對rectangles列表進行操作。

public class IndexNames
{

    public List<Rectangle> rectangles = new List<Rectangle>();

    public Rectangle this[int index]
    {
        get
        {
            if(this.rectangles[index] != null)
            {
                Rectangle r = rectangles[index];
                return r;
            }
            return null;
        }

        set
        {
            if (index > 0 && index < rectangles.Count)
            {
                rectangles[index] = value;
            }
        }
    }

    public IndexNames()
    {
        this.rectangles.Add(new Rectangle(10, 10));
        this.rectangles.Add(new Rectangle(20, 20));
        this.rectangles.Add(new Rectangle(30, 30));
        this.rectangles.Add(new Rectangle(40, 40));
    }
}

上面程式碼提到的Rectangle類

public class Rectangle
{
    // 成員變數
    protected double length;
    protected double width;
    public double Test;
    public Rectangle(double l, double w)
    {
        length = l;
        width = w;
    }
    [DeBugInfo(55, "Zara Ali", "19/10/2012",
    Message = "Return type mismatch")]
    public double GetArea()
    {
        return length * width;
    }
    [DeBugInfo(56, "Zara Ali", "19/10/2012")]
    public void Display()
    {
        Console.WriteLine("Length: {0}", length);
        Console.WriteLine("Width: {0}", width);
        Console.WriteLine("Area: {0}", GetArea());
    }

    public void GetString()
    {
        Debug.Log($"Length:{length}width:{width}Area:{GetArea()}");
    }
}

表現

迴圈輸出索引的內容

        IndexNames indexs = new IndexNames();

        for (int i = 0; i < indexs.rectangles.Count; i++)
        {
            indexs[i].GetString();
        }

輸出:

總結

只要類中有類似於屬性的元素就應建立索引器,此屬性代表的不是一個值,而是值的集合,其中每一個項由一組引數標識。 這些引數可以唯一標識應引用的集合中的項。 索引器延伸了屬性的概念,索引器中的一個成員被視為類外部的一個資料項,但又類似於內部的一個方法。 索引器允許引數在代表項的集合的屬性中查詢單個項。

相關文章