类似于this , 但有一个转折点。
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
)
Error 164 No overload for method 'MyFunc' takes 2 arguments
元数据显示函数是:
public static bool MyFunc(string Name, int Num, ref object obj, int val = 0);
为什么一个 Optional
通过了而另一个没有?
最佳答案
C# 不支持可选的 ref
参数。如果将 obj
更改为 ByValue
参数,应该没问题。
如果您尝试在 C# 中声明一个可选的 ref
参数,您将违反 C# 4 规范的第 10.6.1 节:
A fixed-parameter with a default-argument is known as an optional parameter.
...
A
ref
orout
parameter cannot have a default-argument.
COM 异常(exception),ref
参数非常常见。当 C# 编译器知道它正在处理 COM 组件时,它将允许您省略可选的 ref
参数。
关于c# - C# 中需要可选的 VB 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17717896/