Trong lập trình C#, hai phương thức đặc biệt thường được sử dụng là ToString
và Equals
. Mỗi phương thức này đóng vai trò quan trọng trong việc xử lý và so sánh các đối tượng. Bài viết này sẽ giải thích chi tiết về cách sử dụng hai phương thức này, cũng như cách tùy chỉnh chúng để phù hợp với yêu cầu cụ thể của bạn.
Phương thức ToString
Phương thức ToString
là một phương thức có sẵn trong tất cả các lớp trong .NET, nhờ kế thừa từ lớp Object
. Chức năng chính của ToString
là trả về một chuỗi chứa thông tin biểu diễn của đối tượng. Khi phương thức ToString
của một đối tượng được gọi, nó trả về một chuỗi mặc định trừ khi phương thức này được ghi đè.
Ví dụ cơ bản:
using System;
public class Program
{
public static void Main()
{
int number = 123;
DateTime now = DateTime.Now;
Console.WriteLine(number.ToString()); // "123"
Console.WriteLine(now.ToString()); // Chuỗi biểu diễn ngày giờ hiện tại
}
}
Ghi đè ToString
trong lớp tự định nghĩa:
Để cung cấp một biểu diễn chuỗi thân thiện hơn, bạn có thể ghi đè phương thức ToString
trong các lớp tự định nghĩa của mình.
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public override string ToString()
{
return $"{FirstName} {LastName}";
}
}
class Program
{
static void Main()
{
Person person = new Person { FirstName = "John", LastName = "Doe" };
Console.WriteLine(person.ToString()); // "John Doe"
}
}
Phương thức Equals
Phương thức Equals
được dùng để so sánh sự bằng nhau của hai đối tượng. Phương thức mặc định của Equals
trong lớp Object
sẽ so sánh tham chiếu, nghĩa là nó kiểm tra xem hai biến có tham chiếu đến cùng một đối tượng trong bộ nhớ hay không. Thông thường, bạn sẽ muốn ghi đè phương thức này để so sánh giá trị của các thuộc tính trong đối tượng.
Ví dụ cơ bản:
public class Program
{
public static void Main()
{
string str1 = "hello";
string str2 = "hello";
Console.WriteLine(str1.Equals(str2)); // True
}
}
Ghi đè phương thức Equals
trong lớp tự định nghĩa:
Để triển khai so sánh giá trị tùy chỉnh, bạn cần ghi đè cả Equals
và GetHashCode
trong lớp của mình.
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public override bool Equals(object obj)
{
if (obj == null || GetType() != obj.GetType())
return false;
Person person = (Person)obj;
return (FirstName == person.FirstName) && (LastName == person.LastName);
}
public override int GetHashCode()
{
return Tuple.Create(FirstName, LastName).GetHashCode();
}
}
class Program
{
static void Main()
{
Person person1 = new Person { FirstName = "John", LastName = "Doe" };
Person person2 = new Person { FirstName = "John", LastName = "Doe" };
Console.WriteLine(person1.Equals(person2)); // True
}
}
Kết luận
Việc sử dụng các phương thức đặc biệt như ToString
và Equals
không chỉ giúp dễ dàng hơn trong việc xử lý và so sánh các đối tượng, mà còn giúp mã nguồn của bạn trở nên rõ ràng và dễ đọc hơn. Ghi đè các phương thức này dựa trên nhu cầu cụ thể cho phép bạn tạo ra các biểu diễn chuỗi hoặc logic so sánh chính xác và phù hợp với ứng dụng của mình. Việc hiểu và sử dụng đúng các phương thức này là kỹ năng quan trọng để trở thành lập trình viên C# giỏi.
Comments