C#中需要可选的VB参数

时间:2013-07-18 08:02:07

标签: c# .net vb.net optional-parameters

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通过,而另一个没有?

2 个答案:

答案 0 :(得分:9)

C#不支持可选的ref参数。如果您将obj更改为ByValue参数,则应该没问题。

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

  

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

     

...

     

refout参数不能包含默认参数

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

答案 1 :(得分:5)

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

见另一个问题+回答: