VB.NET 言語セクション(1)

1.イベント
AddHandler Me.Button1.Click, Function(x, y) MessageBox.Show("ラムダ")

AddHandler Me.Button1.Click, Function(x, y)
                                 MessageBox.Show("ラムダ")
                                 Return False '値をリターンする必要がある
                             End Function

AddHandler Me.Button1.Click, Sub(x, y) MessageBox.Show("ラムダ")

AddHandler Me.Button1.Click, Sub(x, y)
                                 MessageBox.Show("ラムダ")
                             End Sub
2.Any
'Imports System.Linq
'がソースファイルの一番上に書かれているものとする 

'検索元の配列を作成 
Dim ary As String() = New String() {"b", "aaaaa", "cc"}

'長さが1の文字列を探す 
If ary.Any(Function(s) s.Length = 1) Then
    Console.WriteLine("見つかりました。")
End If
3.ByValとByRef

引数の渡し方には値渡しと参照渡しの二種類があります。

Sub Main()

    Dim val As Integer

    val = 7
    ByValProcedure(val)

    Console.WriteLine("ByVal Value: {0}", val)

    val = 7
    ByRefProcedure(val)

    Console.WriteLine("ByRef Value: {0}", val)

End Sub

Sub ByValProcedure(ByVal arg As Integer)

    arg = 15

End Sub

Sub ByRefProcedure(ByRef arg As Integer)

    arg = 15

End Sub

実行結果:
ByVal Value: 7
ByRef Value: 15

—————————-

参照渡しのパラメータでも元の変数の値を変更させない場合、パラメータを括弧でくくって渡します。

Sub Main()

    Dim val As Integer

    val = 7
    ByRefProcedure((val))

    Console.WriteLine("ByRef Value: {0}", val)

End Sub

Sub ByRefProcedure(ByRef arg As Integer)

    arg = 15

End Sub

実行結果:
ByRef Value: 7

4.省略可能な引数
Sub Main()

    ' すべて指定
    SubProcedure(4, 3, 2, 1)

    ' x を省略
    SubProcedure(10, , 20, 30)

    ' y, z を省略
    SubProcedure(5, 10, , )

    ' x, y, z をすべて省略
    SubProcedure(0, , , )

End Sub

' wは必須、x, y, zは省略可能です
Sub SubProcedure(ByVal w As Integer, Optional ByVal x As Integer = 2, _
        Optional ByVal y As Integer = 7, Optional ByVal z As Integer = 15)

    Console.WriteLine("w:{0}, x:{1}, y:{2}, z:{3}", w, x, y, z)

End Sub

実行結果:
w:4, x:3, y:2, z:1
w:10, x:2, y:20, z:30
w:5, x:10, y:7, z:15
w:0, x:2, y:7, z:15

5.オーバーロード

オーバーロードに際して、そのプロシージャがオーバーロードされていることを明示的に示す目的でOverloadsキーワードを付加することができます。

一つのプロシージャにOverloadsキーワードを付加した場合、ほかのオーバーロードされるべきプロシージャにもこのキーワードをつけなければなりません。

Overloads Function Fun1(ByVal x As Integer) As Integer
    Return 1
End Function

Overloads Function Fun1(ByVal x As Double) As String
    Return "1"
End Function

あるいは以下でも良いです。

Function Fun1(ByVal x As Integer) As Integer
    Return 1
End Function

Function Fun1(ByVal x As Double) As String
    Return "1"
End Function