C#和VB.Net输出参数
我有一个c语言的项目,它利用了另一个用vb.net编写的项目。我目前可以修改这两个 我在VB项目中有一个方法,如: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
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)