<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> 看完http://www.tracefact.net/CSharp-Programming/Delegates-and-Events-in-CSharp.aspx 这一篇文章, 大致了解了委托的概念, 在此进行总结</span>
首先 满足一个需求, 根据客户需要用不同语言版本输出早上好, 如果用枚举代码会很复杂, 这里用委托会显得很简洁
委托代码:
namespace 委托实现测试
{
//定义委托
public delegate void GreetingDelegate(string name);
class Program
{
private static void EnglishGreeting(string name)
{
Console.WriteLine("morning, "+name);
}
private static void ChineseGreeting(string name)
{
Console.WriteLine("早上好, " + name);
}
//委托的具体内容实现
private static void GreetPeople(string name, GreetingDelegate maheGreeting)
{
maheGreeting(name);
}
static void Main(string[] args)
{
GreetPeople("Jimmy zhang", EnglishGreeting);
GreetPeople("张三", ChineseGreeting);
Console.ReadKey();
}
}
}
烧水的代码:
<pre name="code" class="csharp"> //核心烧水代码
// 假设我们有个高档的热水器,我们给它通上电,当水温超过95度的时候:1、扬声器会开始发出语音,告诉你水的温度;2、液晶屏也会改变水温的显示,来提示水已经快烧开了。
//现在我们需要写个程序来模拟这个烧水的过程,我们将定义一个类来代表热水器,我们管它叫:Heater,它有代表水温的字段,叫做temperature;当然,还有必不可少的给水加热方法BoilWater(),一个发出语音警报的方法MakeAlert(),一个显示水温的方法,ShowMsg()。
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(); //烧水,会自动调用注册过对象的方法
}
}
}
直接偷懒复制粘贴了许多代码, 不过具体的意思与思路一定要理解, 经常回来回顾吧