最近给新人讲委托,就找到曾经不知道在哪个大神处弄的实例 通俗易懂
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication1
{
// 这里声明委托
public delegate void Notify( int newValue );
// 压力计
class Piezometer
{
// 压力值
private int m_PressureNumber;
public int PressureNumber
{
get
{
// 返回当前压力值
return this.m_PressureNumber;
}
set
{
// 设置新的压力值
this.m_PressureNumber = value;
// 判断是否有人注册该事件,如果有就调用并传入新的压力值。
if (OnPressureChanged != null)
{
// 这里就是DotNet框架实现的委托好处,它可以根据
// 声明的形式自动匹配调用的参数表和返回值。
// 调用回调事件,将新的压力值传入
OnPressureChanged.Invoke(value);
}
}
}
// 声明一个事件,当压力值变化的时候触发该事件
public event Notify OnPressureChanged;
}
// 报警器
class Alerter
{
// 设置监听的压力计
public void Listen(Piezometer piezometer)
{
// 注册压力计压力变化事件
piezometer.OnPressureChanged += new Notify(OnChanged);
}
// 这里就是压力计变化后调用的函数
public void OnChanged(int newValue)
{
// 打印出新的压力值
Console.WriteLine(string.Format("New PressureNumber is {0}.", newValue));
}
}
class Program
{
static void Main(string[] args)
{
Alerter alerter = new Alerter();
Piezometer piezometer = new Piezometer();
// 安装压力计,进行监听
alerter.Listen(piezometer);
// 设置新的压力值,报警器就会打印出新的压力值。
piezometer.PressureNumber = 10;
}
}
}