次の方法で共有


引数を値渡しと参照渡しで渡す場合の違い (Visual Basic)

プロシージャに 1 つ以上の引数を渡すと、各引数は呼び出し元のコードの基になるプログラミング要素に対応します。 この基になる要素の値か、その要素への参照を渡すことができます。 これは 受け渡しメカニズムと呼ばれます。

値渡し

プロシージャ定義の対応するパラメーターに ByVal キーワードを指定して、引数を値で渡します。 この受け渡しメカニズムを使用すると、Visual Basic は基になるプログラミング要素の値をプロシージャのローカル変数にコピーします。 プロシージャ コードは、呼び出し元のコードの基になる要素にアクセスできません。

参照渡し

プロシージャ定義の対応するパラメーターに ByRef キーワードを指定して、引数を参照渡しします。 この受け渡しメカニズムを使用すると、Visual Basic はプロシージャに呼び出し元コードの基になるプログラミング要素への直接参照を提供します。

受け渡しメカニズムと要素型

受け渡しメカニズムの選択は、基になる要素型の分類と同じではありません。 値渡しまたは参照渡しは、Visual Basic がプロシージャ コードに提供するものを指します。 値型または参照型は、プログラミング要素がメモリに格納される方法を指します。

ただし、受け渡しメカニズムと要素型は相互に関連しています。 参照型の値は、メモリ内の他の場所にあるデータへのポインターです。 つまり、値で参照型を渡すと、基になる要素自体にアクセスできない場合でも、プロシージャ コードは基になる要素のデータへのポインターを持ちます。 たとえば、要素が配列変数の場合、プロシージャ コードは変数自体にアクセスできませんが、配列メンバーにアクセスできます。

変更する機能

変更できない要素を引数として渡す場合、プロシージャは呼び出し元のコード内で変更することはできません。これは、 ByVal 渡されるか ByRef渡されるかに関係ありません。

変更可能な要素の場合、次の表は、要素の型と受け渡しメカニズムの間の相互作用をまとめたものです。

要素型 渡さ れた ByVal 渡さ れた ByRef
値の型 (値のみを含む) プロシージャは、変数またはそのメンバーを変更できません。 プロシージャは、変数とそのメンバーを変更できます。
参照型 (クラスまたは構造体インスタンスへのポインターを含む) プロシージャは変数を変更できませんが、その変数が指すインスタンスのメンバーを変更できます。 プロシージャは、指すインスタンスの変数とメンバーを変更できます。

こちらも参照ください