【问题标题】:how can i avoid function with 2 optional parameters in vb.net?如何避免在 vb.net 中使用 2 个可选参数的功能?
【发布时间】:2015-09-02 11:05:27
【问题描述】:

如何避免在 vb.net 中使用 2 个可选参数的函数?
如果使用参数名称调用函数怎么办?
例如:

Public Function ABC(ByRef a As Integer, Optional b As Integer = 0, Optional c As Integer = 0) As Integer
    'do something  
End Function

在这种情况下,如何进行重载?
场景有 a、a 和 b、a 和 c 以及 a、b、c。

【问题讨论】:

  • 究竟你用的是什么语言?似乎是 c# 和 vb 的混合体
  • 请修正您的定义。 VB.net 或 C#。可选参数也需要默认值。
  • 好的,现在怎么办?

标签: .net vb.net syntax overloading optional-parameters


【解决方案1】:

这里的重载将不起作用,因为参数都是相同的类型,这意味着“a and b”和“a and c”的签名将是相同的。

有关更多信息,请参阅规则中的wikipedia article on overloading

重载的函数必须在数量或数据类型上有所不同。

您所拥有的将完全正常工作 - 您可以完全省略参数或使用 := 表示法单独指定:

  • ABC(1)ABC(a:=1)
  • a 和 b ABC(1, 2)ABC(a:=1, b:=2)
  • a 和 c ABC(1, , 3)ABC(1, c:=3)
  • a、b、c ABC(1, 2, 3)ABC(a:=1, b:=2, c:=3)

【讨论】:

  • 我必须添加 4 个不同的功能吗?你能解释一下 ABC(1,c:=3) 的用法吗?
  • 不,你只是以不同的方式调用同一个函数。
  • 你能帮我提供一个样品吗?我应该删除可选关键字的使用。
  • 我的回答中给出的示例
  • 这个答案说明了一切。如果要单独设置参数并丢弃不想明确设置的参数,则需要Optional-关键字。您无法通过重载来解决它,因为您的两个可选参数具有相同的类型。如果您不想要很多函数并且不想要 Optional 关键字,只需将其删除并调用填充有 0 的函数。
【解决方案2】:

无论如何:我假设,您的可选整数的默认值为零。

你最好不要使用可选参数,而是重载。

问题仅在于 a/b 与 a/c,因为参数的数量和类型相同。 对于其中一种情况,重载必须具有不同的名称(此处:ABCopt

无论如何,每个重载只是一个调用主函数的单行代码

Public Function ABC(a as int)
    Return ABC(a, 0, 0)
End Function

Public Function ABC(a as int, b as int)
    Return ABC(a, b, 0)
End Function

Public Function ABCopt(a as int, c as int)
    Return ABC(a, 0, c)
End Function

Public Function ABC(a as int, b as int, c as int)
    ' Do something with a, b, c
    ' ...
End Function

【讨论】:

  • 是不是可以减少函数的数量或者使用递归什么的?
  • @nithinnayak - 如果你的任务是摆脱可选的,那么就是这样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-27
  • 2011-02-11
  • 1970-01-01
  • 2020-01-09
  • 2019-10-26
  • 1970-01-01
  • 2018-01-07
相关资源
最近更新 更多