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