2011-11-10 39 views
9

Theo MSDN: Hầu hết các loại tham chiếu không được quá tải toán tử bình đẳng, ngay cả khi chúng ghi đè Bằng. Tuy nhiên, nếu bạn đang triển khai kiểu tham chiếu có ý định có ngữ nghĩa giá trị, chẳng hạn như kiểu số phức, bạn phải ghi đè toán tử bình đẳng.Tại sao Microsoft khuyên bạn nên bỏ qua việc thực hiện toán tử bình đẳng cho các kiểu tham chiếu?

các thực hành tốt nhất để thực hiện bằng phương pháp và bình đẳng điều hành cho một thực thể miền điển hình như khách hàng là gì?

Có nên triển khai bằng phương pháp để trả lại đúng nếu danh tính của hai thực thể giống nhau không? Điều gì nếu thực thể không phải là bất biến? Điều gì sẽ xảy ra nếu cả hai thực thể là mới và danh tính của chúng có giá trị trống. Và những gì về nhà điều hành bình đẳng?

JaredPar được đề cập hereBằng thực tế sẽ đo lường mức độ bình đẳng của các giá trị trong khi == sẽ đo lường xem chúng có cùng tham chiếu hay không.

+3

Liên kết bạn đã cung cấp không hiển thị văn bản đó cho tôi - bạn có thể làm rõ văn bản đó đến từ đâu không? (Đặc biệt, nó sử dụng từ "ghi đè" không chính xác gần cuối, làm tăng một số nghi ngờ ...) –

+0

http://msdn.microsoft.com/en-us/library/bsc2ak47.aspx – wRAR

+0

[link] trực tiếp (http://msdn.microsoft.com/en-us/library/bsc2ak47.aspx). Xem * Ghi chú cho Người triển khai *. – Jekas

Trả lời

4

Từ MSDN:

Hầu hết các loại tài liệu tham khảo không phải quá tải toán tử bình đẳng, ngay cả khi họ ghi đè Equals. Tuy nhiên, nếu bạn đang triển khai kiểu tham chiếu có ý định có ngữ nghĩa giá trị, chẳng hạn như kiểu số phức, bạn phải ghi đè toán tử bình đẳng.

Microsoft nghĩ rằng == chỉ nên được sử dụng cho các loại có giá trị, ví dụ: các loại số như Complex, BigInt vv Các loại kết hợp như Person không được ghi đè toán tử bình đẳng. Đó là vấn đề của kiểu mã và Microsoft xứng đáng đề xuất bạn làm theo hướng dẫn này. Tôi nghi ngờ rằng kết quả được biên dịch sẽ khác nhiều.

+0

Rất tiếc, tôi đã kiểm tra hộp kiểm wiki cộng đồng :) – larsmoa

3

Thông thường tôi sẽ không triển khai (= toán tử hoặc Bằng() cho các lớp của tôi, ví dụ: Khách hàng).

Bạn chắc chắn không nên ghi đè toán tử = vì nhà phát triển sử dụng lớp của bạn mong muốn = để so sánh con trỏ chứ không phải bản thân trường hợp, thay đổi hành vi này sẽ dẫn đến lỗi vì mọi người không mong đợi nó hoạt động theo cách đó.

Nếu bạn muốn bao gồm cách thực hiện so sánh ngữ nghĩa đó là phương thức Equals() và bạn có thể ghi đè nó để thực hiện kiểm tra bình đẳng theo bất kỳ cách nào bạn muốn sử dụng nó trong mã.

+0

Re: _developers sử dụng các lớp của bạn mong đợi == để so sánh con trỏ_. Thật vậy: mẫu 'if (param == null)' là siêu thường xuyên! –

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