基礎概念
索引器,將一個物件變的可以像陣列一樣使用下標訪問,索引器的建立類似屬性,都需要設定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();
}
輸出:
總結
只要類中有類似於屬性的元素就應建立索引器,此屬性代表的不是一個值,而是值的集合,其中每一個項由一組引數標識。 這些引數可以唯一標識應引用的集合中的項。 索引器延伸了屬性的概念,索引器中的一個成員被視為類外部的一個資料項,但又類似於內部的一個方法。 索引器允許引數在代表項的集合的屬性中查詢單個項。