ジェネリック、デリゲート、拡張メソッドなるものを、
前述のようにとても簡単に(難しい理屈はぬきにして)頭に入れておき、
String.Aggregateを自作してみる。
以下の簡単なサンプルを示す。
#Region "String.Aggregateを自作してみる。" Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click '配列を代入 Dim mystring1() As String = {"1", "2", "3", "4", "5", "6", "7"} '自作PrintAggregateを呼び出す。引数に関数を放り込むと言う変わったもの。 '放り込まれると言ったほうが良いのか? ’実はこれがデリゲートみたいです。 'fa As Func(Of String, String, String)何とか自作できました。
'のfaの処理が[b & a]になっている。 'Function(a, b)のa,bに値が入れられ、[b & a]の処理をするという意味。 Debug.Print(mystring1.PrintAggregate(Function(a, b) b & a)) '実行結果 '7654321 End Sub #End Region Module StringYes <System.Runtime.CompilerServices.Extension()> _ Public Function PrintAggregate(A() As String, fa As Func(Of String, String, String)) As String 'A()はその拡張メソッドを呼び出す任意の実態名で A()に{"1", "2", "3", "4", "5", "6", "7"}が入ってくる 'faと言う関数を、デリゲート関数として作成。 'faの処理は、使う時にテキトーに書いてね、と言うこと。 'Func(Of String, String, String)は、フレームワークで予め書かれたジェネリック+デリゲート関数みたいで、 '文中にPublic Delegate Functionなどは不要。 Dim ret As String = "" Dim x As Integer = 1 Do Until x = A.Length + 1 'fa関数を呼び出して処理する。 'a=A(A.Length - x) 'b=ret 'を代入。 '処理は「b & a」でしたね。 ret = fa(A(A.Length - x), ret) x = x + 1 Loop Return ret End Function End Module
要点はモジュールに定義すること。というものでした。
<System.Runtime.CompilerServices.Extension()> _を書くこと。
後は、
Public Sub 拡張メソッド名(ByVal その拡張メソッドを呼び出す任意の実態名で、何でも良い AS 拡張する型クラス名,パラメータ,パラメータ,・・・)
実際の処理
End Sub