VB.NET - デリゲート(delegate)

Advertisement

デリゲートとは

デリゲートとは、他のオブジェクトのメソッドを間接的に呼び出すためのオブジェクトのこと。オブジェクト指向の観点からすると賛否両論どちらも存在するが、VB.NETでシステム開発を行う際には必須の概念である。

System.Delegateクラスを基本クラスとするクラスで、従来より存在する関数ポインタのように動作するため、安全な関数ポインタとして記述される。

デリゲートを使用することにより関数レベルでの委譲(コンポジション)を実現することができるため、柔軟な処理を行うことができる。

デリゲートの利用方法

デリゲート宣言の書式
アクセシビリティ Delegate Sub デリゲート名(引数1, 引数2.. ,引数n)

アクセシビリティ Delegate Function _ 
  デリゲート名(引数1, 引数2.. ,引数n) As 戻り値型

利用手順

1.デリゲートの宣言
Public Delegate Sub デリゲート名()

2.デリゲートオブジェクト変数の宣言〜デリゲートオブジェクトの生成
Dim 変数名 As デリゲート名
変数名 = AddressOf クラス名.関数名

3.関数呼び出し
変数名.Invoke

AddressOf演算子を使用して委譲先関数のアドレスを取得し(手順2)、Invokeメソッドで関数の呼び出しをおこなう(手順3)。

サンプルコード

Module Module1

    ' デリゲート
    Delegate Sub MyDelegate(ByVal x As String)

    ' メインクラス
    Public Sub Main()
        Dim MyProduct As New Product("Robot")

        ' Test the delegate.
        MyProduct.FixProduct()
    End Sub

    Class Product
        Private Name As String

        ' コンストラクタ
        Sub New(ByVal Name As String)
            Me.Name = Name
        End Sub

        ' 処理の委譲(コンポジション)
        Sub FixProduct()
            Dim MyRepair As New Repair
            Dim MyDelegate As MyDelegate

            ' デリゲートオブジェクトの作成
            MyDelegate = AddressOf MyRepair.FixProduct

            ' 処理の呼び出し
            MyDelegate.Invoke(Me.Name)
        End Sub
    End Class

    ' 修理専門のクラス
    Class Repair
        Sub FixProduct(ByVal Name As String)
            Console.writeLine(Name & " Fixed!")
        End Sub
    End Class

End Module

Advertisement

ショートカット

634トップページ
このカテゴリのトップページに戻る
634ラボ

サイト検索

Google

Web サイト内

Y!ログール