C#的自定义事件的处理

来源:互联网 发布:淘宝阿里旺旺免费下载 编辑:程序博客网 时间:2024/05/27 20:45

此篇文章的转载处来于  http://dev.csdn.net/Develop/article/22/22951.shtm   。抄袭他的东西是不道德的,我会加入一些自己的想法.

public delegate void EventHandler( object sender , EventArgs e )

//delegate是定义事件委派的关键字,然后此事件的返回类型是void,也就是没有返回值,EvenHandler是一个委派申明,而这个委派申明看起来更象是我们定义的一个类型.

public event EventHandler Click;

//event是定义事件的关键字,EventHandler则是把此处的Click事件与EvenHandler挂钩.如果在后面调用Click方法,则会用EventHandler找到对应的事件具体的处理方法.

private void button1_Click(object sender, System.EventArgs e){.................}//这个我们将把他作为Click事件的具体处理方法.按照英文书中所描述的,这个方法与Click所在类是不能相同的.

但实际上此处的处理方法与Click并无任何关系.那么怎么将他们建立关系呢?使用如下语句即可.

this.button1.Click += new System.EventHandler(this.button1_Click);//这样就把他绑定好了.这行代码是要放在上面代码外面的.

现在来讲个例子.

using System;//命名空间class UserInputMonitor//定义一个类{ public delegate void UserRequest(object sender,EventArgs e);//委派 //定义委托 public event UserRequest OnUserRequest;//与上面的挂钩 //此委托类型类型的事件 public void Run()//一个死循环函数,不停的监听用户的输入并作出相应的反映,触发事件 {  bool finished=false;  do  {   if (Console.ReadLine()=="h")   {    OnUserRequest(this,new EventArgs());   }    }while(!finished); }}
    public class Client//定义类{ public static void Main() {  UserInputMonitor monitor=new UserInputMonitor();//定义monitor,此实例有事件.  new Client(monitor);//最重要的就是这里,将事件与实际处理代码挂钩.  monitor.Run();//开始监听. } private void ShowMessage(object sender,EventArgs e)//事件的具体处理方法 {  Console.WriteLine("HaHa!!"); } Client(UserInputMonitor m)//初始化函数 {  m.OnUserRequest+=new UserInputMonitor.UserRequest(this.ShowMessage);  //将事件的具体处理方法附加上去m.OnUserRequest+=new m.UserRequest(this.ShowMessage);  //注意这种写法是错误的,因为委托是静态的 }}为了加深印象,我来模仿一下这个事件的发生过程.第一步,Main()被调用,此时,定义了一个UserInputMonitor的实例monitor.第二步,通过初始化函数将ShowMessage方法与monitor的OnUserRequest事件挂钩,OnUserRequest发生就是ShowMessage发生的时候,开始监听.第三步:当监听到"h"的时候,触发事件,此时ShowMessage就会执行.整个过程分析完毕.如果我有分析得步对得,请各位高人指教,希望作者能够看到我得分析,也请指教.

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/qiuqiu1140/archive/2006/06/30/854718.aspx

原创粉丝点击