2010-02-09 49 views
3

重載方法傾向於鼓勵複製方法組的所有方法之間的代碼的習慣。例如,我可以在一個方法中對字符串進行串聯,將其寫入文件等,但在另一種方法中執行相同的操作,但是會增加一個附加參數(創建過載)。方法重載和代碼重複推廣

這些方法本身可以放在一個基類中,這會讓具體的類看起來更清晰,但是基類會出現問題(工作左右左右的問題)。 params關鍵字看起來像一個解決方案,但我可以想象如果我真的認爲這個想法通過(使用params而不是單個參數),會出現其他問題。

難道我因此認爲,過載促進代碼重複的只有一個?

感謝

回答

10

通常我會在最參數過載的實際執行情況,以及有其他重載稱它是通過默認值未設置的參數。

我肯定不會被重複碼寫入到跨越不同的重載文件 - 事實上,單靠代碼也許可以重構出到了自己的正常參數的私有方法。

+0

我在寫同一職位然後看到你的。任何語言功能都可能導致代碼膨脹。 – rerun 2010-02-09 14:37:32

+1

我想每個人都會在這裏提出幾乎相同的答案...只是說不同的方式,但我認爲溫斯頓把它說成是最好的:) – Jrud 2010-02-09 16:56:44

1

一個常見的模式,更多或更少的消除了這個問題是要有一個基實現,並且具有每個重載調用基實現,如下所示:

string WriteToFile(string fileName, bool overwrite) { 
    // implementation 
} 

string WriteToFile(string fileName) { 
    WriteToFile(fileName, false); 
} 

這種方式,只有一個實現。

1

如果所有的重載使用相同的代碼,他們只是處理它略有不同,也許您應該再拍功能,每超載的呼叫,或者如果他們中的一個是基礎,通用版本,然後其他每個的重載應該調用通用的重載。

2

除了上述選項,在C#的新版本即將推出的是默認參數的能力,這基本上是爲了什麼溫斯頓建議只是語法糖。

public string WriteToFile(string file, bool overWrite = false){ 
} 
+0

是的,但只有在你只需要默認值的情況下,如果沒有給出。 – Rostol 2016-10-23 20:16:38