// 事件通常為公用的,因此標示為 public // event 為關鍵字,一般 delegate 可為區域變數或成員變數,delegate 呼叫前若未指定任何方法,則會造成編譯錯誤,且第一次指定方法不可使用「+=」 // 標示為 event 者僅能是成員變數,呼叫前若未指定任何方法,則僅在執行期間拋出例外,並且第一次指定方法可使用「+=」 // EventHandler 則為 delegate 定義: public delegate void EventHandler(object sender, EventArgs e); public void OnBallInPlay(BallEventArgs e) { if (BallInPlay != null) { BallInPlay(this, e); } }
static void Main(string[] args) { var e = new BallEventArgs(trajectory: 20, distance: 200); var ball = new Ball(); var p = new Pitcher(ball); var fans = new Fans(ball); ball.OnBallInPlay(e); Console.ReadLine(); }
private void ball_BallInPlay(object sender, EventArgs e) { // BallInPlay 事件處理方法 if (e is BallEventArgs) { // 判斷物件是否為 BallEventArgs 實體 BallEventArgs ballEventArgs = e as BallEventArgs; // 將物件由 EventArgs 轉型 BallEventArgs if ((ballEventArgs.Distance < 95) && (ballEventArgs.Trajectory < 60)) { CatchBall(); } else { CoverFirstBase(); } } }