代表可以指向多种方法吗?

时间:2013-02-12 05:24:34

标签: c# delegates

你好程序员,我正在学习代表。在我的书中,作者声称该方法将打印出由委托对象维护的方法的名称以及定义该方法的类的名称。

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()方法,以便在这个数组中显示多个项目吗?

感谢任何输入, 谢谢, 利奥

2 个答案:

答案 0 :(得分: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,以使其有效。这称为多播委托,这里是.NET C#实现的一部分short example。可用的操作。

添加将保留在委托中,而Add1将附加到内部列表(FIFO队列)委托维护。

答案 1 :(得分:0)

MultiCastDelegate是一个派生自委托的类,可以容纳多个委托。 MSDN有一个完整的工作示例。