Ghi đè ToString()
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 38 trên 70.
Mọi lớp trong C# đều kế thừa từ object, lớp này cung cấp phương thức ToString(). Theo mặc định, phương thức này trả về tên kiểu đầy đủ, không hữu ích lắm khi bạn muốn xem dữ liệu thực tế của một đối tượng.
Bạn có thể ghi đè ToString() để trả về một chuỗi thể hiện đối tượng của bạn có ý nghĩa hơn:
public class Person
{
public string Name { get; }
public int Age { get; }
public Person(string name, int age)
{
Name = name;
Age = age;
}
public override string ToString()
{
return $"{Name} ({Age} years old)";
}
}Bây giờ, khi bạn in ra hoặc nối một đối tượng Person, bạn sẽ nhận được kết quả dễ đọc:
Person p = new Person("Alice", 30);
Console.WriteLine(p); // Alice (30 tuổi)Nếu không ghi đè, câu lệnh này sẽ in ra nội dung như MyNamespace.Person. Bạn cần dùng từ khóa override vì bạn đang thay thế phương thức được kế thừa từ object. Điều này đặc biệt hữu ích khi gỡ lỗi và ghi nhật ký, vì bạn cần nhanh chóng nắm được trạng thái của một đối tượng.
Thử thách
DễHãy tạo một lớp Book cung cấp biểu diễn chuỗi có ý nghĩa khi in ra, giúp việc gỡ lỗi và hiển thị thông tin sách trực quan hơn nhiều.
Bạn sẽ tổ chức code trong hai tệp:
Book.cs: Tạo một lớpBooktrong không gian tênLibraryđể biểu diễn một cuốn sách cùng các thông tin thiết yếu. Lớp sách cần có:- Ba thuộc tính chỉ đọc:
Title(chuỗi),Author(chuỗi) vàYear(số nguyên) - Một hàm khởi tạo nhận title, author và year theo đúng thứ tự đó
- Một phương thức
ToString()được ghi đè để trả về chuỗi theo định dạng:"{Title}" by {Author} ({Year})
- Ba thuộc tính chỉ đọc:
Program.cs: Trong tệp chính, hãy tạo một đối tượngBookbằng các giá trị đầu vào rồi in trực tiếp đối tượng đó. Nhờ ghi đèToString(), khi truyền đối tượng sách vàoConsole.WriteLine(), thông tin theo định dạng sẽ tự động hiển thị thay vì tên kiểu dữ liệu.
Bạn sẽ nhận ba giá trị đầu vào:
- Title của sách (chuỗi)
- Tên tác giả (chuỗi)
- Năm xuất bản (số nguyên)
In trực tiếp đối tượng sách bằng Console.WriteLine().
Ví dụ, nếu đầu vào là The Great Gatsby, F. Scott Fitzgerald và 1925, đầu ra sẽ là:
"The Great Gatsby" by F. Scott Fitzgerald (1925)Điểm thú vị ở đây là bạn không gọi ToString() một cách tường minh. Khi truyền một đối tượng vào Console.WriteLine(), phương thức này sẽ tự động gọi phương thức ToString() của đối tượng. Phần ghi đè giúp đầu ra hữu ích, thay vì chỉ hiển thị Library.Book!
Tự làm thử
using System;
using Library;
class Program
{
public static void Main(string[] args)
{
// Đọc đầu vào
string title = Console.ReadLine();
string author = Console.ReadLine();
int year = Convert.ToInt32(Console.ReadLine());
// TODO: Tạo đối tượng Book bằng các giá trị đầu vào
// TODO: In trực tiếp đối tượng Book bằng Console.WriteLine()
}
}
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