thể trùng lặp:
Why ReferenceEquals and == operator behave different from EqualsTại sao cài đặt mặc định == không gọi Equals?
Việc thực hiện mặc định của ==
điều hành so sánh đối tượng bằng cách tham khảo. Vì vậy, khi bạn ghi đè Equals (hành vi mặc định giống nhau) bạn cũng phải chỉ định các toán tử ==
và !=
để chúng gọi Equals (và làm cho nó trong mọi lớp phân cấp như các toán tử ==
và !=
không phải là ảo).
Câu hỏi của tôi là tại sao lại như vậy? Tại sao ==
và !=
so sánh các đối tượng bằng tham chiếu thay vì sử dụng Bằng? Tôi đoán có một lý do cho một điều cơ bản như vậy.
Cập nhật.
Để nhận xét: Tôi giả định ==
nên phụ thuộc vào Equals (nhưng không ngược lại) vì bạn có thể ghi đè Equals trong lớp cơ sở và sử dụng triển khai này trong các lớp dẫn xuất tự động. Nó sẽ không hoạt động nếu Equals đã sử dụng ==
khi triển khai, vì ==
không phải là ảo.
Điều gì nên sử dụng 'Bằng’? – Oded
Theo thiết kế, tương tự như Java, thực sự. –
@JamesMichaelHare, quyết định thiết kế không đến từ đâu cả ... – SiberianGuy