C#和VB.Net输出参数
我在c#中有一个项目,它正在利用vb.net中编写的另一个项目。我目前能够修改两者。C#和VB.Net输出参数
我有一个方法,在VB项目,如:
Public Sub MethodName(ByVal param1 As String, ByRef param2 As String)
param2 = param1 + 1
End Sub
我不能使用了关键字从C#调用这个方法:
public void CallOtherMethod()
{
string param1 ="test";
string param2;
provider.AddTransaction(param1, out param2);
}
应该不是为ByRef VB.Net中的关键字具有“ref”和“out”的功能?
我应该去参考吗?
对于运行时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
参数不需要具有分配的值,并且必须为在退出t之前分配一个值他的方法。
相反,VB中的ByRef
只提供ref
,但不提供out
的附加语义。它在VB中没有相当于out
。
在VB中没有相当于out
(就我所知)。只是ByRef
这相当于ref
,所以这将是正确的选择。
由于您将通过引用被调用的函数将收到您的价值,你将需要intialise你参数,使它有一个地址在内存中。
编辑:
既然你可以编辑,为什么不改变Sub
到Function
和摆脱这一问题的 干脆,国际海事组织,使你的代码更好了。
我有一个以上的参数需要在我的实际项目中返回。我问这个问题只是为了学习,而不是为我的项目提供解决方案。 我只会去参考。干杯。 –
你可以返回一个类或结构。只是一个想法。 – Jodrell
我的猜测是'out'与'ref'具有附加属性,'ByRef'只是'ref'。 – Joey
参考参数需要初始化,但我不需要或没有任何用处。我并没有真的问这个,因为我被卡住了,我可以轻松地使用ref。 –
可能的重复[有没有VB.NET等效的C#输出参数](http://*.com/questions/4358742/is-there-a-vb-net-equivalent-of-c-out-parameters) –