0

私はそれを回避してきたので、これは決して私にとって深刻な問題ではありませんが、私はその違いと、一方がコンパイルされ、他方がコンパイルされない理由についてもっと知りたがっています。次の例を見てください。

これは構築します。

Sub Foo()

   Dim someL as IList(Of Integer) = New List(Of Integer)
   Bar(someL)

End Sub

Sub Bar(ByRef argSomeL as IList(Of Integer))
'do stuff
End Sub

bar の引数は IList の引数であることに注意してください。SomeL は実際の List(Of Int) です。以下はコンパイルされません。

Sub Foo()

   Dim someL as New List(Of Integer)
   Bar(someL)

End Sub

Sub Bar(ByRef argSomeL as IList(Of Integer))
   'do stuff
End Sub

どちらも (Foo()) IList ではなく List の引数で Bar を呼び出しているのではないでしょうか?

4

2 に答える 2

0

ByRef は、呼び出された関数の SCOPE を拡張して、byref パラメータの呼び出し先関数の変数を含めます。つまり、呼び出し先の VARIABLE を変更できます。

VB が複数の戻り値を許可していれば、ほとんど不要です。

Dim local1 , local2 as int
(local1, local2) = Bar(local2)

これは、あなたの例の解決策のヒントにもなります.byRefとsubを使用せず、byvalと関数を使用してください。

Function Bar(ByVal foo As IList(of Integer)) As IList(of Integer)
   Return foo
End Function
于 2013-08-28T15:14:16.150 に答える