我目前正在将项目从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 关键字吗?
答案 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对象产生影响。