Visual C# 中的事件及委托

在传统的程式设计语言中,事件一般是一种回调。在C#中这种回调被称为委托,事件处理不过是通过委托呼叫方法。
委托类别定义一个方法签名,可将相容签名的方法与委托相关联。
C#中事件采用发布/订阅模型,订阅事件其实就是用委托来实现的。
namespace WpfApplication1
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
var timer = new System.Timers.Timer(1000);
timer.Start();
timer.Elapsed += new System.Timers.ElapsedEventHandler(TimerElapsedHandler);
}
void TimerElapsedHandler(object sender, EventArgs e)
{
MessageBox.Show("Timer has Elapsed");
}
}
}
第一个参数 sender 表示引发实践的物件;第二个参数 e 是传说的数据,类别是 EventArgs 或其子类。事件处理方法返回值 void。
其实委托关联可以简写为timer.Elapsed += TimerElapsedHandler;,取消事件订阅timer.Elapsed -= TimerElapsedHandler;
匿名委托更为简洁,但是取消订阅不好处理,这里不作展开。
2017年09月11日 更新一下匿名的两张写法:
timer.Elapsed += delegate(object sender, System.Timers.ElapsedEventArgs e)
{
MessageBox.Show("Timer has Elapsed");
};
或是直接次采用剪头语法来写
timer.Elapsed += (object sender, System.Timers.ElapsedEventArgs e) =>
{
MessageBox.Show("Timer has Elapsed.");
};
最后修改于 2017-09-09