方法重载和代码重复提升

时间:2010-02-09 14:33:20

标签: c# oop

重载方法往往会鼓励在方法组的所有方法之间复制代码的习惯。例如,我可以在一个方法中连接一个字符串,将其写入文件等,但是在另一个方法中执行相同的操作,但添加了一个额外的参数(创建重载)。

方法本身可以放在一个基类中,这将使具体类看起来更干净,但是基类会遇到问题(围绕问题)。 params关键字似乎是一个解决方案,但我可以想象如果我真的认为这个想法(使用参数而不是单个参数),那么还会存在某种其他问题。

因此,我是唯一一个认为重载会促进代码重复的人吗?

由于

4 个答案:

答案 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)

如果所有重载都使用相同的代码,它们只是略微不同地处理它,也许你应该创建每个重载调用的另一个函数,或者如果其中一个是基础,泛型版本,那么每个其他重载应该调用通用的那个。