※より実装に近く表示させる為、コードの改行を避けています。スマホ等で閲覧される際は向きを変えてご覧ください。
※実装するバージョンによってはバージョンアップの仕様により動作しないコードもあります。実装には動作確認の上ご使用下さい。
Visual Basic 言語の概念
|
ByVal と ByRef による引数渡し(引数渡しの方法)
- Visual Basic では、プロシージャに引数を渡す方法として、ByVal キーワードを使って "値渡し" で渡す方法とByRef
キーワードを使って "参照渡し" で渡す方法があります。
-
【値渡しで引数を渡す】ByVal
と、プロシージャは、引数の基になる呼び出し元のコードの可変要素の内容を変更できません。
-
【参照渡しで引数を渡す】ByRef
と、プロシージャは、その内容を呼び出し元のコードと同じように変更できます。
- ※引数の値渡しと参照渡しの違いは、データ型における値型と参照型の分類とは異なります。
- ※ただし、両者の間に関連性はあります。
-
【変更できる引数と変更できない引数】
- 引数の基になるプログラミング要素には、値を変更できる可変要素と、値を変更できない不変要素があります。
- 可変要素と不変要素の一覧を次に示します。
-
《可変要素》
- 宣言された変数 (オブジェクト変数を含む)
- (クラスの) フィールド
- 配列要素
- 構造体要素
-
《不変要素》
- 不変の引数は、参照渡しで渡された場合でも、呼び出し元のコードで変更されることはありません。
- 呼び出したプロシージャによってコピーが変更されることはあっても、その変更が呼び出し元のコードの基の要素に影響することはありません。
-
ByVal による引数渡し
- 値による引数渡しプロシージャは自分で変数を変更できません。
-
ByRef による引数渡し
- 参照による引数渡しプロシージャは自分で変数を変更できます。
- Visual Basic は、指定しない限り、プロシージャの引数は参照渡しByRefで渡されます。
|
Option Explicit
Sub TestByValandByRef1()
Dim bytValue As Byte
bytValue = 5
Call Test1(bytValue)
MsgBox bytValue
bytValue = 5
Call Test2(bytValue)
MsgBox bytValue
End Sub
Private Sub Test1(ByVal bytVl As Byte)
bytVl = 1
End Sub
Private Sub Test2(ByRef bytVl As Byte)
'参照による引数渡し
bytVl = 9
End Sub
Sub TestByValandByRef2()
Dim bytValue As Byte
bytValue = 5
Call Test3(bytValue)
MsgBox bytValue
bytValue = 5
Call Test4(bytValue)
MsgBox bytValue
End Sub
Private Sub Test3(bytVl As Byte)
'●Visual Basic は、指定しない限り、プロシージャの引数は参照渡しByRefで渡されます
bytVl = 1
End Sub
Private Sub Test4(bytVl As Byte)
'●Visual Basic は、指定しない限り、プロシージャの引数は参照渡しByRefで渡されます
bytVl = 9
End Sub
|
|
|