分享

例子:用委托实现事件

 空城66 2014-12-20
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
namespace MyDelegate
{
    #region 委托实现事件
    //定义委托处理程序
    public delegate void PlayGameHandler(object sender, System.EventArgs e);
    //员工,可能玩游戏的人
    public class 员工
    {
        //先定义一个事件,这个事件表示“员工”在玩游戏
        public event PlayGameHandler PlayGame;
        //员工的称呼
        private string m_Name;
        //员工的工资
        private int m_Money;
        //构造函数
        public 员工(string name)
        {
            Console.WriteLine("生成员工 " + name + "...");
            m_Name = name;
            m_Money = 1000;
        }
        //此属性得到员工的称呼
        public string 称呼
        { get { return m_Name; } }
        //此属性可操作员工的工资
        public int 钱
        {
            get { return m_Money; }
            set { m_Money = value; }
        }
        //引发事件的“玩游戏”方法。为了引发PlayGame这个事件,必须指定此方法来引发它,其中包括 OnPlayGame(e)
        public void 玩游戏()
        {
            Console.WriteLine(m_Name + "开始玩游戏了...");
            Console.WriteLine(m_Name + ":CS好玩,哈哈哈!我玩...");
            System.Threading.Thread.Sleep(500);
            System.EventArgs e = new EventArgs();
            OnPlayGame(e);
        }
        //实现OnPlayGame(e)
        
//protected virtual void OnPlayGame(System.EventArgs e)
        protected void OnPlayGame(System.EventArgs e)
        {
            if (PlayGame != null)
                PlayGame(this, e);
        }
    }
    //负责扣钱的人
    public class 老板
    {
        //构造函数
        public 老板()
        {
            Console.WriteLine("生成老板...");
        }
        public void 扣钱(object sender, EventArgs e)
        {
            Console.WriteLine("老板:好小子,上班时间胆敢玩游戏...");
            Console.WriteLine("老板:看看你小子有多少钱...");
            员工 f = (员工)sender;    /*这个代码表示让老板扣员工的钱,那么,老板扣钱的时候,必须要操作员工的对象实例。
              参数object sender对象表示激发事件的对象,在这个程序里面就表示这个sender其实是员工
*/
            Console.WriteLine(f.称呼 + "的钱:" + f.钱.ToString());
            Console.WriteLine("开始扣钱...");
            System.Threading.Thread.Sleep(500);
            f.钱 = f.钱 - 500;
            Console.WriteLine("扣完了...现在" + f.称呼 + "还剩下:" + f.钱.ToString());
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("剧情开始了...");
            老板 boss = new 老板(); //老板
            员工 employee = new 员工("小张");   //员工小张
            
//指定监视,即设定发现小张玩游戏后采取的行动——扣钱
            employee.PlayGame += new PlayGameHandler(boss.扣钱);
            //小张开始玩游戏,浑然不知老板就在身后
            employee.玩游戏();
            //结果钱被扣掉,歇菜
            Console.WriteLine("剧情结束...");
            Console.ReadLine();
        }
    }
    
    #endregion
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多