首先,需要明白,delegate和event这样的程序,必须有一个发生事件的类,然后还要有一个接收一个事件并做出相应反映的类。第一个类我们就叫MySource吧,意思就是源;后面的那个类我们就叫做MyAction类吧。除了这两个类以外,还需要有一个委托类即delegate类型的类。好了,一共三个东西,即MySource类,MyAction类,Delegate类,三个,然后把他们堆砌在一起。里面先不要写东西。看到这里,没有不懂得地方吧。在你的某个XXX.cs文件里面这么写:
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- namespace DelegateEvent
- {
- //这里写出delegate类
- public Delegate MyDelegate(object sender, eventargs e)
- public class MySource
- {
- }
- public class MyAction
- {
- }
- }
- public class MyAction
- {
- public void Do(Object sender,EventArgs e)
- {
- console.writeline("你好,我是事件处理程序,如果你看到了,说明我被调用了。哈哈。");
- }
- }
根据微软的MSDN的套路,我也建议大家看看我的MySource里面的写法。关于事件和delegate的网址是:
http://msdn.microsoft.com/zh-cn/library/9aackb16.aspx
如果嫌我说话啰嗦,就看msdn去,不过上面写清楚了,就是解释不清楚,对于初学者,还是看我这个啰嗦点,我认为比较好。
上面需要注意的一点是:public void do(Object sender,EventArgs e),这是事件处理程序,这个函数的参数Object sender,EventArgs e必须要跟delegate类MyDelegate的参数一直。你看看我的,是不是一致?呵呵。
然后呢?我们开始写MySource类,MySource类里面有三个东西需要记住,记住了就会写了。
1,定义一个MyDelegate的一个事件成员。即在MySource里面这么写 :
- public class MySource
- {
- public event MyDelegate MyEvent;
- }
2、需要写一个开始程序,表示程序要开始运行了。这么写:
- public class MySource
- {
- public event MyDelegate MyEvent;
- public void Start()
- {
- EventArgs e = new EventArgs();
- OnStart(e);
- }
- }
在这个开始程序里面,首先定义一个参数,这里不传递什么参数,但是也要写上。然后呢,执行Onstart(e)函数。下面写出Onstart函数
- public class MySource
- {
- public event MyDelegate MyEvent;
- public void OnStart(EventArgs e)
- {
- MyDelegate handler = MyEvent;
- if (handler != null)
- {
- handler(this,e);
- }
- }
- public void Start()
- {
- EventArgs e = new EventArgs();
- OnStart(e);
- }
- }
Onstart函数是需要一个eventArgs参数的,这就是为什么start里面是OnStart(e)。在里面,将定义的MyEvent事件成员赋值给同样是MyDelegate类型的handler,然后这个时候handler就是一个接收两个参数this,e的delegate了。好了,现在这三块砖已经搭建起来了。下面就是怎么使用了。
在programe.cs里面这样写:
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- namespace DelegateEvent
- {
- class Program
- {
- static void Main(string[] args)
- {
- MyAction myAction = new Action();
- MySource mySource = new Source();
- mySource.MyEvent += new MyDelegate(myAction.Do);
- mySource.Start();
- }
- }
- }
说白了,其实很简单,首先类MyAction和MySource各定义一个实例。myAction,mySource两个。然后呢。。写出:
mySource.MyEvent += new MyDelegate(myAction.Do); 语句。
就是将myAction.Do的事件处理程序让MyDelegate引用,怎么使用呢?就是让mySource.MyEvent调用。mySource.MyEvent里面MyEvent是mySource的成员,当然可以这么调用。同时,在onstart里面,MyEvent给了handler,于是handler(this,e)执行的话,就等于出发了myAction.Do程序。
明白啦?
最后结果输出:
我是一个事件处理程序,我
请按任意键继续. . .