委托与事件 --转载 http://www.tracefact.net/

代码
using  System;
using  System.Collections.Generic;
using  System.Text;

namespace  Delegates_and_Events_in_CSharp
{
    
//  热水器
     public   class  Heater
    {
        
private   int  temperature;
        
public   string  type  =   " RealFire 001 " ;        //  添加型号作为演示
         public   string  area  =   " China Xian " ;          //  添加产地作为演示
        
// 声明委托
         public   delegate   void  BoiledEventHandler(Object sender, BoiledEventArgs e);
        
public   event  BoiledEventHandler Boiled;  // 声明事件

        
//  定义BoiledEventArgs类,传递给Observer所感兴趣的信息
         public   class  BoiledEventArgs : EventArgs
        {
            
public   readonly   int  temperature;
            
public  BoiledEventArgs( int  temperature)
            {
                
this .temperature  =  temperature;
            }
        }

        
//  可以供继承自 Heater 的类重写,以便继承类拒绝其他对象对它的监视
         protected   virtual   void  OnBoiled(BoiledEventArgs e)
        {
            
if  (Boiled  !=   null )
            { 
//  如果有对象注册
                Boiled( this , e);   //  调用所有注册对象的方法
            }
        }

        
//  烧水。
         public   void  BoilWater()
        {
            
for  ( int  i  =   0 ; i  <=   100 ; i ++ )
            {
                temperature 
=  i;
                
if  (temperature  >   95 )
                {
                    
// 建立BoiledEventArgs 对象。
                    BoiledEventArgs e  =   new  BoiledEventArgs(temperature);
                    OnBoiled(e);  
//  调用 OnBolied方法
                }
            }
        }
    }

    
//  警报器
     public   class  Alarm
    {
        
public   void  MakeAlert(Object sender, Heater.BoiledEventArgs e)
        {
            Heater heater 
=  (Heater)sender;      // 这里是不是很熟悉呢?
            
// 访问 sender 中的公共字段
            Console.WriteLine( " Alarm:{0} - {1}:  " , heater.area, heater.type);
            Console.WriteLine(
" Alarm: 嘀嘀嘀,水已经 {0} 度了: " , e.temperature);
            Console.WriteLine();
        }
    }

    
//  显示器
     public   class  Display
    {
        
public   static   void  ShowMsg(Object sender, Heater.BoiledEventArgs e)
        {   
// 静态方法
            Heater heater  =  (Heater)sender;
            Console.WriteLine(
" Display:{0} - {1}:  " , heater.area, heater.type);
            Console.WriteLine(
" Display:水快烧开了,当前温度:{0}度。 " , e.temperature);
            Console.WriteLine();
        }
    }

    
class  Program
    {
        
static   void  Main()
        {
            Heater heater 
=   new  Heater();
            Alarm alarm 
=   new  Alarm();

            heater.Boiled 
+=  alarm.MakeAlert;    // 注册方法
            heater.Boiled  +=  ( new  Alarm()).MakeAlert;       // 给匿名对象注册方法
            heater.Boiled  +=   new  Heater.BoiledEventHandler(alarm.MakeAlert);     // 也可以这么注册
            heater.Boiled  +=  Display.ShowMsg;        // 注册静态方法

            heater.BoilWater();   
// 烧水,会自动调用注册过对象的方法
            Console.ReadKey();
        }
    }


}

 

转载于:https://www.cnblogs.com/oneroom/archive/2010/03/17/delegate_event.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值