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
        {
            //执行-=运算符的代码
        }
    }
  • 相关阅读:
    javascript里面this机制的几个例子
    把List<string>集合,编程string,并以“,”号分割
    比较集合List<T>集合,前后多了哪些数据,少了哪些数据Except
    c# Web.config中 windows连接数据库
    MVC之图片验证码
    匿名函数-简单实例
    c# 如何找到项目中图片的相对路径
    MVC下 把数据库中的byte[]值保存成图片,并显示在view页面
    MVC下form表单一次上传多种类型的图片(每种类型的图片可以上传多张)
    关于Visual Studio未能加载各种Package包的解决
  • 原文地址:https://www.cnblogs.com/AlinaL/p/12852171.html
Copyright © 2011-2022 走看看