【问题标题】:How do I prevent code duplication when defining multiple methods with the same name?定义多个同名方法时如何防止代码重复?
【发布时间】:2019-04-23 20:58:15
【问题描述】:

我最近发现你可以定义多个具有相同名称的方法,只要它们的参数不同(我相信它被称为方法重载)。例如,在一个脚本中,我有一个名为getDate(int date) 的方法和另一个名为getDate() 的方法。这些方法之间的唯一区别是不接受参数的方法使用类中定义的静态整数而不是date 参数。

我在课堂上至少有 5 种不同的方法使用了这个逻辑,但是像这样复制代码似乎很麻烦。有没有更优雅的解决方案?

【问题讨论】:

  • 请向我们展示您询问的代码。代码描述并没有那么有用,因为它们留下了太多的想象空间,而且往往不完整或不准确。
  • public DateTime getDate() { return getDate(staticInt); } 怎么样?这将通过调用参数重用重载,而不是复制代码。无论如何,您可能应该发布您的代码,以便我们可以准确地看到我们在这里处理的内容,魔鬼在细节中等等。
  • @LasseVågsætherKarlsen 伙计,这太简单了,正是我所需要的!非常感谢。

标签: c# unity3d methods overloading code-duplication


【解决方案1】:

通常,最好有一个函数来完成您想要实现的功能,而其他函数调用该函数(或相互调用)以避免重复实际逻辑。

我会用你的例子:

Date GetDate(int date) {
    // -- do whatever you do here
    return DoAThing(date);
}

Date GetDate() {
    return GetDate(staticVar);
}

这样,如果您想更改获取日期的方式,则不必在多个位置更改代码,并且当您修改 GetDate(int date) 时,调用它的其他函数将简单地效仿。

【讨论】:

  • 糟糕。我没有看到@Lasse Vågsæther Karlsen 基本上已经回答了这个问题,因为它在评论中。但我们基本上是在说同样的话:)
【解决方案2】:

只需根据需要调用方法,例如

//To Get the Date normally
DateTime date = getDate();
//Otherwise
date = getDate(1, DateTime.Today);

打电话给他们应该没有问题。它们应该被统一正确地重载,因为我用我的编辑器检查过。

【讨论】:

  • 这不是提问者的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
  • 2017-05-07
  • 1970-01-01
  • 1970-01-01
  • 2019-01-25
  • 1970-01-01
相关资源
最近更新 更多