首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

高速理解C#高级概念(二) 事件与委托的区别

2012-12-23 
快速理解C#高级概念(二) 事件与委托的区别根据上篇博文的反响我想向大家说明,因为本人时间有限加上才疏学

快速理解C#高级概念(二) 事件与委托的区别

根据上篇博文的反响我想向大家说明,因为本人时间有限加上才疏学浅,无法写出面面俱到的博文。我只是把自己经历的觉得有些意义的技术点分享出来,希望大家见谅。当然,我不会让大家走上歧途的。所有示例都是亲测。

今天我想讨论一下事件与委托之间的联系。很多人说,事件即委托。真的是这样吗?那么微软为何又要定义事件与委托两个概念呢?
其实事件即委托,在我看来不如这样解释:事件是封装过的委托实例。也就是说,事件是面向对象的产物,它是封装性比较典型的示例。

首先我们来看一下事件的定义以及调用:

我们再看看,如果我们将使用委托来实现上述方法:

 public class Heater     {        private int temperature;        public void BoilWater()         {            for (int i = 1; i <= 100; i++)             {                temperature = i;                if (temperature > 95 && BoilEvent != null)                 {                    //执行委托,无需知道要执行哪些方法                    BoilEvent(temperature);                }            }        }        public delegate void BoilHandle(int param);        public event BoilHandle BoilEvent;//封装了委托    }    public class Alarm     {        public void MakeAlert(int param)         {            Console.WriteLine("Alarm:水温已经超过{0}度.",param);        }    }    public class Display    {        public void ShowMsg(int param)        {            Console.WriteLine("Display:水已烧开,当前温度{0}度.", param);        }    }    [TestClass]    public class UnitTest1    {        [TestMethod]        public void TestMethod1()        {            Heater heater = new Heater();            Alarm alarm = new Alarm();            heater.BoilEvent += alarm.MakeAlert;            heater.BoilEvent += new Display().ShowMsg;            heater.BoilWater();        }    }

更多WEB开发技术请加群:Asp.Net高级群 号码:261882616  博主以及同事和你共同探讨感兴趣的话题。

热点排行