关于C#事件的理解

一、一个不错的例子

class FileFFF
    {
        public delegate void FileWatchEventHandler(object sender,EventArgs args);//当然事件必须有委托支撑,建立一个委托是必须的
        public event FileWatchEventHandler FileWatchEven;//这就是要声明的事件,其实就是委托类型的变量,前面加了一个event关键字       
        public void OnFileWatchEven(EventArgs e)//完成事件的触发,就是如何触发事件,写一个触发函数,和OnClick什么的差不多。这个写法一般都这样。
        {
            if (FileWatchEven!=null)
            {
                FileWatchEven(this, e);
            }
        }
        public void MonitorFile()
        {
           
            while (true)
            {
              
                if (XXXXXXXX)
                {
                   
                    OnFileWatchEven(EventArgs.Empty); 
                    //这个就是什么时候触发该事件,这个就是功能了,一般都是函数内部,就是执行此方法时候触发的这个事件,当然触发这个事件后该怎么处理,那是在其他处完成的
                   
                }

               
            }
        }
    }

 

我们之前已经对委托和事件介绍很多了,现在写代码应该很容易了,现在在这里直接给出代码,并在注释中加以说明

using System;

using System.Collections.Generic; 

using System.Text;
namespace Delegate

{     // 热水器  

   public class Heater

 {        private int temperature;    

    public delegate void BoilHandler(int param);  //声明委托      

  public event BoilHandler BoilEvent;//声明事件
       // 烧水     

  public void BoilWater() 

{          

  for (int i = 0; i <= 100; i++) 

{             

  temperature = i;
             

 if (temperature > 95)

{               

    if (BoilEvent != null) { //如果有对象注册  

         BoilEvent(temperature);  //调用所有注册对象的方法    

       }           

    }        

    }       

}   

  }
    // 警报器  
   public class Alarm 
{     
   public void MakeAlert(int param)
 {          
  Console.WriteLine("Alarm:嘀嘀嘀,水已经 {0} 度了:", param);    
    }   
  }
    // 显示器    
public class Display { 
 public static void ShowMsg(int param)
 { //静态方法            
Console.WriteLine("Display:水快烧开了,当前温度:{0}度。", param);  
  }    
 }         
 class Program
 {      
           static void Main() 
             {        
            Heater heater = new Heater();     
             Alarm alarm = new Alarm();
           heater.BoilEvent += alarm.MakeAlert;    //注册方法     
            heater.BoilEvent += (new Alarm()).MakeAlert;   //给匿名对象注册方法   
           heater.BoilEvent += Display.ShowMsg;       //注册静态方法
           heater.BoilWater();   //烧水,会自动调用注册过对象的方法       
              }   
           } } 
输出为: Alarm:嘀嘀嘀,水已经 96 度了: Alarm:嘀嘀嘀,水已经 96 度了: Display:水快烧开了,当前温度:96度。 // 省略...

 http://blog.csdn.net/jamestaosh/article/details/4372172

 

posted @ 2014-07-11 11:47  GavinJune  阅读(347)  评论(0编辑  收藏  举报