一段 委托 和事件的例子
//本人是初学,看到一篇张子阳文章,照猫画虎的写了一遍,原文是英文,我喜欢中文写,所以就改了。using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 委托事件加强
{
class _热水器类
{
private int _温度;
public string _产地 = "锦州";
public string _型号 = "菊花-1";
public class _报警事件类:EventArgs
{
public readonly int _温度;
public _报警事件类 (int _温度)
{
this._温度 =_温度 ;
}
}
public delegate void _报警(object sender, _报警事件类 e);
public event _报警 _报警事件;
protected virtual void _发生报警事件(_报警事件类 e)
{
// 可以供继承自热水器类的类重写,以便继承类拒绝其他对象对它的监视
if (_报警事件 != null) _报警事件(this, e);// 调用所有注册对象的方法
}
public void _烧水方法()
{
for (int i = 0; i < 100; i++)
{
_温度 = i;
if (_温度 > 95)
{
_报警事件类 e = new _报警事件类(_温度 );
_发生报警事件(e);
}
}
}
}
class _声音报警类
{
public void _声音报警方法(object sender,_热水器类 ._报警事件类 e)
{
_热水器类 _热水器 = (_热水器类)sender;
Console.WriteLine("声音报警 产地{0}- 型号{1}: ", _热水器._产地, _热水器._型号);
Console.WriteLine("声音报警 嘀嘀嘀,水已经 {0} 度了:",e._温度 );
Console.WriteLine();
}
}
class _显示报警类
{
public static void _显示报警方法(object sender, _热水器类._报警事件类 e)
{
_热水器类 _热水器 = (_热水器类)sender;
Console.WriteLine("显示报警 产地 {0}- 型号 {1}", _热水器._产地, _热水器._型号);
Console.WriteLine("显示报警:水快烧开了,当前温度:{0}度。", e._温度 );
Console.WriteLine();
}
}
class Program
{
static void Main(string[] args)
{
_热水器类 _热水器 = new _热水器类();
_声音报警类 _声音报警 = new _声音报警类();
_热水器._报警事件 += _声音报警._声音报警方法;//注册方法
_热水器._报警事件 += (new _声音报警类())._声音报警方法;//给匿名对象注册方法
_热水器._报警事件 += new _热水器类._报警(_声音报警._声音报警方法);//也可以这么注册
_热水器._报警事件 += _显示报警类._显示报警方法;//注册静态方法
_热水器._烧水方法();//烧水,会自动调用注册过对象的方法
}
}
}
[[it] 本帖最后由 meisbrother 于 2008-12-6 08:28 编辑 [/it]]