例子:用委托实现事件

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
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值