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

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

確認環境
・Microsoft Visual Studio Community 2019

目次

サンプル メソッドの引数に値渡し(ByVal)を使用する
  メソッドの引数に参照渡し(ByRef)を使用する
  メソッドで戻り値あり(Function)の場合
  メソッドで戻り値なし(Sub)の場合
  メソッドで可変長引数を使用する
  メソッドに名前付き引数を使用する
  オプション引数を使用(引数を省略してデフォルト値をセット)

メソッドの引数に値渡し(ByVal)を使用する

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

        Dim c1 As New Class1
        c1.print1(num1, num2) 'メソッドを呼び出す

        Console.WriteLine(num1) '1と出力される
        Console.WriteLine(num2) '2と出力される
    End Sub
End Module

2~6行目は、Class1というクラスです。
3行目は、メソッドで引数にByValがついています。値渡しになります。
13行目は、クラスをインスタンス化しています。
14行目は、メソッドの引数として値を2つ渡しています。
16,17行目は、10,11行目と同じ値が表示されます。

メソッドの引数に参照渡し(ByRef)を使用する

メソッド名(ByRef 変数名)
  • 参照渡しは、メソッドを呼び出す時にアドレスをコピーして渡します。
    そのためメソッドの中で値が変化すると元の値も変更されます。
  • 参照渡しを行う時は、ByRefキーワードを追加します。
'クラス
Public Class Class1
    Sub print1(ByRef a, ByRef b) 'メソッド ByRef 
        a = a + 10
        b = b + 10
        Console.WriteLine(a + b) '23と出力される
    End Sub
End Class
'メイン
Module Module1
    Sub Main()
        Dim num1 As Integer = 1
        Dim num2 As Integer = 2

        Dim c1 As New Class1
        c1.print1(num1, num2) 'メソッドを呼び出す

        Console.WriteLine(num1) '11と出力される
        Console.WriteLine(num2) '12と出力される
    End Sub
End Module

2~8行目は、Class1というクラスです。
3行目は、メソッドで引数にByRefがついています。参照渡しになります。
4,5行目は、引数として渡された値に加算しています。
15行目は、クラスをインスタンス化しています。
16行目は、メソッドの引数として値を2つ渡しています。
18,19行目は、12,13行目とは異なる値が表示されます
→4,5行目で加算された値が表示されます。

メソッドで戻り値あり(Function)の場合

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

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

'クラス
Public Class Class1
    'Function Print1(ByVal a, ByVal b) As Integer
    Function Print1(ByVal a, ByVal b)
        Return a + b
    End Function
End Class
'メイン
Module Module1
    Sub Main()
        Dim num1 As Integer = 1
        Dim num2 As Integer = 2

        Dim c1 As New Class1
        Console.WriteLine(c1.Print1(num1, num2)) '3と出力される
    End Sub

End Module

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

メソッドで戻り値なし(Sub)の場合

Sub メソッド名(引数)

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

'クラス
Public Class Class1
    Sub print1(ByVal a, ByVal b) 'メソッド Sub 
        Console.WriteLine(a + b) '3と出力される
    End Sub
End Class
'メイン
Module Module1
    Sub Main()
        Dim c1 As New Class1
        c1.print1(1, 2)
    End Sub
End Module

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

メソッドで可変長引数を使用する

メソッド名(ParamArray 配列)

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

'クラス
Public Class Class1
    Sub Test(ByVal ParamArray moji() As String) '可変長の引数に対応
        For Each a As String In moji
            Console.WriteLine(a)
        Next
    End Sub
End Class
'メイン
Module Module1
    Sub Main()
        Dim c1 As New Class1
        c1.Test("あ") 'あ
        c1.Test("い", "う") 'いう
        c1.Test() '出力なし
    End Sub
End Module

3行目は、パラメーター配列のParamArrayキーワードです。可変長の引数に対応します。
13行目は、引数の数が1つです。出力されます。
14行目は、引数の数が2つです。出力されます。
5行目は、引数がありませんがエラーになりません。

以下はMicrosoftのパラメーター配列のリンクです。
https://docs.microsoft.com/ja-jp/dotnet/visual-basic/programming-guide/language-features/procedures/parameter-arrays

メソッドに名前付き引数を使用する

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

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

'クラス
Public Class Class1
	Function Test(ByVal name1, ByVal number1)
		Return "色は" + name1 + "。数は" + CStr(number1) + "。"
	End Function
End Class
'メイン
Module Module1
	Sub Main()
		Dim c1 As New Class1
		Dim message1 = c1.Test(number1:=1, name1:="赤")
		Console.WriteLine(message1) '色は赤。数は3。
	End Sub
End Module

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

オプション引数を使用(引数を省略してデフォルト値をセット)

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

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

'クラス
Public Class Class1
	Function Test(ByVal name1, ByVal Optional number1 = 3)
		Return "色は" + name1 + "。数は" + CStr(number1) + "。"
	End Function
End Class
'メイン
Module Module1
	Sub Main()
		Dim c1 As New Class1
		Dim message1 = c1.Test("赤")
		Console.WriteLine(message1) '色は赤。数は3。

		Dim message2 = c1.Test("赤", 5)
		Console.WriteLine(message2) '色は赤。数は5。
	End Sub
End Module

3行目の2つ目の引数は「number1 = 3」となっています。呼び出す側の引数が一つの場合、2つ目の引数の値はこの3になります。デフォルト値を意味します。
11行目は、引数がひとつです。2つ目の引数の値はデフォルト値の3がセットされます。
14行目は、2つ目の引数に5をセットしています。この場合、セットした値の5が優先されます。

関連の記事

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

△上に戻る