Bộ lập chỉ mục (this[])
Thuộc phần Lập trình hướng đối tượng trong hành trình C# của Coddy. Bài học 37 trên 70.
Bộ truy cập chỉ số cho phép bạn truy cập các phần tử trong lớp bằng ký hiệu ngoặc vuông giống như mảng. Thay vì gọi một phương thức như collection.GetItem(0), bạn có thể viết cách trực quan hơn là collection[0].
Bạn định nghĩa bộ chỉ mục bằng từ khóa this cùng với dấu ngoặc vuông:
public class Sentence
{
private string[] words;
public Sentence(string text)
{
words = text.Split(' ');
}
public string this[int index]
{
get { return words[index]; }
set { words[index] = value; }
}
}Giờ bạn có thể truy cập các từ một cách tự nhiên:
Sentence s = new Sentence("Hello World");
Console.WriteLine(s[0]); // Hello
s[1] = "C#";
Console.WriteLine(s[1]); // C#Bộ truy cập chỉ số không chỉ giới hạn ở số nguyên. Bạn có thể dùng bất kỳ kiểu dữ liệu nào làm tham số chỉ số, nhờ đó chúng hữu ích khi truy cập theo kiểu từ điển:
public string this[string key]
{
get { return dictionary[key]; }
set { dictionary[key] = value; }
}Giống như thuộc tính, bộ chỉ mục có thể chỉ đọc (bỏ qua phương thức thiết lập) hoặc có logic xác thực trong các phương thức truy cập. Chúng rất phù hợp khi lớp của bạn bao bọc một tập hợp hoặc khi ký hiệu ngoặc vuông giúp đoạn code dễ đọc hơn.
Thử thách
DễHãy tạo một lớp Playlist cho phép bạn truy cập các bài hát bằng cú pháp dấu ngoặc vuông trực quan, giống như khi làm việc với mảng. Bạn sẽ tạo một danh sách phát nhạc, trong đó có thể lấy và cập nhật bài hát theo vị trí bằng bộ truy cập chỉ số.
Bạn sẽ sắp xếp code trong hai tệp:
Playlist.cs: Tạo lớpPlaylisttrong không gian tênMusic. Lớp này bao bọc một tập hợp bài hát nội bộ và cho phép truy cập như mảng thông qua bộ truy cập chỉ số. Danh sách phát của bạn cần có:- Một mảng chuỗi riêng tư để lưu tên các bài hát
- Một hàm khởi tạo nhận chuỗi tên bài hát được phân tách bằng dấu phẩy và tách chuỗi đó thành mảng nội bộ
- Một bộ truy cập chỉ số sử dụng
this[int index], cho phép lấy và đặt bài hát tại một vị trí cụ thể - Một thuộc tính chỉ đọc
Counttrả về số bài hát trong danh sách phát - Một phương thức
GetAllSongs()trả về tất cả bài hát, được nối bằng" | "
Program.cs: Trong tệp chính, tạo danh sách phát từ đầu vào, sau đó dùng bộ truy cập chỉ số để truy cập và sửa bài hát. Minh họa cách đọc bài hát theo chỉ số và cập nhật bài hát tại một vị trí cụ thể.
Bạn sẽ nhận ba đầu vào:
- Một danh sách tên bài hát được phân tách bằng dấu phẩy (ví dụ:
Song A,Song B,Song C) - Một chỉ số để lấy bài hát (số nguyên)
- Một tên bài hát mới để thay thế bài hát tại cùng chỉ số đó
In đầu ra theo định dạng sau:
Total songs: {Count}
Song at index {index}: {song title}
After update: {GetAllSongs()}Ví dụ, nếu đầu vào là Rock Anthem,Jazz Vibes,Pop Hit, 1 và Blues Classic, đầu ra sẽ là:
Total songs: 3
Song at index 1: Jazz Vibes
After update: Rock Anthem | Blues Classic | Pop HitLưu ý cách bộ truy cập chỉ số cho phép bạn truy cập playlist[1] để lấy "Jazz Vibes", rồi gán playlist[1] = "Blues Classic" để cập nhật bài hát. Cách này tự nhiên hơn nhiều so với việc gọi các phương thức như GetSongAt(1) hoặc SetSongAt(1, "Blues Classic")!
Tự làm thử
using System;
using Music;
class Program
{
public static void Main(string[] args)
{
// Đọc dữ liệu đầu vào
string songList = Console.ReadLine();
int index = Convert.ToInt32(Console.ReadLine());
string newSong = Console.ReadLine();
// TODO: Tạo đối tượng Playlist từ songList
// TODO: In ra tổng số bài hát bằng thuộc tính Count
// TODO: In ra bài hát tại chỉ số đã cho bằng bộ chỉ mục
// TODO: Cập nhật bài hát tại chỉ số đã cho bằng bộ chỉ mục
// TODO: In ra tất cả bài hát sau khi cập nhật bằng GetAllSongs()
}
}
Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Lập trình hướng đối tượng
1Các khái niệm cơ bản về lập trình hướng đối tượng
Tệp bên ngoàiKhông gian tên và chỉ thịGiới thiệu về lớp và đối tượngTừ khóa thisPhương thức và tham sốTrường và thuộc tínhHàm khởi tạoKhởi tạo đối tượngÔn tập: Máy tính đơn giản4Kế thừa
Cú pháp kế thừa cơ bản (:)Từ khóa 'base'Từ khóa virtual và overrideLớp sealedLớp cơ sở 'object'Ôn tập: hệ phân cấp nhân viên7Tính năng nâng cao
Nạp chồng toán tửBộ lập chỉ mục (this[])Ghi đè ToString()Phương thức mở rộngÔn tập: Danh sách tùy chỉnh10Các mẫu thiết kế phần 1
Giới thiệu về mẫu thiết kếSingleton an toàn với luồngMẫu FactoryMẫu Observer (sự kiện)Mẫu Strategy2Thuộc tính và thành viên tĩnh
Thuộc tính tự độngThuộc tính chỉ đọc hoặc chỉ ghiTrường và phương thức tĩnhLớp tĩnhThành viên có thân biểu thức5Đa hình và interface
Đa hình lúc biên dịch và lúc chạyInterface và lớp trừu tượngNhiều interfaceInterface tường minhUpcasting và downcastingÔn tập: bộ tính toán hình học8Các khái niệm OOP nâng cao
Ưu tiên composition hơn kế thừaGenerics (lớp và phương thức)Delegate và sự kiệnAttribute và reflectionGiao diện IDisposable và câu lệnh usingKiến thức cơ bản về dependency injection11Các mẫu thiết kế phần 2
Mẫu lệnhMẫu bộ chuyển đổiMẫu trang tríMẫu phương thức khuôn mẫuMẫu trạng tháiMẫu tổ hợpTự luyện tập: Trình biên dịch C# online