C#==>事件和委托的实例
一个关于委托和事件的实例,
首先定义了一个员工类,当这个员工下班的时候会自动通知他的经理,并通知时间管理机能来记录下班时间,
同时,继承了一个消息类,用来记录我们自定义的内容: 给经理的留言 下班的时间
Worker.cs 员工类
/// <summary> /// 工人类 /// </summary> class Worker { //记录工人的名称 public string Name { get; set; } public Worker(string name) { this.Name = name; } //定义一个委托 public delegate void WorkOverEventHandler(object sender, WorkOverEventArgs e); //定义一个基于委托的事件 public event WorkOverEventHandler WorkOver; //为了引发被委托的事件而创建的OnWorkOver方法 public void OnWorkOver(object sender, WorkOverEventArgs e) { if (WorkOver != null) { WorkOver(sender, e); } } }
WorkOverEventArgs.cs自定义消息
/// <summary> /// 用来记录工作结束的相关消息 /// </summary> class WorkOverEventArgs : EventArgs { //记录下班时间 public DateTime OverTime { get; set; } //记录留言 public string Message { get; set; } public WorkOverEventArgs() { this.OverTime = DateTime.Now; } public WorkOverEventArgs(string strMsg) { this.OverTime = DateTime.Now; this.Message = strMsg; } }
Manager.cs经理类
/// <summary> /// 经理类 /// </summary> class Manager { //根据取得的sender和e内的信息显示Worker给经理的留言 public void WorkerOverShowMessage(object sender, WorkOverEventArgs e) { Console.WriteLine("Manager类 ==> 来自{0}的留言:“{1}”", (sender as Worker).Name, e.Message); } }
Timer.cs时间类
/// <summary> /// 时间管理 /// </summary> class Timer { //根据取得的sender和e内的信息显示下班的时间 public static void WorkerOverShowTime(object sender, WorkOverEventArgs e) { Console.WriteLine("Timer类 ==> {0}的下班时间 : {1}", (sender as Worker).Name, e.OverTime.ToLongTimeString()); } }
使用
class Program { static void Main(string[] args) { Worker Tom = new Worker("Tom"); Manager manager = new Manager(); //向Tom类添加经理类的事件 Tom.WorkOver += new Worker.WorkOverEventHandler(manager.WorkerOverShowMessage); //向Tom类添加时间的处理 Tom.WorkOver += new Worker.WorkOverEventHandler(Timer.WorkerOverShowTime); //处理消息类的信息 WorkOverEventArgs e = new WorkOverEventArgs(); e.Message = "我下班了"; Tom.OnWorkOver(Tom, e); Console.Read(); } }
浙公网安备 33010602011771号