重载方法往往会鼓励在方法组的所有方法之间复制代码的习惯。例如,我可以在一个方法中连接一个字符串,将其写入文件等,但是在另一个方法中执行相同的操作,但添加了一个额外的参数(创建重载)。
方法本身可以放在一个基类中,这将使具体类看起来更干净,但是基类会遇到问题(围绕问题)。 params关键字似乎是一个解决方案,但我可以想象如果我真的认为这个想法(使用参数而不是单个参数),那么还会存在某种其他问题。
因此,我是唯一一个认为重载会促进代码重复的人吗?
由于
答案 0 :(得分:11)
通常我在具有最多参数的重载中有实际的实现,并且让其他重载调用这个未通过设置的参数传递默认值。
我当然不会复制跨越不同重载写入文件的代码 - 实际上,单独的代码可能会被重构为其自己的正确参数化私有方法。
答案 1 :(得分:3)
除了上面的选项之外,新版c#中即将推出的默认参数功能,基本上只是Winston建议的合成糖。
public string WriteToFile(string file, bool overWrite = false){
}
答案 2 :(得分:2)
一个或多或少消除了这个问题的常见模式是有一个基本实现,并让每个重载调用基本实现,如下所示:
string WriteToFile(string fileName, bool overwrite) {
// implementation
}
string WriteToFile(string fileName) {
WriteToFile(fileName, false);
}
这种方式只有一个实现。
答案 3 :(得分:1)
如果所有重载都使用相同的代码,它们只是略微不同地处理它,也许你应该创建每个重载调用的另一个函数,或者如果其中一个是基础,泛型版本,那么每个其他重载应该调用通用的那个。