5

次の関数があるとしましょう。

Function myFunction(j As Integer) As Double
    myFunction = 3.87 * j
    Exit Function
End Function

値として渡されますか、それとも参照によってj渡されますか?ByValByRef

それともデータ型に依存しますか?複雑なオブジェクトを値として渡した場合はどうなりますか?

前もって感謝します!

4

2 に答える 2

10

ByVal明示的に指定されていない限り、パラメーターは渡されます。詳細については、「値および参照による引数の受け渡し」を参照してください。

Visual Basicのデフォルトでは、引数を値で渡します。ByValキーワードを使用すると、コードを読みやすくすることができます。宣言されたすべてのパラメーターにByValまたはByRefキーワードを含めることをお勧めします。

はどうかと言うと:

複雑なオブジェクトを値として渡した場合はどうなりますか?

「複雑なオブジェクト」がクラス(参照型)であれば、これは問題ありません。多くのコピーを行うことはありません。これは、オブジェクトインスタンスへの参照が値(ByVal)によって渡されるためです。つまり、クラスが非常に大きい場合でも、単一の参照のみをコピーすることになります。

ただし、複合オブジェクトが構造体(値型)の場合は、メソッドが呼び出されたときにオブジェクトがコピーされます。これが、XNAのような一部のフレームワークが、渡すオプションのある多くのメソッドの代替バージョン( Matrix.MultiplyByRefなど)を提供する理由です。これにより、Matrix構造の高価なコピーが回避されます。

于 2012-05-22T19:49:03.340 に答える
1

jこの場合は渡されByValます。明示的に指定されてByValいない限り、パラメータは常に渡されます。VB.NET 10仕様ByRefのセクション9.2.5から:

ByRefまたはByValを指定しないパラメーターは、デフォルトでByValになります。

于 2012-05-22T19:52:07.990 に答える