事件封裝「發生某事並通知關注者」的模式。事件源 引發事件,事件監聽者 訂閱並處理。
// 設計器生成的訂閱代碼
this.button1.Click += new System.EventHandler(this.button1_Click);
// 事件處理方法
private void button1_Click(object sender, EventArgs e) {
// sender 為事件源,e 為事件參數
}
EventHandler 為委托類型,定義事件處理簽名。
public event EventHandler myevent;this.myevent += new EventHandler(MyEventHandler);private void MyEventHandler(object sender, EventArgs e) { ... }if (myevent != null) myevent(this, new EventArgs());(需檢查 null 防止無訂閱者時拋出異常)。public partial class Form1 : Form {
public event EventHandler myevnet;
public Form1() {
InitializeComponent();
this.myevnet += new EventHandler(MyEventHandler);
}
private void button1_Click(object sender, EventArgs e) {
MessageBox.Show("button1_Click");
if (myevnet != null) myevnet(this.button1, new EventArgs());
}
private void MyEventHandler(object sender, EventArgs e) {
MessageBox.Show("myevent is raised.......");
}
}
EventArgs 定義 MyEventArgs,加入 Message 屬性。delegate void MyeventHandler(object sender, MyEventArgs e);。public event MyeventHandler myCustomevent;。myCustomevent(this, new MyEventArgs { Message = this.textBox1.Text });。addGrad.myCustomevent += new MyeventHandler(addGrad_myCustomevent);,處理器中取得 e.Message。null(或使用 C# 6 ?.Invoke())。EventArgs 可攜帶豐富上下文資訊。EventHandler 結尾,參數類以 EventArgs 結尾。