C# - 索引器:初學者指南

你好,有志於成為程序員的各位!今天,我們將踏上一段令人興奮的旅程,探索 C# 索引器的世界。別擔心你對編程還是新手——我將成為你的友好導遊,逐步解釋一切。那麼,讓我們一起來看看吧!

C# - Indexers

究竟何為索引器?

想像一下你有一個書架。比起翻遍每一本書來找尋你想要的書,如果你可以直接說「給我第三本書」或「給我標題為 'C# 初學者' 的書」,豈不是更好?這正是 C# 中索引器的作用——它們提供了一種方便的方式來訪問代表值集合的類中的元素。

索引器的語法

讓我們從索引器的基本語法開始:

public Type this[Type index]
{
get { /* 返回值 */ }
set { /* 設置值 */ }
}

別讓這個語法嚇到你!讓我們分解一下:

  • public:這意味著索引器可以被類外部訪問。
  • Type:這是索引器將返回或設置的值類型。
  • this:這個關鍵字用於定義索引器。
  • [Type index]:這指定了索引參數的類型和名稱。
  • getset:這些是訪問器方法,用以獲取或設置值。

索引器的使用

現在,讓我們通過一個簡單的例子來看看索引器的實際應用:

public class Bookshelf
{
private string[] books = new string[5];

public string this[int index]
{
get { return books[index]; }
set { books[index] = value; }
}
}

在這個例子中,我們創建了一個 Bookshelf 類,並為其添加了索引器。以下是如何使用它的方法:

Bookshelf myShelf = new Bookshelf();
myShelf[0] = "C# 初學者";
myShelf[1] = "進階 C#";

Console.WriteLine(myShelf[0]); // 輸出:C# 初學者

這不是很棒嗎?我們可以像操作數組一樣訪問和修改書籍,但我們其實是在與一個自定義類進行交互!

為何使用索引器?

你可能會想,「為什麼不直接使用數組?」其實,索引器給我們提供了更多的控制權。我們可以在獲取或設置值時添加驗證、日誌記錄或任何自定義邏輯。例如:

public string this[int index]
{
get
{
if (index < 0 || index >= books.Length)
throw new IndexOutOfRangeException("無效的書籍索引!");
return books[index];
}
set
{
if (index < 0 || index >= books.Length)
throw new IndexOutOfRangeException("無效的書籍索引!");
books[index] = value;
}
}

現在,如果有人試圖訪問一個不存在的書籍,他將會收到一個有用的錯誤信息,而不是讓程序崩潰!

重載索引器

就像方法一樣,索引器也可以被重載。這意味著我們可以有具有不同參數類型的多個索引器。讓我們擴展我們的 Bookshelf 示例:

public class Bookshelf
{
private string[] books = new string[5];

// 帶有 int 參數的索引器
public string this[int index]
{
get { return books[index]; }
set { books[index] = value; }
}

// 帶有 string 參數的索引器
public string this[string title]
{
get
{
return Array.Find(books, book => book == title);
}
set
{
int index = Array.FindIndex(books, book => book == title);
if (index >= 0)
books[index] = value;
}
}
}

現在,我們可以通過索引或書名來訪問書籍:

Bookshelf myShelf = new Bookshelf();
myShelf[0] = "C# 初學者";
myShelf[1] = "進階 C#";

Console.WriteLine(myShelf[0]); // 輸出:C# 初學者
Console.WriteLine(myShelf["進階 C#"]); // 輸出:進階 C#

myShelf["C# 初學者"] = "C# 精通";
Console.WriteLine(myShelf[0]); // 輸出:C# 精通

這不是很強大嗎?現在,我們可以用多種直觀的方式與我們的 Bookshelf 進行交互!

索引器方法表格

這裡是一個我們已經介紹過的索引器方法的快速參考表格:

方法 描述 示例
get 獲取指定索引的值 return books[index];
set 設置指定索引的值 books[index] = value;

結論

好了,我們已經探索了 C# 索引器的世界,從基本語法到重載索引器。記住,索引器是強大的工具,可以使你的代碼更加直觀且容易使用。它們就像是魔法咒語,將你的類轉化為易於使用的集合。

在你繼續編程旅程的時候,你會發現 C# 中還有更多令人興奮的功能。但現在,給自己一個掌聲——你剛剛掌握了索引器!持續練習,保持好奇心,並且快樂編程!

Credits: Image by storyset