拡張メソッドとは?
とっても簡単いえば、
既存のクラスをそのままに、そのクラスに独自のプラスαのメソッドを追加でき、そのメソッドを通常のクラスの関数と同様に使える関数、
と言うものです。
では、Stringに何を聞かれても「yes」と出力するprintYes()というメソッドを作ってみましょう。
Module StringYes
<System.Runtime.CompilerServices.Extension()> _
Public Sub PrintYes(ByVal A As String, inputvalue As String)
Select Case A
Case "夕ご飯を"
Console.WriteLine("Yes")
Case Else
Console.WriteLine("No")
End Select
End Sub
End Module
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim mystring1 As String = "夕ご飯を"
mystring1.PrintYes("食べる?")
Dim mystring2 As String = "朝ご飯を"
mystring2.PrintYes("食べない?")
End Sub
へー的に理解は可能のようです。
要点はモジュールに定義すること。
<System.Runtime.CompilerServices.Extension()> _を書くこと。
後は、
Public Sub 拡張メソッド名(ByVal その拡張メソッドを呼び出す任意の実態名で、何でも良い AS 拡張する型クラス名,パラメータ,パラメータ,・・・)
実際の処理
End Sub
なわけです。
しかし、これだと、上記のAggregateの拡張メソッドとは異なる部分があるようです。
近づけて改造してみたいのですが、
次の疑問はジェネリックや、デリゲートです。
ジェネリックとは?