2012-05-17 62 views
0

爲什麼它需要某些運算符例如比較運算符。.net操作符超載

< <= > >= = <> 

你還必須實現它們的補充嗎?

< >= 

什麼是限制你的目標僅僅實現

< 

如果具有特定含義的微博,

>= 

注:解決方法我的目標是在舊版上貼上Obsolete屬性運營商。

+0

如何將'X = x'不,除非你超載運營商有一個意義比其直觀含義是完全不同的? –

+0

您可以更自然地實現綁定檢查 較低<值<較高 –

+0

您只允許超載運算符。用你的邏輯給我建議你也應該實現minus操作符。 –

回答

0

大概是因爲,如果你超載運營商的一面,你正在實施一些自定義規則,默認操作將不匹配您的規則,從而產生奇怪的行爲。

例如,如果你定義 'int>的' 是 '返回(X> 5);' (出於某種原因...),並且您沒有重疊'int <'運算符的逆規則,那麼;

4> 1是假的(由您的規則),但4 < 1將是假的(通過默認規則)。

吉姆,這是不合邏輯的。

+0

逆是 「><--><= > = <-->< == <-->!=' 它不限於返回一個它可以返回(我認爲)任何類型的布爾。 –

4

操作員在淨超載(至少爲C#和VB)是有意操作者比用C重載不太靈活++。

原因之一的Java竟然刪除完全超載是,許多開發商濫用超載做聰明的前瞻性的東西,弄得其他開發商,並打破那希望能夠泛型算法的核心假設,說,合理比較用戶類型的兩個實例。

雖然淨帶回一些靈活性,設計師們小心地只允許與他們只用於其慣用的含義意圖超載某些運營商。

對稱實現比較運算符的要求是對該意圖的點頭。

如果你想要做更積極的操作符重載,我會鼓勵你考慮使用F#,在這裏你有機會獲得與畫巧妙操作符號符號的更廣泛的調色板。

+0

其中一些運營商僅適用於F#代碼。 –