Tuesday, November 28, 2006

.Net的事件



  .Net的事件也是由委托(delegate)折腾出来的。似乎在.Net里,很多东西都直接或间接的和委托有着千丝万缕的练习。



  .Net用委托将事件和事件处理函数联系起来。



  定义一个事件类,由EventArgs继承得来。



  在一个对象A中有声明的事件(event),就是声明了一个委托(并加有关键字event)。有一个方法用来模拟触发事件。以及一个事件处理函数。



  首先,要将A中声明的事件和事件处理函数联系起来,可以用+=将实例化的委托(指向事件处理函数)联系起来。



  然后实例化定义的事件,并把它作为触发事件方法的参数。调用触发事件方法。



  触发事件方法里只有一个动作,即是调用委托。



  以下是示例:







using System;


using System.ComponentModel;



namespace EventTest {



public class EventArgsTest : EventArgs {


private readonly string testString;



public EventArgsTest(string inputString) {


this.testString = inputString;


}



public string TestString {


get { return testString; }


}


}



public delegate void EventHandlerTest(object sender, EventArgsTest e);



public class EventSourceAndHandler {



//声明事件


public event EventHandlerTest Alarm;



//事件处理函数


public void eventHandler(object sender, EventArgsTest e) {


Console.Out.WriteLine(e.TestString);


}



//触发事件


public virtual void OnAlarm(EventArgsTest e) {


if (Alarm != null) {


// 调用委托


Alarm(this, e);


}


}


}



public class eventTest {


public static void Main(string[] args) {



EventSourceAndHandler clock = new EventSourceAndHandler();


clock.Alarm += new EventHandlerTest(clock.eventHandler);


EventArgsTest e = new EventArgsTest("event test!");


clock.OnAlarm(e);


}


}



}








  执行结果:





event test!



No comments: