首页 | 互联网 | IT动态 | IT培训 | Cisco | Windows | Linux | Java | .Net | Oracle | 软件测试 | C/C++ | 嵌入式开发 | 存储世界 | 服务器
网络设备 | IDC | 安全 | 求职招聘 | 数字网校 | 网页设计 | 平面设计 | 技术专题 | 电子书下载 | 教学视频 | 源码下载 | 搜索 | 博客 | 论坛
中国IT实验室Dotnet频道
中国IT教育
Google
首页 ASP.NET  C#  XML/WebService ADO.NET VC.NET VB.NET .NET 资讯动态 专题 RSS订阅 讨论 下载
您现在的位置: 中国IT实验室 >> Dotnet >> C# >> 正文

C#中的委托和事件

  现在我们改写之前的范例,让它符合 .Net Framework 的规范:

以下为引用的内容:

 using System; using System.Collections.Generic; using System.Text;

namespace Delegate {

        // 热水器        public class Heater {

               private int temperature;

               public string type = "RealFire 001";

              // 添加型号作为演示

               public string area = "China Xian";

                     // 添加产地作为演示

               //声明委托

               public delegate void BoiledEventHandler(Object sender, BoliedEventArgs e);

               public event BoiledEventHandler Boiled; 

      //声明事件

              // 定义BoliedEventArgs类,传递给Observer所感兴趣的信息

               public class BoliedEventArgs : EventArgs {

                      public readonly int temperature;

                      public BoliedEventArgs(int temperature) {

                             this.temperature = temperature;

                      }

               }

              // 可以供继承自 Heater 的类重写,以便继承类拒绝其他对象对它的监视

               protected virtual void OnBolied(BoliedEventArgs e) {

                      if (Boiled != null) {

       // 如果有对象注册

                             Boiled(this, e);

       // 调用所有注册对象的方法

                      }

               }

                             // 烧水。

               public void BoilWater() {

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

                             temperature = i;

                             if (temperature > 95) { 

                                   //建立BoliedEventArgs 对象。

                                    BoliedEventArgs e = new BoliedEventArgs(temperature);

                                    OnBolied(e);       // 调用 OnBolied方法

                             }

                      }

               }

        }

       // 警报器        public class Alarm {

               public void MakeAlert(Object sender, Heater.BoliedEventArgs e) {

                      Heater heater = (Heater)sender; 

             //这里是不是很熟悉呢?

                      //访问 sender 中的公共字段

                      Console.WriteLine("Alarm:{0} - {1}: ", heater.area, heater.type);

                      Console.WriteLine("Alarm: 嘀嘀嘀,水已经 {0} 度了:", e.temperature);

                      Console.WriteLine(); 

              }

       }

       // 显示器        public class Display {

               public static void ShowMsg(Object sender, Heater.BoliedEventArgs e) {

       //静态方法

                      Heater heater = (Heater)sender; 

                     Console.WriteLine("Display:{0} - {1}: ", heater.area, heater.type);

                      Console.WriteLine("Display:水快烧开了,当前温度:{0}度。", e.temperature);

                      Console.WriteLine(); 

              }

        }

       class Program {

               static void Main() {

                      Heater heater = new Heater(); 

                     Alarm alarm = new Alarm();

                     heater.Boiled += alarm.MakeAlert;

       //注册方法

                      heater.Boiled += (new Alarm()).MakeAlert;

              //给匿名对象注册方法

                      heater.Boiled += new Heater.BoiledEventHandler(alarm.MakeAlert);

       //也可以这么注册

                      heater.Boiled += Display.ShowMsg; 

             //注册静态方法

                     heater.BoilWater();

       //烧水,会自动调用注册过对象的方法

               } 

       }

 }

 
输出为:

  以下为引用的内容: Alarm:China Xian - RealFire 001: Alarm: 嘀嘀嘀,水已经 96 度了: Alarm:China Xian - RealFire 001: Alarm: 嘀嘀嘀,水已经 96 度了: Alarm:China Xian - RealFire 001: Alarm: 嘀嘀嘀,水已经 96 度了: Display:China Xian - RealFire 001: Display:水快烧开了,当前温度:96度。 // 省略 ...


总结

  在本文中我首先通过一个GreetingPeople的小程序向大家介绍了委托的概念、委托用来做什么,随后又引出了事件,接着对委托与事件所产生的中间代码做了粗略的讲述。

  在第二个稍微复杂点的热水器的范例中,我向大家简要介绍了 Observer设计模式,并通过实现这个范例完成了该模式,随后讲述了.Net Framework中委托、事件的实现方式。

 

上一页  [1] [2] [3] [4] [5] [6] [7] [8] 

【责编:michael】

中国IT教育

相关产品和培训
文章评论
 友情推荐链接
 认证培训
 专题推荐

 ·WEB程序开发--ASP.NET和PHP、JSP究竟学哪个?
 ·五步带你入门XML
 ·关于Java框架技术专题
 ·XML全攻略技术专题
 ·JAVA开源技术介绍专题
 ·Java嵌入式开发之J2ME技术专题
 ·超前体验 Oracle 11g的5个新特性…
 ·揭密使用VB.NET的五个实用技巧
 ·Oracle和SQL Server常用函数对比专题…
 ·展现C#世界 C#程序设计专题…
 今日更新
 社区讨论
 博客论点
 频道精选
 Dotnet频道相关导航