第 17 天 ~ 今天來講事件 Event。
在寫 C# 程式時,多多少少都有碰到應用元件提供的事件 (像是按鈕點下去後,在點擊事件裡寫相關邏輯),今天就來實作簡單的事件 ~
以下使用微軟文件的範例 (見參考資料 3),並加以修改。
public class Countdown
{
public event EventHandler CountdownCompleted;
}
public class Countdown
{
public event EventHandler CountdownCompleted;
protected virtual void OnCountdownCompleted(EventArgs e)
{
if (CountdownCompleted != null)
CountdownCompleted(this, e);
}
}
public class Countdown // 簡單的倒數類別
{
int internalCounter;
public event EventHandler CountdownCompleted;
public Countdown(int n){ // 建構方法,設定要倒數的數字
internalCounter = n;
}
protected virtual void OnCountdownCompleted(EventArgs e)
{
if (CountdownCompleted != null)
CountdownCompleted(this, e); // 發送事件
}
public void Decrement() // 倒數,直到 0 時呼叫事件
{
internalCounter = internalCounter - 1;
if (internalCounter == 0)
OnCountdownCompleted(new EventArgs());
}
}
public class Receiver{
// 建立的方法,當事件發生時會呼叫
public void Tip(object sender , EventArgs eventArgs){
Console.WriteLine("Tip!!!");
}
public void Run(){
Countdown countdown = new Countdown(3);
countdown.CountdownCompleted += Tip; // 註冊事件
countdown.Decrement();
countdown.Decrement();
countdown.Decrement(); // 觸發事件
}
}
此處是自行呼叫 Countdown 的倒數方法,直到其觸發事件為止。該方法若改為執行緒,執行一定次數或時間後,自動觸發事件,更能發揮事件的作用。