C#中需要可选的VB参数

JNF*_*JNF 8 .net c# vb.net optional-parameters

类似,但有一点扭曲.

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
Run Code Online (Sandbox Code Playgroud)

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

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

元数据显示的功能是:

public static bool MyFunc(string Name, int Num, ref object obj, int val = 0);
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*eet 9

C#不支持可选ref参数.如果你改成obj一个ByValue参数,它应该没问题.

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

固定参数默认参数的被称为一个可选参数.

...

一个refout参数不能有default-argument.

例外情况是COM,其中ref参数非常常见.当C#编译器知道它在处理一个COM组件,它允许你忽略可选ref参数.


Mat*_*zer 5

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

看到这个其他问题+答案: