繁体   English   中英

方法重载和代码重复提升

[英]Method overloads and code duplication promotion

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

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

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

谢谢

通常我在具有最多参数的重载中具有实际实现,并且让其他重载调用这个未传递的参数的默认值。

我当然不会复制跨越不同重载写入文件的代码 - 实际上,单独的代码可能会被重构为其自己的正确参数化私有方法。

除了上面的选项之外,新版c#即将推出的默认参数功能,基本上只是Winston建议的合成糖。

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

一个或多或少消除这个问题的常见模式是有一个基本实现,并让每个重载调用基本实现,如下所示:

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

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

这样只有一个实现。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM