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
}
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
}