Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 方法重载和代码复制升级_C#_Oop - Fatal编程技术网

C# 方法重载和代码复制升级

C# 方法重载和代码复制升级,c#,oop,C#,Oop,重载方法倾向于鼓励在方法组的所有方法之间复制代码的习惯。例如,我可以在一个方法中提取一个字符串,将其写入文件等,但在另一个方法中也可以这样做,只是添加了一个额外的参数(创建重载) 方法本身可以放在基类中,这样可以使具体类看起来更干净,但是基类会有问题(解决问题)。params关键字似乎是一个解决方案,但我可以想象,如果我真的想通过这个想法(使用params而不是单个参数),会有一些其他问题 因此,我是唯一一个认为重载会促进代码重复的人吗 谢谢通常我会在重载中使用大多数参数来实现实际实现,并让其他

重载方法倾向于鼓励在方法组的所有方法之间复制代码的习惯。例如,我可以在一个方法中提取一个字符串,将其写入文件等,但在另一个方法中也可以这样做,只是添加了一个额外的参数(创建重载)

方法本身可以放在基类中,这样可以使具体类看起来更干净,但是基类会有问题(解决问题)。params关键字似乎是一个解决方案,但我可以想象,如果我真的想通过这个想法(使用params而不是单个参数),会有一些其他问题

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


谢谢

通常我会在重载中使用大多数参数来实现实际实现,并让其他重载调用此重载,为未设置的参数传递默认值


我当然不会在不同的重载中复制写入文件的代码-事实上,仅此代码就可能被重构为其自己的正确参数化私有方法。

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

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

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

这样,只有一个实现。

如果所有重载使用相同的代码,它们的处理方式略有不同,也许您应该为每个重载调用另一个函数,或者如果其中一个是基本的通用版本,然后,其他每个重载都应该调用泛型重载。

除了上面的选项之外,新版本的c#中即将出现的是默认参数功能,这基本上只是Winston所建议的syntitatic sugar

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

我在写同一篇文章,然后看到了你的。任何语言特性都可能导致代码膨胀。我想这里每个人都给出了几乎相同的答案。。。只是不同的表达方式,但我认为温斯顿说得最好:)是的,但只有当你只想要默认值时,如果没有给出。