与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
)
错误164方法'MyFunc'没有重载需要2个参数
元数据显示函数:
public static bool MyFunc(string Name, int Num, ref object obj, int val = 0);
为什么有一个Optional
通过,而另一个没有?
答案 0 :(得分:9)
C#不支持可选的ref
参数。如果您将obj
更改为ByValue
参数,则应该没问题。
如果您尝试在C#中声明一个可选的ref
参数,则会违反C#4规范的第10.6.1节:
带有默认参数的固定参数称为可选参数。
...
ref
或out
参数不能包含默认参数。
例外情况是COM,其中ref
参数非常常见。当C#编译器知道它正在处理COM组件时,将允许您省略可选的ref
参数。
答案 1 :(得分:5)