从反射看委托与事件,委托真的是一个类,一点不假,呵呵

关于委托与事件,网上介绍得非常之多,在此不再赘述,本人最近需要捣鼓一些委托,因而对委托进行一定的寻根究底,故用反射把委托的成员揪出来,且看如下代码:

        delegate void DelegateDemo();
        static event DelegateDemo delHandle;
        static void Main()
        {
            delHandle += new DelegateDemo(MyDelegate_delHandle);
            MemberInfo[] mis = delHandle.GetType().GetMembers();
            foreach (var item in mis)
            {
                Console.WriteLine(item.Name+"  " + item.ToString());
            }
        }

        static void MyDelegate_delHandle()
        {
            throw new NotImplementedException();
        }

贴出来才发现是获取事件的类型,当然用此与委托进行对比的话只需要将delHandle.GetType()改为typeof(DelegateDemo),对比下会发现什么呢?好奇的童鞋自行试验了哈。

上述输出也许看的不是很直观,我们可以断点进去监视,看下图,显示得非常直观,可以看到其内部公共的成员方法和属性了啊。

另外说一点我的个人看法,委托是一个类,那么事件是什么呢?我认为事件就是类的一个对象,看这个反射获取类型的方式与平常反射一个类反射一个对象就是完全一致的呵。

关于委托,添加一点,这是以前未曾注意的:委托协变——支持返回值协变;逆变——支持参数, 但传参仍然以委托定义的参数为准

 

好了,以上是反射方式分析委托和事件,当然还有更底层的分析——IL,请看这篇园友猫行天下提供的博文http://www.cnblogs.com/slayercat/archive/2012/09/27/2705786.html

转载于:https://www.cnblogs.com/FreeDong/archive/2012/09/27/2705372.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值