C#允许编写各种类型的事件,但是为了与.NET框架的组件相兼容,必须遵循Microsft建立的一系列规则。这些规则的核心是,事件处理程序必须拥有两个参数。
第一个参数是一个对事件发生器的对象引用,它指向产生该事件的对象;第二个参数是一个对EventArgs类或者其派生类的引用,它指定处理程序所需的其他信息。
.NET兼容的事件处理通常采取下面的形式:
void handler(object source,EventArgs arg){ }
source参数一般有调用者传递给他一个this。EventArgs参数包含了附加的信息,如果方法并不需要这些信息,也可以忽略他们。
EventArgs类本省并不包含传递附加数据的字段。因此,EventArgs只能用作基类,我们必须派生新的子类以包含必须的字段。另外,Empty是EventArgs定义的一个静态字段,它可以存储一个不包含任何数据的EventArgs对象。
下面看一个简单的例子:
程序执行结果为:
Event 0 received by an X object.
Source is Execise.MyEvent
Event 1 received by an X object.
Source is Execise.MyEvent