C#自訂事件和java有所不同,涉及到委託。下面程式碼封裝括自訂事件從事件定義到事件觸發和執行的全過程。
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Timers;//using System.Timers;namespace EventTest{ //定義一個委託MessageHandler,可以看作是一個類。 public delegate void MessageHandler(string messageText); class Connections {//定義一個事件MessageArrive,是委託的執行個體 public event MessageHandler MessageArrive; private Timer pollTimer; private static Random random = new Random(); public Connections() { this.pollTimer = new Timer(); pollTimer.Elapsed += new ElapsedEventHandler(Display); } public void Connect() { pollTimer.Start(); } public void Disconnect() { pollTimer.Stop(); } public void Display(object source, ElapsedEventArgs e) { Console.WriteLine("New Message Coming"); if (random.Next(9) == 0 && MessageArrive != null) {//觸發MessageArrive事件 MessageArrive("New Message Arrived, And has been handled successfully"); } } static void Main(string[] args) { Connections connector = new Connections(); Display displayor = new Display(); //將一個委託執行個體賦值給事件MessageArrive,參數為方法DisplayMessage,方法的參數要與委託類的參數一致。 connector.MessageArrive += new MessageHandler(displayor.DisplayMessage); connector.Connect(); Console.ReadKey(); } } public class Display { public void DisplayMessage(string text) { Console.WriteLine(text); } }}