次の関数があるとしましょう。
Function myFunction(j As Integer) As Double
myFunction = 3.87 * j
Exit Function
End Function
値として渡されますか、それとも参照によってj
渡されますか?ByVal
ByRef
それともデータ型に依存しますか?複雑なオブジェクトを値として渡した場合はどうなりますか?
前もって感謝します!
次の関数があるとしましょう。
Function myFunction(j As Integer) As Double
myFunction = 3.87 * j
Exit Function
End Function
値として渡されますか、それとも参照によってj
渡されますか?ByVal
ByRef
それともデータ型に依存しますか?複雑なオブジェクトを値として渡した場合はどうなりますか?
前もって感謝します!
ByVal
明示的に指定されていない限り、パラメーターは渡されます。詳細については、「値および参照による引数の受け渡し」を参照してください。
Visual Basicのデフォルトでは、引数を値で渡します。ByValキーワードを使用すると、コードを読みやすくすることができます。宣言されたすべてのパラメーターにByValまたはByRefキーワードを含めることをお勧めします。
はどうかと言うと:
複雑なオブジェクトを値として渡した場合はどうなりますか?
「複雑なオブジェクト」がクラス(参照型)であれば、これは問題ありません。多くのコピーを行うことはありません。これは、オブジェクトインスタンスへの参照が値(ByVal)によって渡されるためです。つまり、クラスが非常に大きい場合でも、単一の参照のみをコピーすることになります。
ただし、複合オブジェクトが構造体(値型)の場合は、メソッドが呼び出されたときにオブジェクトがコピーされます。これが、XNAのような一部のフレームワークが、渡すオプションのある多くのメソッドの代替バージョン( Matrix.MultiplyByRef
など)を提供する理由です。これにより、Matrix構造の高価なコピーが回避されます。
j
この場合は渡されByVal
ます。明示的に指定されてByVal
いない限り、パラメータは常に渡されます。VB.NET 10仕様ByRef
のセクション9.2.5から:
ByRefまたはByValを指定しないパラメーターは、デフォルトでByValになります。