| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 543 人关注过本帖
标题:关于委托与事件,高分求解
只看楼主 加入收藏
gisdreamfly
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2009-3-2
结帖率:87.5%
收藏
已结贴  问题点数:100 回复次数:3 
关于委托与事件,高分求解
1、为什么标注的地方两种写法都可以?有什么区别没?

public delegate void EventHandler(object sender, EventArgs e);为系统定义的借口,有2个参数,
为什么在NewTimer.Tick += new EventHandler(CheckMessage);这里只有一个,是方法名??
(委托时把方法名当做参数传递,这里还是看不懂是怎么传递的)而方法的两个参数和接口两个参数是对应的。

 protected void Time()
        {
            Timer NewTimer = new Timer();
            NewTimer.Enabled = true;
            NewTimer.Interval = 100;
            NewTimer.Start();
            
            //这两种写法都可以, 有啥区别??
            //NewTimer.Tick += CheckMessage;
            NewTimer.Tick += new EventHandler(CheckMessage);
            

        }
        private void CheckMessage(object source,EventArgs e)
        {
            j++;
            if (j == 20)
                this.Close();
        }


2、
public  class Class2
    {
        public static string str1;
        public static string str2;      
      
        private static void EnglishGreeting(string name)
        {
            str1 = "Moring" + name;

        }

        private static void ChineseGreeting(string name)
        {
            str2 = "早上好, " + name;
        }
        public void Main()
        {
            GreetingManager GMa = new GreetingManager();
            GMa.GD1 += EnglishGreeting;
            GMa.GD1 += ChineseGreeting;
            GMa.GreetPeople("Jimmya");
        }
    }
   public class GreetingManager
   {      
//为什么委托名和事件必须一样??GreetDelegate
       public delegate void GreetDelegate(string name);
       public event GreetDelegate GD1;
      
       public void GreetPeople(string name)
       {
           
           
           if (GD1 != null)
           {
               GD1(name);
           }
       }
   }

上面红色两句是 自定义委托和事件,为什么必须一样都是GreetDelegate??
GMa.GD1 += EnglishGreeting;
GMa.GD1 += ChineseGreeting;
GD1是事件啊,这里到底是调用委托还是事件(考虑委托定义,是将方法绑定在委托上吗)?难道类似于实例化类的时候同时调用构造方法,有一指二的意思??

期待高手解释,闯过委托和事件这一关,感激不尽!!!
搜索更多相关主题的帖子: 高分 求解 委托 
2009-08-06 13:02
baikil
Rank: 10Rank: 10Rank: 10
来 自:X星球
等 级:青峰侠
威 望:4
帖 子:282
专家分:1580
注 册:2009-7-20
收藏
得分:23 
呵呵 ,同学问题不少啊,
1.为什么在NewTimer.Tick += new EventHandler(CheckMessage);这里只有一个,CheckMessage是方法名.

2.         //NewTimer.Tick += CheckMessage;   -->匿名调用 .NET Framework  2.0以上版本就可以用
           // NewTimer.Tick += new EventHandler(CheckMessage);    -->显示调用.NET Framework 1.0就可以用

3.     GMa.GD1 += EnglishGreeting;  //注册的是事件 ===>GMa.GD1+=New GreetDelegate(EnglishGreeting);
       GMa.GD1 += ChineseGreeting;   //注册的是事件 ==>GMa.GD1+=New GreetDelegate(ChineseGreeting);

       public delegate void GreetDelegate(string name);  //这是定义一个委托
       public event GreetDelegate GD1;                   //这是一个事件 事件处理的方法必须通过委托来调用.

   
       public void GreetPeople(string name)
       {
            if (GD1 != null) //判断事件没有被注册
           {
               GD1(name);     //触发事件并传入参数
           }
       }


自创QQ群64885635,方便C#学习交流.希望各项工作路好学都好入!
2009-08-06 14:09
ginpq
Rank: 2
等 级:论坛游民
帖 子:34
专家分:50
注 册:2007-8-21
收藏
得分:23 
关于 接口、委托、代理和事件的定义和规范使用方法一直没确切地理解,学习中...
2009-08-06 15:07
jedypjd
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:9
帖 子:1096
专家分:4969
注 册:2009-7-27
收藏
得分:23 
回复 2楼 baikil

强人啊,我qq是178169475,交个朋友吧

天涯无岁月,歧路有风尘,百年浑似醉,是非一片云
2009-08-06 20:17
快速回复:关于委托与事件,高分求解
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017415 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved