0

こんにちは仲間のプログラマー、私はデリゲートについて学んでいます。私の本の中で著者は、このメソッドは、デリゲート オブジェクトによって維持されるメソッドの名前と、メソッドを定義するクラスの名前を出力すると主張しています。

static void DisplayDelegateInfo(Delegate delObj)
{
 foreach (Delegate d in delObj.GetInvocationList())
{
 Console.WriteLine("Method Name: {0}", d.Method);
 Console.WriteLine("Type Name: {0}", d.Target);
}
}

メソッドはこのように使用されています。

static void Main(string[] args)
{
 Console.WriteLine("***** Simple Delegate Example *****\n");
 SimpleMath m = new SimpleMath();
 BinaryOp b = new BinaryOp(m.Add);
 DisplayDelegateInfo(b);
 Console.WriteLine("10 + 10 is {0}", b(10, 10));
 Console.ReadLine();
}

私の質問は、DisplayDelegateInfo() が delObj 呼び出しリストをループする場合、その場合、配列に複数の項目が表示されるでしょうか? この本はこの例を示していないようですが、この配列に複数の項目を表示する方法で main() メソッドを変更できる人はいますか?

ご意見ありがとうございます、ありがとう、レオ

4

2 に答える 2

1
static void Main(string[] args)
{
 Console.WriteLine("***** Simple Delegate Example *****\n");
 SimpleMath m = new SimpleMath();
 BinaryOp b = new BinaryOp(m.Add);

 // bellow 'b +=' is short for b = b + 
 b += m.Add1; // Add1 same type (signature really) as method Add

 DisplayDelegateInfo(b);
 Console.WriteLine("10 + 10 is {0}", b(10, 10));
 Console.ReadLine();
}

Addクラスの本体に既存のメソッドをコピーSimpleMathし、名前を に変更してAdd1、これを機能させます。これはマルチキャスト デリゲートと呼ばれます。ここでshort exampleは、.NET C# の実装と使用可能な操作を示します。

Add はデリゲートに残り、Add1 はデリゲートが維持する内部リスト (FIFO キュー) に追加されます。

于 2013-02-12T05:28:01.647 に答える
0

デリゲートから派生したクラスである MultiCastDelegate は、複数のデリゲートを保持できます。MSDNには、完全に機能する例があります。

于 2013-02-12T05:41:32.730 に答える