C# - Indexers: A Beginner's Guide

Xin chào các bạn đang học lập trình! Hôm nay, chúng ta sẽ bắt đầu một chuyến hành trình thú vị vào thế giới của các chỉ số (indexers) trong C#. Đừng lo lắng nếu bạn mới bắt đầu học lập trình - tôi sẽ là người hướng dẫn thân thiện của bạn, giải thích mọi thứ từng bước. Hãy cùng tìm hiểu!

C# - Indexers

What Are Indexers? (Những gì là Indexers?)

Hãy tưởng tượng bạn có một giá sách. Thay vì phải tìm kiếm qua từng cuốn sách để tìm cuốn bạn muốn, chẳng lẽ không tốt hơn nếu bạn có thể chỉ cần nói "Đưa tôi cuốn sách thứ 3" hoặc "Đưa tôi cuốn sách có tiêu đề 'C# for Beginners'"? Đó chính xác là những gì các chỉ số trong C# làm - chúng cung cấp một cách tiện lợi để truy cập các phần tử trong một lớp đại diện cho một bộ sưu tập các giá trị.

Syntax of Indexers (Cú pháp của Indexers)

Hãy bắt đầu với cú pháp cơ bản của một chỉ số:

public Type this[Type index]
{
get { /* return the value */ }
set { /* set the value */ }
}

Đừng để điều này làm bạn hoảng sợ! Hãy cùng phân tích:

  • public: Điều này có nghĩa là chỉ số có thể được truy cập từ bên ngoài lớp.
  • Type: Đây là kiểu của giá trị mà chỉ số sẽ trả về hoặc đặt.
  • this: Từ khóa này được sử dụng để xác định một chỉ số.
  • [Type index]: Điều này xác định kiểu và tên của tham số chỉ số.
  • getset: Đây là các phương thức truy cập để lấy hoặc đặt giá trị.

Use of Indexers (Sử dụng Indexers)

Bây giờ, hãy xem các chỉ số trong hành động với một ví dụ đơn giản:

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

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

Trong ví dụ này, chúng ta đã tạo một lớp Bookshelf với một chỉ số. Đây là cách chúng ta có thể sử dụng nó:

Bookshelf myShelf = new Bookshelf();
myShelf[0] = "C# for Beginners";
myShelf[1] = "Advanced C#";

Console.WriteLine(myShelf[0]); // Outputs: C# for Beginners

Thật tuyệt vời phải không? Chúng ta có thể truy cập và sửa đổi các sách như thể chúng là một mảng, nhưng thực tế chúng ta đang làm việc với một lớp tùy chỉnh!

Why Use Indexers? (Tại sao sử dụng Indexers?)

Bạn có thể tự hỏi, "Tại sao không chỉ sử dụng một mảng?" Well, các chỉ số cho chúng ta nhiều quyền kiểm soát hơn. Chúng ta có thể thêm xác thực, ghi日志, hoặc bất kỳ logic tùy chỉnh nào khi lấy hoặc đặt giá trị. Ví dụ:

public string this[int index]
{
get
{
if (index < 0 || index >= books.Length)
throw new IndexOutOfRangeException("Invalid book index!");
return books[index];
}
set
{
if (index < 0 || index >= books.Length)
throw new IndexOutOfRangeException("Invalid book index!");
books[index] = value;
}
}

Bây giờ, nếu ai đó cố gắng truy cập một cuốn sách không tồn tại, họ sẽ nhận được một thông báo lỗi hữu ích thay vì làm crash chương trình!

Overloaded Indexers (Chỉ số bị tải lại)

Tương tự như phương thức, các chỉ số có thể bị tải lại. Điều này có nghĩa là chúng ta có thể có nhiều chỉ số với các loại tham số khác nhau. Hãy mở rộng ví dụ Bookshelf của chúng ta:

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

// Chỉ số với tham số int
public string this[int index]
{
get { return books[index]; }
set { books[index] = value; }
}

// Chỉ số với tham số 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;
}
}
}

Bây giờ chúng ta có thể truy cập các sách theo chỉ số hoặc tiêu đề:

Bookshelf myShelf = new Bookshelf();
myShelf[0] = "C# for Beginners";
myShelf[1] = "Advanced C#";

Console.WriteLine(myShelf[0]); // Outputs: C# for Beginners
Console.WriteLine(myShelf["Advanced C#"]); // Outputs: Advanced C#

myShelf["C# for Beginners"] = "C# Mastery";
Console.WriteLine(myShelf[0]); // Outputs: C# Mastery

Thật mạnh mẽ phải không? Bây giờ chúng ta có thể tương tác với Bookshelf của chúng ta theo nhiều cách trực quan!

Indexer Methods Table (Bảng phương thức chỉ số)

Dưới đây là bảng tham khảo nhanh các phương thức chỉ số chúng ta đã xem qua:

Phương thức Mô tả Ví dụ
get Trả về giá trị tại chỉ số được chỉ định return books[index];
set Đặt giá trị tại chỉ số được chỉ định books[index] = value;

Conclusion (Kết luận)

Và thế là bạn đã có tất cả! Chúng ta đã khám phá thế giới của các chỉ số trong C#, từ cú pháp cơ bản đến các chỉ số bị tải lại. Nhớ rằng, các chỉ số là những công cụ mạnh mẽ có thể làm cho mã của bạn trở nên trực quan và dễ sử dụng hơn. Chúng như những pháp thuật biến lớp của bạn thành các bộ sưu tập dễ sử dụng.

Trong hành trình lập trình của bạn, bạn sẽ tìm thấy nhiều tính năng thú vị khác trong C#. Nhưng hiện tại, hãy tự thưởng cho mình - bạn đã thành thạo các chỉ số! Hãy tiếp tục thực hành, 保持好奇心, và chúc bạn lập trình vui vẻ!

Credits: Image by storyset