C#で初めて聞いたdelegateについて。
僕なりにわかったことをこまかーく記述していきます。
(C#3.0以降)
delegateとはなんぞや
delegate(デリゲート)とはメソッドを現すための型である。
デリゲートは、
[修飾子] delegate 戻り値の型 デリゲートの型名([引数の型 引数[, ...]]);
と定義できる。これはクラスなどと同じ「型の定義」で、実際に利用するにはデリゲートの型の変数を宣言してやる必要がある。
例えば、
public class SampleClass{};
というクラスの定義があれば、
SampleClass sampleClass;
とすることで、SampleClass型のsampleClassという名前の変数を宣言することが出来るのと同じように、
public delegate int SampleDelegate(string str);
というデリゲートの定義があれば、
SampleDelegate sampleDelegate;
とすることで、SampleDelegate型のsampleDelegateという名前の変数を宣言することができるのと同じレベルの話だ。
そしてこの定義したデリゲートの型の変数は、
定義したデリゲートと「同じ型の戻り値で、同じ数同じ型の引数」を持つメソッドを現す変数になる。
戻り値はvoidでも良く、引数はなくても良い。
つまり、上記のSampleDelegate型の変数であれば、
「戻り値にint型を持ち、引数にstring型を持つメソッド」が代入が可能になる。
例えば、
int SampleMethod01(string text); public int SampleMethod02(string str); static int SampleClassMethod(string arg);
であれば、
sampleDelegate = SampleMethod01; sampleDelegate = SampleMethod02; sampleDelegate = SampleClassMethod;
といった具合に代入が可能になる。