C#和VB.Net输出参数

C#和VB.Net输出参数,c#,vb.net,parameters,out,C#,Vb.net,Parameters,Out,我有一个c语言的项目,它利用了另一个用vb.net编写的项目。我目前可以修改这两个 我在VB项目中有一个方法,如: Public Sub MethodName(ByVal param1 As String, ByRef param2 As String) param2 = param1 + 1 End Sub 我无法使用C#中的out关键字调用此方法: VB.Net中的ByRef关键字不应该同时具有“ref”和“out”功能吗 我应该使用ref吗?据我所知,在V

我有一个c语言的项目,它利用了另一个用vb.net编写的项目。我目前可以修改这两个

我在VB项目中有一个方法,如:

    Public Sub MethodName(ByVal param1 As String, ByRef param2 As String)
        param2 = param1 + 1
    End Sub
我无法使用C#中的out关键字调用此方法:

VB.Net中的ByRef关键字不应该同时具有“ref”和“out”功能吗


我应该使用ref吗?

据我所知,在VB中没有与
out
等价的东西。只有
ByRef
,它是
ref
的等价物,所以这是正确的选择

由于您将通过引用进行传递,因此被调用的函数将接收您的值,并且您需要初始化您的参数,以便它在内存中有一个地址

编辑:

既然您可以编辑这两个函数,为什么不将
子函数
更改为
函数
,然后删除它呢
总之,我要让你的代码更漂亮。

使用
ref
-这是VB的
ByRef
的C等价物

但是
阅读此详细说明:.

到运行时的
ref
out
是可以互换的,因为它们都只是传递一个引用。但是,
out
在IL中以附加属性作为前缀:

public void y(ref int a)
public void z(out int a)
变成

.method public hidebysig instance void  y(int32& a)
.method public hidebysig instance void  z([out] int32& a)
这使得C#编译器能够区分这两者,并添加
out
具有的特殊语义,即
out
参数在进入方法之前不需要赋值,在退出方法之前必须赋值


相反,VB中的
ByRef
只提供
ref
,而不提供
out
的附加语义。在VB中,它与
out
没有等价物。

如我的中所述,您可以在参数定义中指定一个,尽管VB忽略了它,但C#正确地处理参数。

我猜
out
ref
相同,但有一个附加属性,而
ByRef
只是
ref
。ref参数需要初始化,但我不需要也没有任何用处。我并不是真的问这个问题,因为我被卡住了,我可以很容易地使用ref.mable replication of,我有多个参数需要在我的实际项目中返回。我问这个问题只是为了学习,而不是为了解决我的项目。我会和裁判一起欢呼。你可以返回一个类或结构。只是个主意。
.method public hidebysig instance void  y(int32& a)
.method public hidebysig instance void  z([out] int32& a)