†デリゲートとはメソッドへの参照を示す特殊なクラスである。Delegateステートメントを利用して定義する。†デリゲートはクラスなので、利用する際にはNewキーワードでデリゲートオブジェクトを生成できる。デリゲートクラスのコンストラクタにはそのデリゲートと関連付けるメソッドをAddressOfキーワードを付けて指定する。例:SampleDelegateのデリゲートオブジェクトMyDelegateにメソッドMethod1を関連付ける。Method1)◇ただし、関連付けることができるメソッドは、パラメータのデータ型の並びと戻り値のデータ型が一致する場合のみである。例:これまでの例でいえば、メソッドMethod1は次のインタフェースである必要がある。†AddHanderを使ってデリゲートとメソッドを関連付けることもできる。例:サーバーベースタイマーであるSystem.Timers.TimerはElapseEventHandlerデリゲートを持つ。このタイマーを開始するときはEnabledプロパティをTrue、終了するときはEnabledプロパティをFalseに設定する。0.1秒ごとに何らかの処理を行いたい場合は次のようにする。SubこれはツールボックスのコンポーネントからTimer(これはSystem.Windows.Forms.Timer)をフォームに貼り付けて、そのTimerのTickイベント時の処理として、0.1秒ごとに実行される処理を記述し、Intervalプロパティに100を設定しておけば、似たような動作は実現できる*1。Subなお、これを利用した例をVB.NET/テクニック/アイコンアニメーションで紹介している(System.Timers.Timerを利用)。†メソッドをデリゲートに関連付けると、デリゲートを通じてメソッドを呼び出せる。関連付けるメソッドにはインスタンスメソッド、共有メソッドのいずれも使用できる。インスタンスメソッドを関連付ける場合は、メソッドを呼び出すインスタンスを区別する。例:Method1(<パラメータ>)を実行する代わりに、MyDelegate(<パラメータ>)で実行できる。MyDelegateはオブジェクトだが、あたかもメソッドのように使える。例:他クラスのインスタンスメソッドと共有メソッドをデリゲートに関連付ける。2.0のクラスライブラリ(System名前空間)には、次に示すジェネリック・デリゲートの宣言が含まれている。†メソッドのパラメータにデリゲートを渡して、そのメソッドの呼び出し先でデリゲートを実行することができる。Classこのプログラムではテキストボックスに入力した値を取り出して数字に変換する処理と、TripleData()やHalfData()で得た値をラベルに設定する箇所が重複している。テキストボックスから値を取り出す処理と、ラベルに計算結果を設定する処理は1処理のまとまりと考えることができる。そこで、デリゲートを使うと次のように修正できる。Classこうすることで、Process()の呼び出し元はテキストボックスからの値の取得やラベルに計算結果を設定するといった処理を意識することはない。Process()の呼び出し元であるボタンの押下イベントは、自身が何の目的のボタンであるかは把握しているため、計算に使用するメソッドだけを知るだけで十分である。Region別スレッドから使用するときは次を実行する。†デリゲート名はPascal形式にする。イベント名はPascal形式にする。イベントで使用sるうためのデリゲートには"EventHandler"サフィクスを付ける。これによりイベントハンドラが登録されることが明確になり、可読性が向上sるう。MouseEventArgs)イベントで使用するためのデリゲートはSubで宣言する。戻り値があるデリゲートをイベントで使用することはできない。このTimerクラスを使ったときは別のタイマーメッセージが発生したときに呼び出されない。ボタンのクリック処理を数秒間行っていた場合、その間はTimer1_Tick処理は実行されない。クラス(4623d)。