2011-08-16 36 views
6

Có thể trùng lặp:
Why must we define both == and != in C#?quá tải + =, +, ==, và các nhà khai thác =

Tại sao quá tải của + = có thể chỉ do quá tải của +, nhưng == và! = bị quá tải riêng?
Có vẻ như nó sẽ bị đảo ngược.
+ = quá tải là gần như luôn luôn có thể viết hiệu quả hơn bởi vì nó không cần thiết để cấp phát bộ nhớ cho đối tượng mới. Nhưng tôi không thể phát minh ra một ví dụ trong đó toán tử == và! = Nên khác trong một cái gì đó ngoại trừ đảo ngược kết quả bằng().

Trả lời

7

Câu hỏi tương tự đã là asked before.

Lý do lớn nhất là khi bạn quá tải các toán tử ==!=, bạn không phải trả lại giá trị boolean. Nếu bạn không trả lại boolean, bạn không thể đảo ngược toán tử miễn phí. Có nhiều lý do khác có thể khiến chúng bị quá tải riêng, bạn có thể xem câu trả lời cho câu hỏi đó vì những lý do khác.

Có một lý do hợp lệ bạn không thể quá tải += và do đó nó được thực hiện hoàn toàn thông qua toán tử +. Tôi phải làm với thực tế là bạn không thể ghi đè toán tử gán trong C#, nó là một phần của tiêu chuẩn ngôn ngữ. Các += là tăng và gán, sau này bạn không thể quá tải trong C#.

+4

+1 Chỉ cần tưởng tượng sự điên rồ nếu bạn có thể quá tải '+' và '+ =' riêng ... –

+0

Nếu C# và .net không làm điều xấu với cấu trúc có thể thay đổi (cấu trúc có thể biến đổi không phải là điều ác - một số mọi thứ .net thực hiện với chúng), hoặc nếu chúng cho phép các lớp hạn chế việc chia sẻ các tham chiếu đến các đối tượng của chúng, thì sẽ hữu ích khi có các toán tử + = và + riêng biệt, vì sử dụng toán tử "+" sao chép và để nguyên bản gốc, trong khi "+ =" ngụ ý ban đầu có thể được sửa đổi. Lưu ý, btw, sự kiện đó hỗ trợ "+ =" và "- =", nhưng không hỗ trợ "+" và "-". – supercat

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