msdnページに基づいて、デリゲートを宣言するときに、戻り値と、デリゲートを介して呼び出されるメソッドの引数を指定する必要があります。
私の質問:
私が次のようなメソッドを持っているとしましょう:
public int MethodA(bool bValue)
そしてまたvoid MethodB(int iValue)
ここでメソッドごとに2つの異なるデリゲートを宣言する必要がありますか、それとも1つを使用して宣言できますか?
ありがとう。
ここでメソッドごとに2つの異なるデリゲートを宣言する必要がありますか、それとも1つを使用して宣言できますか?
これらのメソッドは完全に異なる署名を持っているため、異なるデリゲートが必要です。ただし、独自のデリゲートタイプを宣言する代わりに、組み込みのデリゲートFunc<bool, int>
とデリゲートを使用できます。Action<int>
たとえば、次のように使用できます。
Func<bool,int> delegateA = this.MethodA;
Action<int> delegateB = this.MethodB;
// or: Action<int> delegateB = new Action<int>(this.MethodB);
そもそもデリゲートを宣言するポイントは、宣言を見ずにメソッドを呼び出せるようにすることです。そのため、デリゲートを介して間接的に呼び出すことを計画している関数シグニチャごとに異なるデリゲートタイプが必要です。
別のメソッドを定義し、それを指すためにデリゲート変数を使用する代わりに、匿名メソッドを使用してコードを短縮できます。
class Program{
delegate void MethodsDelegate(string Message);
static void Main(string[] args){
MethodsDelegate method = delegate(string Message){
Console.WriteLine(Message);
};
//---call the delegated method---
method("Using anonymous method.");
Console.ReadLine();
}
}