VB.NET メソッドのサンプル(値渡し/参照渡し他)

VB.NETのクラスのメソッドのサンプルです。

確認環境
・Microsoft Visual Studio Community 2019

目次

サンプル 値渡し(ByVal)
  参照渡し(ByRef)
  戻り値あり(Function)
  戻り値なし(Sub)
  可変長引数(ParamArray)
  名前付き引数
  引数のデフォルト値

値渡し(ByVal)

メソッド名(ByVal 変数名)
  • 値渡しは、メソッドを呼び出す時に値をコピーして渡します。
    そのためメソッドの中で値が変化しても元の値には影響ありません。
  • ByValは、値渡しを行うときのキーワードです。
  • ByValがない場合も値渡しになります。
Module Module1
	Sub Main()
		Dim a As Integer = 3
		print1(a)
		Console.WriteLine(a) '3と出力される
	End Sub
	Sub print1(ByVal a)
		a = a * a
		Console.WriteLine(a) '9と出力される
	End Sub
End Module

4行目は、メソッドの引数に値渡しを使用しています。
8行目で変数の値が変わっても5行目の値は変わりません。

参照渡し(ByRef)

メソッド名(ByRef 変数名)
  • 参照渡しは、メソッドを呼び出す時にアドレスをコピーして渡します。
    そのためメソッドの中で値が変化すると元の値も変更されます。
  • 参照渡しを行う時は、ByRefキーワードを追加します。
Module Module1
	Sub Main()
		Dim a As Integer = 3
		print1(a)
		Console.WriteLine(a) '9と出力される
	End Sub
	Sub print1(ByRef a)
		a = a * a
		Console.WriteLine(a) '9と出力される
	End Sub
End Module

4行目は、メソッドの引数に参照渡しを使用しています。
8行目で変数の値が変わると5行目の値も変わります。

戻り値あり(Function)

Function メソッド名(引数) [as 戻り値の型]

メソッドに戻り値がある場合、メソッドの前にFunctionをつけます。

Module Module1
	Sub Main()
		Dim a As Integer = 3
		Console.WriteLine(print1(a)) '9と出力される
	End Sub
	'Function print1(a) As Integer
	Function print1(a)
		a = a * a
		Return a
	End Function
End Module

7行目は、メソッドの前にFunctionがついています。returnで値を返します。
6行目のように引数の後に「as データ型」で戻りの型を指定することもできます。
9行目は、Returnで値を返します。

戻り値なし(Sub)

Sub メソッド名(引数)

メソッドに戻り値がない場合、メソッドの前にSubをつけます。

Module Module1
	Sub Main()
		Dim a As Integer = 3
		print1(a)
	End Sub
	Sub print1(a)
		a = a * a
		Console.WriteLine(a) '9と出力される
	End Sub
End Module

6行目は、メソッドの前にSubがついています。
Returnは、ありません。

可変長引数(ParamArray)

メソッド名(ParamArray 配列)

可変長引数を使用する場合は、ParamArrayキーワードを指定します。

Module Module1
	Sub Main()
		Print1("あ") 'あ
		Print1("い", "う") 'いう
		Print1() '出力なし
	End Sub
	Sub Print1(ByVal ParamArray moji() As String)
		For Each a As String In moji
			Console.WriteLine(a)
		Next
	End Sub
End Module

7行目は、可変長引数のメソッドです。引数のところにParamArrayがあり、引数のデータ型は配列です。
5行目は、引数がありませんがエラーになりません。

名前付き引数

呼び出し元のメソッド名(引数の変数名:= 値)

呼び出し元のメソッドの引数に引数名:=値を追加します。
呼び出し先の引数の順番に関係なく記述できます。名前付きパラメーターとも呼ばれます。

Module Module1
	Sub Main()
		Dim message1 = Print1(num1:=3, name1:="赤")
		Console.WriteLine(message1) '色は赤。数は3
	End Sub
	Function Print1(name1, num1)
		Return "色は" + name1 + ",数は" + CStr(num1)
	End Function
End Module

3行目は、名前付き引数です。メソッドの引数の順番が呼び出し元と呼び出し先で異なっていますが名前の指定どうりに値が渡されます。

引数のデフォルト値

メソッド名(Optional 変数名 = 値)

引数を省略してデフォルト値をセットする場合、呼び出し先のメソッドにOptionalと変数に値をセットします。

Module Module1
	Sub Main()
		Dim message1 = Print1("赤")
		Console.WriteLine(message1) '色は赤。数は3

		Dim message2 = Print1("赤", 5)
		Console.WriteLine(message2) '色は赤。数は5
	End Sub
	Function Print1(name1, Optional num1 = 3)
		Return "色は" + name1 + ",数は" + CStr(num1)
	End Function
End Module

9行目の2つ目の引数は「Optional num1 = 3」となっています。
呼び出す側の引数が1つの場合、2つ目の引数の値はこの3になります。デフォルト値を意味します。
6行目のように引数が2つある場合は、その値の引数になります。

関連の記事

VB.NET入門 クラスの仕組みとサンプル
VB.NET クラスの継承の仕組みとサンプル

△上に戻る