- 実用性がどうとかはおいといて、C#でデリゲートのイメージを
なんとなくつかむための記事というよりC#初学者の苦悶雑記
デリゲートとは
- メソッドのポインタ情報を格納する参照型変数
- 他言語だとポインタ関数にあたるが、C#のデリゲートは複数メソッドの参照を同一デリゲートで管理できる(マルチキャスティング)
- デリゲートの性質より複数メソッドを管理できるため、
クリックイベント(OnClick)に対し 複数コントロールを紐づけるような
実装をする際に「どのコントロールがクリックされたか」の情報をデリゲートの引数で
受け付けることで実装可能
- MVCモデルのControllerみたいなことをデリゲートが担う
様々なInput(ユーザがクリックやマウスホバーなどの操作を行う)
┗ デリゲート「KewDown」 ━ 「a」キーが押された
┗「b」キーが押された
┗「c」キーが押された
using System;
namespace ConsoleApp1
{
class Program
{
public delegate void KeyDownEventHandler();
static public event KeyDownEventHandler A_keyDown;
static void Main()
{
String pressKey;
EventHandler eh = new EventHandler();
A_keyDown += new KeyDownEventHandler(eh.A_keyClick);
pressKey = Console.ReadKey().Key.ToString();
switch (pressKey)
{
case "A":
A_keyDown();
break;
}
}
}
class EventHandler
{
public void A_keyClick() => Console.WriteLine("[A]key Pressed");
}
}
あとがき
- デリゲート引数受け取ってないじゃん、イベントハンドラ一つじゃんとか
突っ込みどころは多いがひとまずこれで妥協
- デリゲートのインスタンス生成が必要だったり等、デリゲートというよりC#の
性質を少しは理解できた気がする
- サンプルソース改善版の#2はモチベがあったら書く