たくあんポリポリ

勉強したことを載せていきます。最近、技術系の記事はZennに書いています。(https://zenn.dev/chittai)

【C#】delegate の使い方を整理してみた~delegateとは~

今まで、何度かdelegate勉強をしてみたけど、いまいちピント来てなかったので、整理してみました。

delegate is 何

いろんなところで語り尽くされているので今更ですが、処理(メソッド)を参照するための型です。

なにか例をあげてみます

int number;
number = 1;

これは、 int型(整数型)だから、変数 number に 1(整数) が入れられるとわかりますよね。

ならば、処理を変数に入れるにはどうすればよいでしょうか。そこで登場するのがdelegateです。先程書いたように、処理を参照するための型です。

delegate int DelegateMethodType(int number); - (1)
public event DelegateMethodType delegateMethod; - (2)
delegateMethod += n => n*2;  - (3)

これを、言語化すると (1)int型の引数を取りint型の値を返す DelegateMethodTypeを定義します。(2)次にDelegateMethodType変数 delegateMethod を定義しています。

整数の時と同じ考えをしてみましょう。”delegateMethod は int型の引数を取りint型の値を返す DelegateMethodType変数なので、(3)int型の引数を取りint型の値を返す 処理を参照することができる”ということになります。

ちなみに

public event Func<int, int> delegateMethod; - (1)(2)
delegateMethod += n => n*2;  - (3)

この様に書き換えることができます。

delegateの何がわからないのか

delegateわからないんですぅ”と言っている人で、上記の説明で”delegateわかりましたぁ”といっている人はいないと思います。なんでわからないかというと、個別の要素がそもそも理解できていないのではないケースが多いのではないかなと思います。あえてFuncを使った記述もしましたがこういった一つひとつの要素を理解し、紐づけていくことが近道(王道)なんじゃないかと思っています。これから、一つずつ整理しながら書いていければと思います。

- delegateとはなにか
- いつ、何をしたいから使うのか
- コールバックとは?イベントハンドラとは?
- delegateの定義の記述方法
- delegateを使った処理の記述方法
- Action / Func とは
- ラムダ式とは

などなど