C#屬性與索引器如何定義訪問(wèn)器

c#
小樊
81
2024-10-24 01:24:24

在C#中,屬性(Property)和索引器(Indexer)都用于封裝對(duì)象的內(nèi)部狀態(tài)并提供一種訪問(wèn)這些狀態(tài)的方式。它們之間的主要區(qū)別在于如何使用括號(hào)[]來(lái)訪問(wèn)值。

屬性(Property)

屬性是一種特殊的成員,它允許你使用類(lèi)似于公共字段的方式來(lái)訪問(wèn)類(lèi)的私有字段或?qū)崿F(xiàn)其他邏輯。屬性的定義使用getset訪問(wèn)器方法,這些方法在調(diào)用時(shí)看起來(lái)像是字段訪問(wèn)。

下面是一個(gè)屬性的簡(jiǎn)單示例:

public class Person
{
    private string _name;

    public string Name
    {
        get { return _name; }
        set { _name = value; }
    }
}

在這個(gè)例子中,Name屬性有一個(gè)get訪問(wèn)器方法和一個(gè)set訪問(wèn)器方法。當(dāng)使用Person類(lèi)的實(shí)例時(shí),可以直接通過(guò)屬性名Name來(lái)訪問(wèn)和修改_name字段的值,而不需要顯式調(diào)用方法。

索引器(Indexer)

索引器允許對(duì)象像數(shù)組一樣進(jìn)行索引訪問(wèn)。它通常用于實(shí)現(xiàn)可以通過(guò)特定鍵或索引來(lái)訪問(wèn)元素的數(shù)據(jù)結(jié)構(gòu)。索引器的定義使用getset訪問(wèn)器方法,并且使用括號(hào)[]來(lái)指定索引。

下面是一個(gè)索引器的簡(jiǎn)單示例:

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; }
    }
}

在這個(gè)例子中,StringCollection類(lèi)實(shí)現(xiàn)了一個(gè)索引器,它允許通過(guò)整數(shù)索引來(lái)訪問(wèn)字符串?dāng)?shù)組_items中的元素。使用索引器時(shí),需要在屬性名后面加上括號(hào)[],并在括號(hào)內(nèi)指定索引值。

需要注意的是,索引器的訪問(wèn)器和屬性的訪問(wèn)器在語(yǔ)法上是相同的,但它們的用途和行為是不同的。屬性用于封裝對(duì)象的內(nèi)部狀態(tài)并提供一種訪問(wèn)這些狀態(tài)的方式,而索引器用于實(shí)現(xiàn)可以通過(guò)特定鍵或索引來(lái)訪問(wèn)元素的數(shù)據(jù)結(jié)構(gòu)。

0