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

你好,有抱负的程序员们!今天,我们将踏上一段激动人心的旅程,探索C#索引器的世界。别担心,如果你是编程新手——我将作为你友好的向导,一步一步地解释所有内容。那么,让我们开始吧!

C# - Indexers

索引器是什么?

想象你有一个书架。如果你能直接说“给我第3本书”或者“给我标题为'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