【问题标题】:How to distinguish between two method overloads both with a ParamArray parameter?如何区分使用 ParamArray 参数的两个方法重载?
【发布时间】:2015-07-16 17:14:16
【问题描述】:

具有以下方法签名

Public Sub RareSub(a as string, ParamArray c as string())
Public Sub RareSub(a as string, b as string, ParamArray c as string())

在不混淆 b 参数作为 c 数组的一部分的情况下调用每个重载的正确方法是什么?

【问题讨论】:

  • 既然都是字符串,我认为混淆是不可避免的。如何判断bb 还是c 中的第一项?
  • 类似于 string.Format 方法 Format(String, Object), Format(String, Object[]), Format(String, Object, Object)。要调用 Format(String, Object[]) 您需要 4 个参数,否则将调用 Format(String, Object, Object) 。我使用 C#,但它的东西是一样的
  • 唯一的方法是使用 RareSub(a:aValue, b:bValue) 之类的名称调用
  • VB.NET 语言有关于选择哪个重载的规则,在语言规范中有详细说明。正如所写,第一个方法只会在仅使用 one 参数调用时使用。因此它不是很有用,您不妨删除 c 参数。
  • 您希望RareSub("a", "c") 调用第一个重载。这就是你想要做的吗?

标签: vb.net parameter-passing


【解决方案1】:

ParamArray 接受数组作为参数列表。

如果您想使用第一种方法(带有一个参数和ParamArray),则为ParamArray 添加参数作为数组声明

RareSub("Value", {"ParamArrayvalue"})
'or
RareSub("Value", {"ParamArrayvalue1", "ParamArrayvalue2"})

正如 cmets 中提到的,当至少有两个 String 类型的参数将传递给该方法时,将始终调用另一个重载方法

【讨论】:

    【解决方案2】:

    您需要使用名称调用,这样编译器才会知道区别

    RareSub(a:=aValue, b:=bValue)

    【讨论】:

    • 请注意,第一个签名具有ac 参数,而不是b 参数。你不能通过 ParamArray 命名它。
    • 我知道那是因为提到了 string.Format。每个参数具有相同的含义,他们添加了一个 N 参数解决方案,如果不是这种情况,那么您不应该使用这种方法
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-08
    • 1970-01-01
    • 2014-10-30
    • 2023-03-14
    • 1970-01-01
    相关资源
    最近更新 更多