none
为什麽事件类型可以转换为委托类型? RRS feed

  • 问题

  • 今天在博客园看到这一段代码,十分不解

             //自定义委托声明
    public delegate void childExitDelegate(object sender,ChildExitEventArgs e);
    //自定义的事件,实际上就是上面那个委托类型的实例
    public static event childExitDelegate onChildThreadExit;
    
        private static void childRunning(object onChildThreadExit)
        {
          childExitDelegate sendEventMessage = (childExitDelegate)onChildThreadExit;
        }
    

    2011年8月13日 15:10

答案

  • 您好,因为事件的本质就是基于委托的。

    event关键字的出现是为了防止发布类以外的类来触发事件。因为仅仅使用pulic委托会被外部的类调用,而加上event后则无法调用。

    2011年8月14日 3:21
    版主
  • 今天在博客园看到这一段代码,十分不解

     

         //自定义委托声明
    public delegate void childExitDelegate(object sender,ChildExitEventArgs e);
    //自定义的事件,实际上就是上面那个委托类型的实例
    public static event childExitDelegate onChildThreadExit;
    
      private static void childRunning(object onChildThreadExit)
      {
       childExitDelegate sendEventMessage = (childExitDelegate)onChildThreadExit;
      }
    

     


    你仔细看我黑体部分——

        //自定义委托声明
    public delegate void childExitDelegate(object sender,ChildExitEventArgs e);
    //自定义的事件,实际上就是上面那个委托类型的实例
    public static event childExitDelegate onChildThreadExit;


    注意:因为事件的类型就是委托类型啊!当然可以相互转换了。


    如果你有其它意见或私下交流,请直接发送maledong_work@foxmail.com;或者讨论(Talk)
    If you do not have QQ, please open the page and download it and click the image to talk or leave message for me.
    下载MSDN桌面工具(Vista,Win7)
    下载Technet桌面小工具(Vista,Win7)
    慈善点击,点击此处
    2011年8月14日 9:35
    版主
  • 事件肯定是某一个委托的实例。当声明一个事件的时候注意

    有点尧口


    哈哈,你意思明白就可以了。你可以理解为“事件”是“委托“的应用。一般的,委托很少单独使用
    如果你有其它意见或私下交流,请直接发送maledong_work@foxmail.com;或者讨论(Talk)
    If you do not have QQ, please open the page and download it and click the image to talk or leave message for me.
    下载MSDN桌面工具(Vista,Win7)
    下载Technet桌面小工具(Vista,Win7)
    慈善点击,点击此处
    2011年8月15日 8:54
    版主

全部回复

  • 今天在博客园看到这一段代码,十分不解

     

         //自定义委托声明
    public delegate void childExitDelegate(object sender,ChildExitEventArgs e);
    //自定义的事件,实际上就是上面那个委托类型的实例
    public static event childExitDelegate onChildThreadExit;
    
      private static void childRunning(object onChildThreadExit)
      {
       childExitDelegate sendEventMessage = (childExitDelegate)onChildThreadExit;
      }
    

     

    为什么我也不知道,我只是光用他来做异步。
    2011年8月14日 1:31
  • 您好,因为事件的本质就是基于委托的。

    event关键字的出现是为了防止发布类以外的类来触发事件。因为仅仅使用pulic委托会被外部的类调用,而加上event后则无法调用。

    2011年8月14日 3:21
    版主
  • 您好 jiyuan

    你的解析我觉得还不是很明白可以详细一点吗?或者写一些示例代码

    如果去掉event 关键字     :public static  childExitDelegate onChildThreadExit;

    这样事件其实就是委托类型的变量?

    2011年8月14日 7:50
  • 今天在博客园看到这一段代码,十分不解

     

         //自定义委托声明
    public delegate void childExitDelegate(object sender,ChildExitEventArgs e);
    //自定义的事件,实际上就是上面那个委托类型的实例
    public static event childExitDelegate onChildThreadExit;
    
      private static void childRunning(object onChildThreadExit)
      {
       childExitDelegate sendEventMessage = (childExitDelegate)onChildThreadExit;
      }
    

     


    你仔细看我黑体部分——

        //自定义委托声明
    public delegate void childExitDelegate(object sender,ChildExitEventArgs e);
    //自定义的事件,实际上就是上面那个委托类型的实例
    public static event childExitDelegate onChildThreadExit;


    注意:因为事件的类型就是委托类型啊!当然可以相互转换了。


    如果你有其它意见或私下交流,请直接发送maledong_work@foxmail.com;或者讨论(Talk)
    If you do not have QQ, please open the page and download it and click the image to talk or leave message for me.
    下载MSDN桌面工具(Vista,Win7)
    下载Technet桌面小工具(Vista,Win7)
    慈善点击,点击此处
    2011年8月14日 9:35
    版主
  • 您好 jiyuan

    你的解析我觉得还不是很明白可以详细一点吗?或者写一些示例代码

    如果去掉event 关键字     :public static  childExitDelegate onChildThreadExit;

    这样事件其实就是委托类型的变量?

    不是,事件肯定是某一个委托的实例。当声明一个事件的时候注意:

    public class A

    {

        public event childExitDelegate onChildThreadExit;

    }

    在外部调用的时候:

    A a=new A();

    a.onChildThreadExit+=new ……;

    不是相当于为a实例创建了一个childExitDelegate委托实例了吗?当然事件可以转换成对应的委托!

    :)


    如果你有其它意见或私下交流,请直接发送maledong_work@foxmail.com;或者讨论(Talk)
    If you do not have QQ, please open the page and download it and click the image to talk or leave message for me.
    下载MSDN桌面工具(Vista,Win7)
    下载Technet桌面小工具(Vista,Win7)
    慈善点击,点击此处
    2011年8月14日 9:38
    版主
  • 事件肯定是某一个委托的实例。当声明一个事件的时候注意

    有点尧口

    2011年8月14日 10:04
  • 事件肯定是某一个委托的实例。当声明一个事件的时候注意

    有点尧口


    哈哈,你意思明白就可以了。你可以理解为“事件”是“委托“的应用。一般的,委托很少单独使用
    如果你有其它意见或私下交流,请直接发送maledong_work@foxmail.com;或者讨论(Talk)
    If you do not have QQ, please open the page and download it and click the image to talk or leave message for me.
    下载MSDN桌面工具(Vista,Win7)
    下载Technet桌面小工具(Vista,Win7)
    慈善点击,点击此处
    2011年8月15日 8:54
    版主
  • 明白了,谢谢您
    2011年8月15日 11:39
  • dear

    小的在使用事件以及多线程(非同步更新UI)时才会用到委托


    秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/
    2011年8月15日 18:08