C#委托,事件(三)——事件

本文介绍了C#中的事件,通过观察者模式解释了事件的工作原理。文章以烧水为例,展示了如何使用事件进行组件间的通信。在烧水过程中,水壶和警报器通过事件进行交互,鸣笛和跳闸动作由事件触发。文章讨论了事件与委托的关系,并说明了为何在注册事件时使用“+=”而非“=”。最后,作者指出,理解C#的事件和委托对于初学者来说可能有一定难度,但一旦掌握,就能编写出更高质量的代码。
摘要由CSDN通过智能技术生成

目录

  1. 事件概述
  2. 观察者模式

上节中,我们从委托独自一方面进行了探究,本节将从事件独自一方面进行探究,希望能给大家留下有价值的信息。

  • 事件概述

有过MFC开发的朋友都知道,在学习MFC入门时研究的Windows消息机制是这样的——首先应用程序从WinMan函数进入消息监听循环(消息监听器)中,如果用户触发了某事件,消息监听器就将消息路由到过程函数(消息处理函数)中,处理事件相关的逻辑。

这就好比在窗体应用程序中,主窗体有一个按钮Bt01,当用户点击该按钮时, 系统就将用户单击按钮的动作作为消息push到消息队列中等待处理,当时间片轮到该消息处理时,系统就会路由到应用程序中调用已注册的过程函数处理逻辑。此处的过程函数就是我们通常编写的事件处理方法。

在面向对象的编程中,事件模式就有些不一样了。.NET库将Windows消息封装到事件中了,这样,在两个对象之间就可以通过事件来相互通信了,而委托就用作封装事件处理方法上,简单点,就是事件处理函数的注册。

  • 观察者模式

个人认为,该模式能清晰的描述事件的工作模式,下面就以烧水为例来进行详细的讲述。

现在,在烧水过程中主要有以下几个步骤:1.烧水,2.当水快烧开时鸣笛提示,3.鸣笛30秒后自动切断电源停止烧水,防止将水烧干。

因此,我们可以这样来设计代码:

    public class Heater
    {        
        private int timer; //水烧开后,鸣笛计时
        private Boolean boiling; //烧水开关

        /// <summary>
        /// 水壶烧水
        /// </summary>
        public void BoilWater()
        {
            int temp = 0;

            boiling = true;
            while (boiling)
            {
                if(temp <= 100)
                {
                    temp++;
                }
                else
                {                    
                    AlertTip();
                }

                if (timer == 30)
                {
                    
                    ShutDown();
                }
            }
        }

        /// <summary>
        /// 鸣笛警报,并计时
        /// </summary>
        private void AlertTip()
        {
            timer++;
            Console.WriteLine("Alarm:水快烧开了!");
        }

        /// <summary>
        /// 自动关闭,停止烧水
        /// </summary>
        private void ShutDown()
        {
            boil
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值