Delegate色々

Public Class Class5
 Public Delegate Function testDelegateFunc(ByVal argStr As String) As String
 Public Delegate Sub testDelegateSub()
 Public Sub delegateTest()
  '---定義済みDelegateを使わない
  Dim myFunc0 As testDelegateSub = New testDelegateSub(AddressOf test0)
  Dim myFunc2 As testDelegateFunc = New testDelegateFunc(AddressOf test2)
  myFunc0()
  Debug.Print(myFunc2("Test"))
  '---匿名メソッドを使う
  myFunc0 = Sub()
        Console.WriteLine("匿名メソッド call")
       End Sub
  myFunc0()
  myFunc2 = Function(ByVal argStr As String)
        Return "匿名メソッド:" & argStr
       End Function
  Debug.Print(myFunc2("Call"))
  '---定義済みDelegateを使う
  Dim myFunc3 As Action(Of String) = AddressOf test1
  myFunc3("定義済みActionDelegate")
  Dim myfunc4 As Func(Of String, String) = AddressOf test2

  Debug.Print(myfunc4("定義済みFuncDelegate"))
  '---定義済みDelegateで匿名メソッドを使う
  
  Dim myfunc5 As Func(Of String, String) = Function(ByVal asr As String)
                     Return (asr)
                    End Function
  Debug.Print(myfunc5("定義済みFunctionDelegate且つ匿名メソッド"))

 End Sub
 Public Sub test0()
  Console.WriteLine("test0 call")
 End Sub
 Public Sub test1(ByVal msg As String)
  Console.WriteLine(msg & " test1 Call")
 End Sub
 Public Function test2(ByVal msg As String) As String
  Return msg & " test2 Call"
 End Function
End Class