事件是物件狀態變化時發出的通知。四大要素:
EventArgs)
// 定義在 Framework 內部
public delegate void EventHandler(object sender, EventArgs e);
public event EventHandler Click;
// 使用端
button1.Click += Button1_Click; // 訂閱
private void Button1_Click(object sender, EventArgs e) { /* 處理 */ }
// 激發:使用者點擊滑鼠 -> Framework 內部呼叫 OnClick -> Click?.Invoke(this, EventArgs.Empty)
public class MyText
{
public event EventHandler Changed;
private string _text;
public string Text
{
get => _text;
set
{
if (_text != value)
{
_text = value;
Changed?.Invoke(this, EventArgs.Empty);
}
}
}
}
// 使用
var mt = new MyText();
mt.Changed += (s, e) => Console.WriteLine("文字已變更");
mt.Text = "Hello"; // 觸發事件
public class MailMsgEventArgs : EventArgs
{
public readonly string From, To, Subject, Body;
public MailMsgEventArgs(string from, string to, string subject, string body)
{
From = from; To = to; Subject = subject; Body = body;
}
}
接著建立 `MailManager`(事件源)、`Fax`/`CallPhone`(接收者)、用戶端組裝(見後續文章)。