C#==>事件和委托的实例
2010-01-14 23:07
507 查看
一个关于委托和事件的实例,
首先定义了一个员工类,当这个员工下班的时候会自动通知他的经理,并通知时间管理机能来记录下班时间,
同时,继承了一个消息类,用来记录我们自定义的内容: 给经理的留言 下班的时间
Worker.cs 员工类
WorkOverEventArgs.cs自定义消息
Manager.cs经理类
Timer.cs时间类
使用
首先定义了一个员工类,当这个员工下班的时候会自动通知他的经理,并通知时间管理机能来记录下班时间,
同时,继承了一个消息类,用来记录我们自定义的内容: 给经理的留言 下班的时间
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(); } }
相关文章推荐
- C#中的委托与事件详解<个人总结>
- [Unity&C#&事件委托]对委托事件的学习与实践
- C# Func<>委托
- (委托事件处理)关于多线程执行显示进度条的实例(转)&&线程间操作无效: 从不是创建控件“rtxtEntryNO”的线程访问它。
- C#中的Action<T>、Func<T>委托和Lambda表达式
- C#的委托与Delphi中的"事件委托"
- C# Action<T> 委托
- c# winform委托实例
- <转载>C#中的委托和事件(续)
- C# Note2:委托(delegate) & Lambda表达式 & 事件(event)
- [转摘] 关于C#中委托和事件机制的一个最佳实例
- C# 委托,事件 实例
- 【Unity基于C#事件委托机制,最轻松易懂的版本,一个实例解决你的困惑】
- c#中Action<T>和Func<T>委托
- C# 委托与事件实例说明(猫叫,老鼠逃,人醒)
- C#的委托 Action<>和Func<>
- c#的委托和事件的实例学习
- C#中委托和事件的一个简单实例
- C#==>委托
- c# 在SelectionChanged事件中,点击标题头{"未将对象引用设置到对象的实例。"}报错的解决办法。