我有一个用 c# 编写的项目,它正在使用另一个用 vb.net 编写的项目。我目前能够修改两者。
我在 VB 项目中有一个方法,例如:
Public Sub MethodName(ByVal param1 As String, ByRef param2 As String)
param2 = param1 + 1
End Sub
我无法使用 C# 中的 out 关键字调用此方法:
public void CallOtherMethod()
{
string param1 ="test";
string param2;
provider.AddTransaction(param1, out param2);
}
VB.Net 中的 ByRef 关键字不应该同时具有“ref”和“out”的功能吗?
我应该直接去 ref 吗?
最佳答案
对于运行时来说,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
。
关于C# 和 VB.Net 输出参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6979648/