zoukankan      html  css  js  c++  java
  • C#学习笔记之——事件(Event)

    发布器(publisher) 是一个包含事件和委托定义的对象。事件和委托之间的联系也定义在这个对象中。发布器(publisher)类的对象调用这个事件,并通知其他的对象。

    订阅器(subscriber) 是一个接受事件并提供事件处理程序的对象。在发布器(publisher)类中的委托调用订阅器(subscriber)类中的方法(事件处理程序)。

    事件处理程序(event handler)由订阅者注册到事件的方法,在发布者触发事件时执行。

    触发(raise)事件 调用(invoke)或者触发(fire)事件的术语。当事件触发时,所有注册到它的方法都会依次调用。

    声明事件的委托类型

    public delegate void BoilerLogHandler(string status);

    声明事件本身

    // 基于上面的委托定义事件
    public event BoilerLogHandler BoilerEventLog;

    例子:

    热水器类

    public delegate void WatchdogDelegate();//委托类型声明
    
    /// <summary>
    /// 热水器类Water heater.
    /// </summary>
    public class WaterHeater
    {
    
        public event WatchdogDelegate watchdogDelegateEvent;//事件声明
    
        private int temperature = 3;//基础温度
    
        public void HeatUpWater()
        {
            while (temperature < 95)
            {
                //不动3s 需要System.Threading
                Thread.Sleep(2000);
                temperature += 10;
                Console.WriteLine("Temperature:{0}", temperature);
            }
            watchdogDelegateEvent();
        }
    }
    


    警报器类

    public class Annunciator
    {
        public void Alert()
        {
            Console.WriteLine("!!!!!!!!!");
        }
    }


    显示器类

    public class Display
    {
    	public void Show ()
        {
    		Console.WriteLine ("It is over 95°");
    	}
    }
    //建立对象
    WaterHeater waterHeater = new WaterHeater();
    Display display = new Display();
    Annunciator annunciator = new Annunciator();
    
    //添加方法
    waterHeater.watchdogDelegateEvent += display.Show;
    waterHeater.watchdogDelegateEvent += annunciator.Alert;
    
    waterHeater.HeatUpWater();

    结果:

    Temperature:13

    Temperature:23

    Temperature:33

    Temperature:43

    Temperature:53

    Temperature:63

    Temperature:73

    Temperature:83

    Temperature:93

    Temperature:103

    It is over 95°

    !!!!!!!!!

    移除事件 -=,添加事件 +=

    事件访问器

    public event EventHandler CountedADozen
    {
        add
        {
            //执行+=运算符的代码
        }
        remove
        {
            //执行-=运算符的代码
        }
    }
  • 相关阅读:
    DNS智能解析的搭建与配置
    使用dnsmasq快速搭建内网DNS
    安装Fedora 21工作站后要做的10件事情
    MySQL + KeepAlived + LVS 单点写入主主同步高可用架构实验
    SOC-EDS之DS5安装和破解
    vs2015安装与卸载
    opencv实现的图像缩放
    基于Haar+Adaboost的人脸识别
    win10+python3.7+Anaconda3+CUDA10.0+cuDNN7.5+tensorflow_gpu1.13.1+opencv4.1.0 教程(最新)
    图片合成视频
  • 原文地址:https://www.cnblogs.com/AlinaL/p/12852171.html
Copyright © 2011-2022 走看看