码迷,mamicode.com
首页 > 其他好文 > 详细

事件或委托获取多个返回值和异常处理

时间:2015-04-03 18:46:11      阅读:100      评论:0      收藏:0      [点我收藏+]

标签:

理论知识:

1.  委托在编译后会生成一个继承自MulticastDelegate的类,而这个MulticastDelegate又继承自Delegate。在Delegate内部,维护了一个委托链表,链表上的每一个元素为一个只包含一个目标方法的委托对象。而通过Delegate基类的GetInvocationList()静态方法,可以获得这个委托链表。随后便利这个链表,通过链表中的每一个委托对象来调用方法,这样就可以分别获得每一个方法的返回值

2.  Delegate基类中的DynamicInvoke()方法:

public object DynamicInvoke(params object[] args)

  这是调用委托最通用的方法了,适用于所有类型的委托。它接受的参数为 params object[] ,也就是说它可以将任意类型作为参数,并返回单个object对象。

 

如下是一个通用的调用委托链表中方法的方法:

 1             private static List<object> FireEvent(Delegate del, params object[] args)
 2             {
 3                 List<object> objLst = new List<object>();
 4                 if (del != null)
 5                 {
 6                     Delegate[] delegates = del.GetInvocationList();
 7                     foreach (Delegate method in delegates)
 8                     {
 9                         try
10                         {
11                             object obj = method.DynamicInvoke(args);
12                             if (obj != null)
13                             {
14                                 objLst.Add(obj);
15                             }
16                         }
17                         catch (Exception e)
18                         {
19 
20                         }
21 
22                     }
23                 }
24 
25                 return objLst;
26             }

 

事件或委托获取多个返回值和异常处理

标签:

原文地址:http://www.cnblogs.com/gscvery/p/4390496.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!