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();
        }
    }

 

posted @ 2014-10-31 18:27  Net-Spider  阅读(211)  评论(0)    收藏  举报