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
}
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。