C# – 細かく「delegate」Part.1

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;

といった具合に代入が可能になる。

次回へ続く・・・!

カテゴリーC#

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です