2010-02-09 50 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