2011-08-16 52 views
6

可能重複:
Why must we define both == and != in C#?重載+ =,+,==和=操作

爲什麼只有+超載超載+ =可能的,但==和!=分開重載?
它似乎應該倒置。
+ =重載幾乎總是可以寫得更有效,因爲沒有必要爲新對象分配內存。但是我不能發明一個例子,其中運算符==和!=應該在除了反轉結果Equals()之外有所不同。

回答

7

類似的問題asked before

最大的原因是,當您將==!=運算符重載時,您不必返回布爾值。如果你沒有返回一個布爾值,那麼你不能只顛倒免費的操作符。還有其他可能的原因,他們分別超載,您可以查看該問題的答案出於其他原因。

有一個有效的原因,你不能重載+=,因此它通過+運算符隱式完成。我必須處理的是,您不能在C#中重寫賦值運算符,這是語言標準的一部分。 +=是增量和賦值,後者在C#中不能重載。

+4

+1想象一下如果你可以單獨重載'+'和'+ =',瘋狂...... –

+0

如果C#和.net沒有做可變結構的惡事(可變結構不是邪惡的 - 有些或者如果他們允許類限制對他們對象的引用的惡意混雜共享,那麼使用單獨的+ =和+運算符將會很有用,因爲使用「+」運算符意味着要創建一個複製並保留原始文本,而「+ =」意味着可以修改原文。請注意,順便說一句,事件支持「+ =」和「 - =」,但不支持「+」和「 - 」。 – supercat