【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 とは
- ラムダ式とは
などなど