9

类似,但有所不同。

VB函数声明:

Public Shared Function MyFunc(ByVal Name As String, ByVal Num As Integer, Optional ByRef obj As Object = Nothing, Optional ByVal val As Integer = 0) As Boolean

在 C# 中调用时(不同的解决方案,我复制了.dll

错误 164 方法“MyFunc”没有重载需要 2 个参数

元数据显示函数为:

public static bool MyFunc(string Name, int Num, ref object obj, int val = 0);

为什么一个Optional通过而另一个没有通过?

4

2 回答 2

10

C# 不支持可选ref参数。如果改成obj参数ByValue应该没问题。

如果您尝试在 C# 中声明可选ref参数,您将违反 C# 4 规范的第 10.6.1 节:

带有默认参数的固定参数称为可选参数

...

一个reforout参数不能有一个default-argument

COM 是个例外,它的ref参数非常常见。当 C# 编译器知道它正在处理一个 COM 组件时,它将允许您省略可选ref参数。

于 2013-07-18T08:04:18.620 回答
5

C# 不允许 by-ref 可选参数。这就是原因。

请参阅其他问题+答案:

于 2013-07-18T08:05:08.013 回答