2011-07-19 92 views
5

使用擴展方法,我們可以輕鬆地將方法添加到任何類型。很顯然,這將在未來版本的.net中打開擴展方法不能再被調用的可能性(例如,類型現在包括一個與擴展方法具有相同簽名的方法)。向前兼容的擴展方法

這應該是一個問題嗎?

如果是這樣,我該如何處理這個問題並設計我的擴展方法,以儘量減少代碼更改?

+0

如果您擔心這一點,一種解決方案不會使用擴展方法。 ';)' 您可以從您正在擴展的類繼承並添加該方法。您將收到警告,說明您隱藏稍後添加的新方法。或者你可以從靜態方法中刪除'this'參數修飾符。 –

回答

6

如果框架在未來的變化如此之大,總是會有兼容性問題。如果添加一個新的框架方法與您的擴展方法具有相同的名稱,那麼它們很可能具有相同的功能,或者至少具有非常類似的功能,因此無論如何都會有重構。

我認爲擴展方法的威力太大,不能僅僅因爲這個風險而忽略。

+0

我同意。使您的擴展方法儘可能清晰,明顯,直接。 – hatchet

0

使用永遠不會在框架中使用的模糊方法名稱。

編輯 - 也許晦澀是不是最合適的詞,請有意義的,但不常見verbage

試圖避免衝突簽名代替真的避免的麻煩的唯一策略代碼重做(假設擴展方法的功能需要保留,而不是簡單地轉換爲框架的方法定義)。

+0

我不是那個粉絲。名字應該清楚。 –

+0

同意,它們應該是有意義的,但我認爲有意義和晦澀的需要相互排斥。拉出詞庫並使用不太常見但明顯的動詞。 – roken

+1

如果您擔心可以隨時添加前綴,如ext_Redefine而不是Redefine。 – Blam

0

恐怕你唯一能做的就是爲你的擴展方法提供足夠的名字,這樣你100%肯定你永遠不會有衝突。

不談論加入你的貓方法名的名字,只是嘗試更多的創造性:)