在C#中,屬性(Property)和索引器(Indexer)都用于封裝對象的內部狀態并提供一種訪問這些狀態的方式。它們之間的主要區別在于如何使用括號[]
來訪問值。
屬性(Property)
屬性是一種特殊的成員,它允許你使用類似于公共字段的方式來訪問類的私有字段或實現其他邏輯。屬性的定義使用get
和set
訪問器方法,這些方法在調用時看起來像是字段訪問。
下面是一個屬性的簡單示例:
public class Person
{
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
}
在這個例子中,Name
屬性有一個get
訪問器方法和一個set
訪問器方法。當使用Person
類的實例時,可以直接通過屬性名Name
來訪問和修改_name
字段的值,而不需要顯式調用方法。
索引器(Indexer)
索引器允許對象像數組一樣進行索引訪問。它通常用于實現可以通過特定鍵或索引來訪問元素的數據結構。索引器的定義使用get
和set
訪問器方法,并且使用括號[]
來指定索引。
下面是一個索引器的簡單示例:
public class StringCollection
{
private string[] _items;
public StringCollection(string[] items)
{
_items = items;
}
public string this[int index]
{
get { return _items[index]; }
set { _items[index] = value; }
}
}
在這個例子中,StringCollection
類實現了一個索引器,它允許通過整數索引來訪問字符串數組_items
中的元素。使用索引器時,需要在屬性名后面加上括號[]
,并在括號內指定索引值。
需要注意的是,索引器的訪問器和屬性的訪問器在語法上是相同的,但它們的用途和行為是不同的。屬性用于封裝對象的內部狀態并提供一種訪問這些狀態的方式,而索引器用于實現可以通過特定鍵或索引來訪問元素的數據結構。