在今天的C#入门笔记中,我们介绍下C#中的事件与委托,通过具体的例子来学习。
一个关于委托和事件的实例,
首先,定义一个员工类,当这个员工下班时会自动通知他的经理,并通知时间管理机能来记录下班时间,
同时,继承一个消息类,用来记录自定义的内容: 给经理的留言或下班的时间等。
1,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);
}
}
}
2,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;
}
}
3,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);
}
}
4,Timer.cs时间类
复制代码 代码示例:
/// <summary>
/// 时间管理 www.jbxuecom
/// </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());
}
}
5,调用示例
复制代码 代码示例:
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();
}
}