Toán tử so sánh bằng trong c#

c-sharp

(Phạm Quyết Nghị) #1

Nếu chúng ta nạp chồng toán tử bằng (==), thì chúng ta cũng nên phủ quyết phương thức ảo Equals() được cung cấp bởi lớp object và chuyển lại cho toán tử bằng thực hiện. Điều này cho phép lớp của chúng ta thể tương thích với các ngôn ngữ .NET khác không hỗ trợ tính nạp chồng toán tử nhưng hỗ trợ nạp chồng phương thức. Những lớp FCL không sử dụng nạp chồng toán tử, nhưng vẫn mong đợi lớp của chúng ta thực hiện những phương thức cơ bản này. Do đó ví dụ lớp ArrayList mong muốn chúng ta thực thi phương thức Equals().

Lớp object thực thi phương thức Equals() với khai báo sau:

public override bool Equals( object 0 )

Bằng cách phủ quyết phương thức này, chúng ta cho phép lớp Fraction hành động một cách đa hình với tất cả những lớp khác. Bên trong thân của phương thức Equals() chúng ta cần phải đảm bảo rằng chúng ta đang so sánh với một Fraction khác, và nếu như chúng ta đã thực thi một toán tử so sánh bằng thì có thể định nghĩa phương thức Equals() như sau:

pubic override bool Equals( object o)
{
	if ( !(o is Fraction) )
	{
		return false;
	}
	
	return this == (Fraction) o;
}

Toán tử is được sử dụng để kiểm tra kiểu của đối tượng lúc chạy chương trình có tương thích
với toán hạng trong trường hợp này là Fraction. Do o là Fraction nên toán tử is sẽ trả về true.


Tài liệu c# tiếng việt cho người mới bắt đầu (newbie)

89% Thành viên có cách giải cho một câu hỏi. Bạn thì sao?