Ôn tập: Danh sách tùy chỉnh
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 40 trên 70.
Thử thách
DễHãy tạo một lớp CustomList kết hợp tất cả các tính năng nâng cao trong chương này: nạp chồng toán tử, bộ chỉ mục, ghi đè ToString() và phương thức mở rộng, để tạo ra một tập hợp có cách sử dụng tự nhiên và trực quan.
Bạn sẽ sắp xếp code trong ba tệp:
CustomList.cs: Tạo lớpCustomListtrong không gian tênCollections. Lớp này bao bọc một mảng số nguyên nội bộ và cung cấp cách truy cập trực quan. Danh sách của bạn cần có:- Một mảng số nguyên riêng tư để lưu các phần tử và thuộc tính
Count(có hàm thiết lập riêng tư) để theo dõi số phần tử đang lưu - Một hàm khởi tạo nhận sức chứa (số nguyên) và khởi tạo mảng nội bộ với kích thước đó
- Một phương thức
Add(int item)để thêm phần tử vào vị trí còn trống tiếp theo (nếu còn chỗ) - Một bộ chỉ mục
this[int index]cho phép lấy và đặt phần tử theo vị trí - Một toán tử
+được nạp chồng để kết hợp hai CustomList thành danh sách mới chứa tất cả phần tử của cả hai (sức chứa của danh sách mới phải bằng tổng số phần tử của hai danh sách) - Một phương thức
ToString()được ghi đè để trả về các phần tử theo định dạng[item1, item2, item3], chỉ bao gồm các phần tử đếnCount, không bao gồm các vị trí trống
- Một mảng số nguyên riêng tư để lưu các phần tử và thuộc tính
ListExtensions.cs: Tạo lớp tĩnhListExtensionstrong không gian tênCollections, với một phương thức mở rộng dành cho CustomList:Sum(): trả về tổng các phần tử trong danh sách (đếnCount)
Program.cs: Trong tệp chính, tạo hai CustomList, thêm phần tử vào mỗi danh sách, rồi minh họa cách tất cả tính năng phối hợp với nhau: dùng bộ chỉ mục để truy cập phần tử, kết hợp các danh sách bằng toán tử+, in bằngToString()và tính tổng bằng phương thức mở rộng.
Bạn sẽ nhận sáu đầu vào:
- Ba số nguyên để thêm vào danh sách thứ nhất
- Ba số nguyên để thêm vào danh sách thứ hai
Tạo danh sách thứ nhất với sức chứa 5 và danh sách thứ hai với sức chứa 3. Thêm ba giá trị đầu vào vào danh sách tương ứng.
In kết quả theo định dạng sau:
List 1: {ToString()}
List 2: {ToString()}
List 1[0]: {first item}
Combined: {ToString() of combined list}
Combined sum: {Sum()}Ví dụ: nếu đầu vào là 10, 20, 30, 5, 15 và 25, kết quả sẽ là:
List 1: [10, 20, 30]
List 2: [5, 15, 25]
List 1[0]: 10
Combined: [10, 20, 30, 5, 15, 25]
Combined sum: 105Hãy chú ý cách các phần kết hợp với nhau: bộ chỉ mục cho phép truy cập như với mảng, toán tử + giúp bạn kết hợp các danh sách một cách tự nhiên, ToString() tạo ra kết quả dễ đọc, còn phương thức mở rộng bổ sung chức năng tiện ích. Đó là cảm giác khi sử dụng các lớp được thiết kế tốt!
Tự làm thử
using System;
using Collections;
class Program
{
public static void Main(string[] args)
{
// Đọc sáu số nguyên (integer)
int a1 = Convert.ToInt32(Console.ReadLine());
int a2 = Convert.ToInt32(Console.ReadLine());
int a3 = Convert.ToInt32(Console.ReadLine());
int b1 = Convert.ToInt32(Console.ReadLine());
int b2 = Convert.ToInt32(Console.ReadLine());
int b3 = Convert.ToInt32(Console.ReadLine());
// TODO: Tạo CustomList đầu tiên với dung lượng 5
// TODO: Thêm a1, a2, a3 vào danh sách (list) đầu tiên
// TODO: Tạo CustomList thứ hai với dung lượng 3
// TODO: Thêm b1, b2, b3 vào danh sách thứ hai
// TODO: In danh sách 1 bằng ToString()
// TODO: In danh sách 2 bằng ToString()
// TODO: In phần tử ở chỉ số 0 của danh sách 1 bằng bộ chỉ mục
// TODO: Gộp hai danh sách bằng toán tử (operator) + rồi in kết quả
// TODO: In tổng các phần tử trong danh sách đã gộp bằng phương thức (method) mở rộng Sum()
}
}
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