1.事件的概念
在C#中,事件是一种特殊的委托类型,用于在对象之间提供一种基于观察者模式的通知机制。事件的发送方定义了一个委托,委托类型的声明包含了事件的签名,即事件处理器方法的签名。事件的订阅者可以通过+=运算符来注册事件处理器。当事件发送方触发事件时,所有注册的事件处理器会被依次调用。
2.示例代码
下面是一个简单的C#事件的例子:
cs
using System;
public class EventExample
{
// 定义委托类型,它具有事件处理器的签名
public delegate void SimpleEventHandler(object sender, EventArgs e);
// 声明事件
public event SimpleEventHandler SimpleEvent;
// 触发事件的方法
protected virtual void OnSimpleEvent(EventArgs e)
{
SimpleEventHandler handler = SimpleEvent;
handler?.Invoke(this, e);
}
// 示例方法,可以在需要的时候触发事件
public void RaiseEvent()
{
OnSimpleEvent(EventArgs.Empty);
}
}
public class EventSubscriber
{
public void Subscribe(EventExample eventExample)
{
// 订阅事件
eventExample.SimpleEvent += EventHandler;
}
private void EventHandler(object sender, EventArgs e)
{
Console.WriteLine("Event triggered.");
}
}
class Program
{
static void Main()
{
EventExample eventSource = new EventExample();
EventSubscriber subscriber = new EventSubscriber();
subscriber.Subscribe(eventSource);
// 触发事件
eventSource.RaiseEvent();
}
}
在这个例子中,EventExample 类定义了一个委托 SimpleEventHandler 和一个基于该委托类型的事件 SimpleEvent。OnSimpleEvent 方法是触发事件的方法,它检查事件是否有注册的处理器,并按顺序调用它们。RaiseEvent 方法用于触发事件。EventSubscriber 类中的 Subscribe 方法用于订阅事件,并提供了事件处理器 EventHandler。在 Main 方法中,我们创建了 EventExample 和 EventSubscriber 的实例,并通过 Subscribe 方法将 EventHandler 注册到 SimpleEvent 上。最后通过 RaiseEvent 方法触发了事件,控制台上输出了 "Event triggered."。