使用時機

定義一個 BasketballPlayer class,裡面描述前 10 名我所喜愛的球員

class BasketballPlayer
{
    public static int SIZE = 10;
    private string[] favoritePlayers;

    public BasketballPlayer()
    {
        favoritePlayers = new string[SIZE];
    }
}

接著我想設定喜愛球員的排名,並把名單顯示出來。我當然可以寫個 SetPlayer(int No, string Name) 以及 ShowList(),但我現在想直接利用 new 出來的 class 直接以處理陣列的方式做設定。

BasketballPlayer playerList = new BasketballPlayer();

playerList[1] = "Allen Iverson";
playerList[2] = "Michael Jordan";
playerList[5] = "Steve Nash";

for (int i = 0; i < BasketballPlayer.SIZE; i++)
{
    if(playerList[i] != null)
        Console.WriteLine(i.ToString() + ": " + playerList[i]);
}

理所當然編譯不過,因為 playerList 是一個 class 不是一個 array,這時候就可以使用 indexer 了。


Indexer

在 BasketballPlayer 裡加入以下 method,讓上面的程式碼可正常運作

public string this[int i]
{
    get
    {
        if (i >= 0 && i < SIZE)
            return favoritePlayers[i];
        else
            return "";
    }
    set
    {
        if (i >= 0 && i < SIZE)
            favoritePlayers[i] = value;
    }
}

如此一來不就跟使用 array 一樣方便了呢?