zoukankan      html  css  js  c++  java
  • 委托回调初识

    我们知道定义一个委托之后,就可以像MyDelegate(3,7)这样回调方法,其实每一个委托对象都是一个类对象,每一个委托对象中都有一个Invoke的同步成员方法(查MSDN得知),系统实际调用的是MyDelegate.Invoke(3,7).那么Invoke的内部结构怎样的呢?当然MSDN上面肯定查不出来了,琢磨了一下,可以模仿一下的嘛!

    Invoke的内部实现(伪代码)
     1 sealed class MyDelegate:MultiCastDelegate //编译器为我们生成的类
     2 {
     3    public  int Invoke(int x,int y)
     4    {
     5        int  result=0;
     6        Delegate[] delegates=this.GetInvocationList();//获取委托列表(具体用法查看MSDN)
     7         foreach(Delegate dele in deledates)
     8        {
     9            result= dele.Method.Invoke(dele.Target,new object[]{x,y});//Method、Target为Delegate类型中的成员,分别表示委托方法和方法所属对象,具体参考MSDN
    10        }
    11        return result;//返回委托链中最后一个返回值
    12    }
    13    ………………………………//还有其他成员
    14 }

    其中GetInvocationList返回Delegate类型数组,Method为一个System.Reflection.MethodInfo类型变量,Target为Object对象,具体参考MSDN。

  • 相关阅读:
    System.Windows.Forms.Timer与System.Timers.Timer的区别(zz)
    30个最常用css选择器解析(zz)
    Highcharts选项配置详细说明文档(zz)
    CSS For Bar Graphs(maybe old)
    学习CSS3BUTTON(二)
    学习CSS3BUTTON(一)
    CSS CURSOR属性
    CSS3的文字阴影—text-shadow
    display:inline-block; 到底是个啥玩意?
    mysql 子查询
  • 原文地址:https://www.cnblogs.com/xiaozhi_5638/p/1703941.html
Copyright © 2011-2022 走看看