就是这么简单,结合delegate的实现,我们可以将自定义事件的实现归结为以下几步:
1.定义delegate对象类型,它有两个参数,第一个参数是事件发送者对象,第二个参数是事件参数类对象。
2.定义事件参数类,此类应当从System.EventArgs类派生。如果事件不带参数,这一步可以省略。
3.定义"事件处理方法,它应当与delegate对象具有相同的参数和返回值类型"。
4.用event关键字定义事件对象,它同时也是一个delegate对象。
5.用+=操作符添加事件到事件队列中(-=操作符能够将事件从队列中删除)。
6.在需要触发事件的地方用调用delegate的方式写事件触发方法。一般来说,此方法应为protected访问限制,既不能以public方式调用,但可以被子类继承。名字是OnEventName。
7. 在适当的地方调用事件触发方法触发事件。
第二步讲的事件参数类是什么呢
你总结的太复杂了,就三点:
一、定义委托(包括委托类型和委托实例,委托实例即事件对象)
二、触发事件(在哪些地方调用这个委托)
三、订阅事件
参数不一定要从EventArgs类派生,可以定义不要任何参数的事件,主要看你自己哪种方便了
@沧海一杰: 典型的.net标准事件是一个叫EventHandler的委托,这个委托的原型是 void(object sender,EventArgs e), 你如果不打算采用这种两个参数的事件,完全可以无视 EventHandler和EventArgs这两个类型。
@沧海一杰: 说实话,事件简单的很。 做上一两个交互性比较强的自定义用户控件就永远也忘不了了。
@沧海一杰: 您能告诉我 事件生成事件数据 这句话是什么意思吗
@太笼统:针对事件来说,没有任何意义,可能是一个特定语境中的描述。 事件其实是可以脱离语言来看的,从其它语言来看,根本就没有委托的概念,委托只是一个对事件参数的封装。
现实世界中,事件就是一个突发的事件,然后要通知主体,主体会作处理。 比如你执行一个长时间的下载任务,任务开始进触发一个开始事件。每下载完1M,你触发一个进度改变事件,告知调用者(想传哪些参数是通过委托来实现的,这就是委托在事件中真正的用处,比如进度,总长度,速度),调用者收到这个信息后,更新下载进度。下载完成后可以再触发一个完成事件,调用者更新下载任务的状态。
你将 EventArgs 翻译成中文,就叫着"事件参数",由于在C#语言中,EventArgs 又表示类,所以就是"事件参数类"-EventArgs Class.
继承自EventArgs的类,继承的类可以定义属性,使得原本不能传数据的事件参数,可以传递数据,我有写过一篇关于事件的文章
http://www.cnblogs.com/zery/p/3415479.html