vb到c#ref参数

时间:2016-06-22 13:24:08

标签: c# vb.net

我目前正在将项目从VB转换为C#。我在VB项目中有一个 Web Reference ,我在C#项目中引用了它(Add Web Reference)。 签名是一样的。 VB代码如下所示:

If Not tws.StartSession(tsd) Then
    Throw New systemMonitor.internalEx.securityEx("Failed to initiate a TROPOS session")
End If

我试图将其转换为:

// Start our session
if (!this._service.StartSession(this._details))
    throw new Exception("The TROPOS session failed to start.");

我遇到的问题是,它不会编译并出现错误:

  

参数1必须与' ref'一起传递。关键字

所以我把它改成了这个:

// Start our session
if (!this._service.StartSession(ref this._details))
    throw new Exception("The TROPOS session failed to start.");

编译并运行(虽然似乎没有发生任何事情,但这是另一个问题)。 我的问题很简单。 在VB中你不必设置 ByRef 关键字吗?

2 个答案:

答案 0 :(得分:1)

在VB.NET中{(1}}或UserCredential在被调用的方法中(可选)指定(如果两者都未指定,则默认为ByRef)并且您不指定它在调用方法时。

在C#中,如果方法为参数指定ByVal,则在调用方法时还必须指定“ref”。

答案 1 :(得分:-2)

您无需在VB.NET中指定ByRef

简短的回答是不,你不必。

原因如下:VB.NET再次为您做了一些事情,如果它是一个传递给函数的对象,它将自动通过引用传递。因此,VB.NET为您添加了它。 VB.NET将自动传递简单数据类型(字符串,整数等)ByVal,除非您指定ByRef

我个人喜欢用ByRef显式编写我的代码,当我的意思是通过引用传递一些东西时。我还使用以下编译器选项:

Option Explicit On
Option Strict On

这限制了VB自动为我做的事情。但我不认为它会通过引用对passign对象产生影响。