跳至內容

索引器 (編程)

維基百科,自由的百科全書

索引器(Indexer)是面向對象編程中的一種特性,它允許類的實例像數組一樣通過索引進行訪問。索引器提供了一種直觀的方式來訪問和操作類的實例中的元素,尤其在處理集合數據時非常有用。

在C#語言中,索引器是通過重載operator[ ]運算符來實現的。這意味着你可以定義一個特殊的運算符重載方法,使得類的實例可以使用方括號[ ]來訪問和設置元素。例如,如果你有一個名為MyClass的類,你可以定義一個索引器來允許使用myClassInstance[index]這樣的語法來訪問和修改數據。

在Python語言中,索引器的實現方式略有不同。Python通過定義特殊的方法__getitem__和__setitem__來實現索引器。當你為一個類定義了__getitem__方法時,你可以使用myClassInstance[index]這樣的語法來獲取元素。而當你定義了__setitem__方法時,你可以使用myClassInstance[index] = value這樣的語法來設置元素。

索引器的實現使得類的實例可以像數組一樣使用索引訪問,這為類的實例提供了更靈活的訪問方式。需要注意的是,索引器的實現和使用方式會因程式語言的不同而有所差異。

現在,讓我們更詳細地探討索引器的實現和使用:

1. C#中的索引器實現:

   - 通过重载operator[]运算符来定义索引器。
   - 索引器可以接受一个或多个参数,这些参数代表索引。
   - 索引器可以返回一个值,也可以设置一个值。

2. Python中的索引器實現:

   - 通过定义__getitem__和__setitem__方法来实现索引器。
   - __getitem__方法用于获取元素,而__setitem__方法用于设置元素。
   - 这些方法可以接受一个或多个参数,这些参数代表索引或键。

索引器的使用可以極大地提高代碼的可讀性和易用性,尤其是在處理集合數據時。通過索引器,開發者可以以一種直觀和統一的方式來訪問和操作數據,這在處理複雜數據結構時尤其有價值。


例子[編輯]

[1]

class OurFamily
{
	public OurFamily(params string[] pMembers)
	{
	    familyMembers = new List<string>();
	    familyMembers.AddRange(pMembers);
	}
	
	private List<string> familyMembers;
	
	public string this[int index] //索引器定义的时候不带有名称,但带有 this 关键字,它指向对象实例。
	{
		// The get accessor
		get
		{
		    return familyMembers[index];
		}

		// The set accessor with 
		set
		{
		    familyMembers[index] = value;
		}
	}

	public int this[string val] //索引器(Indexer)可被重载。索引器声明的时候也可带有多个参数,参数不必须是整型。也可以是其他类型,例如字符串类型
	{
		// Getting index by value (first element found)
		get
		{
		    return familyMembers.FindIndex(m => m == val);
		}
	}

	public int Length => familyMembers.Count;
	
}
void Main()
{
    var doeFamily = new OurFamily("John", "Jane");
    for (int i = 0; i < doeFamily.Length; i++)
    {
        var member = doeFamily[i];
        var index = doeFamily[member]; // same as i in this case, but it demonstrates indexer overloading allowing to search doeFamily by value.
        Console.WriteLine($"{member} is the member number {index} of the {nameof(doeFamily)}");
    }
}

為:

  John is the member number 0 of the doeFamily
  Jane is the member number 1 of the doeFamily

參見[編輯]

參考文獻[編輯]

  1. ^ C# Interview Questions. http://www.dotnetfunda.com/: .net Funda. [2011-08-01]. (原始內容存檔於2012-03-21).