【问题标题】:Method overloads and code duplication promotion方法重载和代码重复提升
【发布时间】:2010-02-09 14:33:20
【问题描述】:

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

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

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

谢谢

【问题讨论】:

    标签: c# oop


    【解决方案1】:

    通常我会在具有最多参数的重载中进行实际实现,并让其他重载调用此重载,并为未设置的参数传递默认值。

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

    【讨论】:

    • 我在写同一篇文章然后看到了你的。任何语言特性都可能导致代码膨胀。
    • 我想每个人在这里都想出了几乎相同的答案......只是表达方式不同,但我认为温斯顿说得最好:)
    【解决方案2】:

    除了上述选项外,新版c#中即将推出的默认参数功能,基本上只是Winston建议的语法糖。

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

    【讨论】:

    • 是的,但仅在您只需要默认值(如果未给出)的情况​​下。
    【解决方案3】:

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

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

    这种方式只有一个实现。

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 2019-10-22
        • 2012-05-02
        • 1970-01-01
        • 2018-10-09
        • 2015-07-28
        • 2021-08-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多