2012-03-03 34 views
21

theo msdnIStructuralEquatable vs Equals?

IStructuralEquatable

Định nghĩa phương pháp để hỗ trợ việc so sánh các đối tượng cho cấu trúc bình đẳng. Equality cấu trúc có nghĩa là hai đối tượng là bình đẳng bởi vì chúng có giá trị bằng nhau. Nó khác với bình đẳng tham chiếu, trong đó chỉ ra rằng hai tham chiếu đối tượng bằng nhau vì chúng tham chiếu cùng một đối tượng vật lý.

không phải là điều gì Equals nên làm gì? (khi ghi đè IEquatable)?

+0

@CodeInChaos Từ đọc của tôi - chỉ dành cho các loại kết hợp (có chứa một số yếu tố) .... phải không? - nếu không - nếu nó chỉ là một đối tượng - tôi có thể thực hiện bằng ....? –

+1

Sự hiểu biết của tôi là nó được sử dụng cho bộ sưu tập như các loại, và đóng gói phần cấu trúc của so sánh, nhưng bỏ qua so sánh các yếu tố với một so sánh được thông qua bởi người dùng. Nhưng tôi không thực sự chắc chắn nếu tôi thực sự có nó. – CodesInChaos

+0

http://stackoverflow.com/a/5601068/445517 Nhưng tôi nghĩ câu trả lời được chấp nhận vẫn là (anh ta đã sửa chữa nó) sai/không nhận được điểm của 'IStructuralEquatable'. – CodesInChaos

Trả lời

2

Lý do tại sao bạn cần IStructuralEquatable là để xác định một cách so sánh mới có thể phù hợp cho tất cả các đối tượng.

Giao diện IStructuralEquatable cho phép bạn thực hiện tùy chỉnh so sánh để kiểm tra tính bình đẳng cấu trúc của bộ sưu tập đối tượng. Tức là, bạn có thể tạo định nghĩa riêng của mình về cấu trúc bình đẳng và xác định rằng định nghĩa này được sử dụng với một bộ sưu tập loại chấp nhận giao diện IStructuralEquatable.

Ví dụ: nếu bạn muốn danh sách sắp xếp tất cả các phần tử theo một định nghĩa cụ thể. Trong trường hợp này, bạn không muốn thay đổi triển khai lớp của mình, do đó bạn không muốn ghi đè phương thức Bằng.

điều này sẽ xác định cách tổng quát để so sánh các đối tượng trong ứng dụng của bạn.

0

Hợp đồng của Equals khác với IStructuralEquatable, trong đó nó cho biết 2 đối tượng là hợp lý bằng nhau.

Theo mặc định, Bằng trên một loại tham chiếu cho biết liệu hai tham chiếu đối tượng có tham chiếu cùng một cá thể đối tượng hay không. Tuy nhiên, bạn có thể ghi đè Equals theo logic của ứng dụng của bạn.

Ví dụ, nó có thể có ý nghĩa cho hai trường hợp khác nhau của một lớp nhân viên được coi là bình đẳng nếu cả hai đều đại diện cho cùng một thực thể trong hệ thống của bạn. Để đạt được điều này, các đối tượng nhân viên với các thuộc tính SSN phù hợp sẽ được coi là bình đẳng về mặt logic, ngay cả khi chúng không có cấu trúc bằng nhau.

+4

Er ... nếu bạn muốn * logic * tương đương, bạn ghi đè 'Object.Equals (Object other)'. Nếu bạn muốn * tham chiếu * tương đương, bạn chỉ đơn giản là không ghi đè lên nó.Nếu bạn có một 'struct', và bạn muốn so sánh * logic * (mà bạn hầu như luôn luôn làm), bạn ghi đè phương thức đó, và bạn cũng thực hiện' IEquatable .Equals (T other) '. Nhưng tại sao bạn lại cần 'IStructuralEquatable'? – Mehrdad

Các vấn đề liên quan