打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
例子:用委托实现事件
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
}
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
通俗的事件委托解释
面试中的事件
.net的事件与委托(转载)
多线程Demo
C#:代表(delegate)和事件(event) (转)
C#事件的简单认识1
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服