【问题标题】:C# Method: How to make two sets of overloads? Edit: Parameters, not overloadsC#方法:如何进行两组重载?编辑:参数,而不是重载
【发布时间】:2018-10-04 10:36:48
【问题描述】:

我有一些代码我用不同的重载重用了其中的一部分 3 次。

因此重载看起来像这样:

    int[] DateCounterReturns = CalendarDateTime.DateCounter(answerDay, answerMonth, answerYear, false, false, 0);

另外两个地方,我必须以不同的方式使用相同的方法,因此我需要不同的重载。 false, false, 0 在我看来有点过头了,因为它不是必需的。

是否可以对方法说“您要么采用前三个重载(这里称为 answerDay、answerMonth、answerYear),要么全部采用 6 个!”?

假设我必须以不同的方式使用相同的方法 30 次 - 那么我是否必须在同一行中产生无穷无尽的重载流?或者可以通过某种方式对其进行分组或过滤?

【问题讨论】:

  • 也许您应该解释您的真正问题是什么,而不是您认为如何解决?或者为什么你不只使用DateTime 甚至是自定义类作为(单个)参数?
  • 您在整个解释过程中都将重载与参数混淆了
  • 在同一行中无穷无尽的重载。你确定你在这里谈论重载吗?看起来像可选参数
  • 形成你的问题,不清楚你是否知道重载是什么意思……方法重载是指你有两个或多个同名但参数不同的方法。既然我们已经清楚了那部分,请重新表述您的问题。
  • 我认为您正在寻找可选参数/默认参数docs.microsoft.com/en-us/dotnet/csharp/programming-guide/…

标签: c# class methods overloading


【解决方案1】:

在这种情况下,重载是我们调用相同的方法,但使用不同的参数。

您有一个基础 DateCounter,它接受 6 个参数,其中包含您的所有逻辑,但在某些情况下,您只对日、月和年感兴趣,而其他 3 个选项可能只是默认值。因此,这个重载只允许您输入这 3 个变量,然后在其中调用您的主要基础 DateCounter 方法,并将默认参数作为硬编码值传递。

它所做的只是让您不必输入 3 个可选参数。

public int[] CalendarDateTime.DateCounter(int answerDay, int answerMonth, int answerYear)
{
   return CalendarDateTime.DateCounter(answerDay, answerMonth, answerYear, false, false, 0);
}

在这种情况下,最后 3 个参数是可选的。这由 = {value} 表示。例如对于 optionalBoolA,如果您没有专门为其输入值,它将设置为 false。

然后您可以使用 3 个参数调用它

CalendarDateTime.DateCounter(10, 10, 2018);

或者,您也可以填写这些值:

CalendarDateTime.DateCounter(10, 10, 2018, true, true, 1);

public int[] CalendarDateTime.DateCounter(int answerDay, int answerMonth, int answerYear, bool optionalBoolA = false, bool optionaloolB = false, int optionalIntA = 0);

在较新版本的 c# 中,您可以使用此速记。它与第一个相同,但 c# 为您连接起来。

public int[] CalendarDateTime.DateCounter(int answerDay, int answerMonth, int answerYear) => CalendarDateTime.DateCounter(answerDay, answerMonth, answerYear, false, false, 0);

当您使用 Visual Studio 并输入 CalendarDateTime.DateCounter(

它会告诉你你的重载是什么,使用向上和向下箭头会告诉你参数是什么。

【讨论】:

  • 谢谢 :) 我敢打赌所有这些都会起作用,但我在编码方面还不够好,无法仅从这段代码中理解它们为何起作用或如何起作用。是否可以解释每种方式的工作原理?
  • 是的,谢谢!我会试一试,看看什么效果最好。
猜你喜欢
  • 1970-01-01
  • 2015-06-22
  • 2013-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多