关于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

浙公网安备 33010602011771号