.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:
Post a Comment