none
委托绑定方法 RRS feed

  • 问题

  • namespace Test { class Program { public delegate void MyDelegate(int myData); MyDelegate md; public static void MyMethod1(int myData) { Console.WriteLine("My Method1 data: {0}", myData); } public static void MyMethod2(int myData) { Console.WriteLine("My Method2 data: {0}", myData); } static void Main() { Program p = new Program(); p.md += MyMethod1; // 第一种绑定形式 p.md += new MyDelegate(MyMethod2); // 第二种绑定形式 MyDelegate tmp = new MyDelegate(MyMethod2); p.md += tmp; // 第三种绑定形式 p.md(123); } }

    }

    上面个的Main函数代码中,第二种形式是不是第三种形式的简写呢?

    此外,第二、三种形式中均用到了MyDelegate委托类的构造函数来初始化。但是反编译的委托类构造函数具有:

    .ctor(Object, IntPtr)
    签名,其中有两个传入参数,为什么在第二、三种形式中初始化只传入了一个参数(函数名,IntPtr参数)就可以呢?

    2015年3月19日 9:27

答案

  • ?????

    • 已标记为答案 霜魂哀伤 2015年3月20日 6:11
    • 已编辑 Shi Xin 2015年7月27日 6:09
    2015年3月19日 10:21
  • ?????

    • 已标记为答案 霜魂哀伤 2015年3月20日 6:11
    • 已编辑 Shi Xin 2015年7月27日 6:09
    2015年3月20日 5:32
  • 谢谢了,.ctor构造函数说的很清楚,我基本上明白了。但是你在第二段中说:

    “第一种绑定形式使用了隐式转换,编译器自动调用默认构造函数”

    第一种绑定形式应该是直接调用委托类的add_MyDelegate方法实现绑定吧?还要在调用默认构造函数么?对象p在第一行new创建的时候已经初始化完成,所以p.md也应该初始化过了吧?

    add_MyDelegate这个方法是哪里来的?

    我建议你通过Reflector或者ILSpy来查看一下生成的IL代码:

    通过IL其实可以看出来三种方法都是通过MyDelegate的构造函数来初始化,然后绑定到委托的调用链表中。


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.


    2015年3月20日 7:37
    版主

全部回复

  • ?????

    • 已标记为答案 霜魂哀伤 2015年3月20日 6:11
    • 已编辑 Shi Xin 2015年7月27日 6:09
    2015年3月19日 10:21
  • 谢谢了,.ctor构造函数说的很清楚,我基本上明白了。但是你在第二段中说:

    “第一种绑定形式使用了隐式转换,编译器自动调用默认构造函数”

    第一种绑定形式应该是直接调用委托类的add_MyDelegate方法实现绑定吧?还要在调用默认构造函数么?对象p在第一行new创建的时候已经初始化完成,所以p.md也应该初始化过了吧?

    2015年3月20日 2:58
  • ?????

    • 已标记为答案 霜魂哀伤 2015年3月20日 6:11
    • 已编辑 Shi Xin 2015年7月27日 6:09
    2015年3月20日 5:32
  • 谢谢了,.ctor构造函数说的很清楚,我基本上明白了。但是你在第二段中说:

    “第一种绑定形式使用了隐式转换,编译器自动调用默认构造函数”

    第一种绑定形式应该是直接调用委托类的add_MyDelegate方法实现绑定吧?还要在调用默认构造函数么?对象p在第一行new创建的时候已经初始化完成,所以p.md也应该初始化过了吧?

    add_MyDelegate这个方法是哪里来的?

    我建议你通过Reflector或者ILSpy来查看一下生成的IL代码:

    通过IL其实可以看出来三种方法都是通过MyDelegate的构造函数来初始化,然后绑定到委托的调用链表中。


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.


    2015年3月20日 7:37
    版主