zoukankan      html  css  js  c++  java
  • 事件委托DEMO

    View Code
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    
    namespace 事件DEMO
    {
        // 警报器
        public class Heater
        {
            private int temperature;
            public string type = "RealFire 001";       // 添加型号作为演示
            public string area = "China Xian";         // 添加产地作为演示
            //声明委托
            public delegate void BoiledEventHandler(Object sender, BoiledEventArgs e);
            public event BoiledEventHandler Boiled; //声明事件
    
            // 定义BoiledEventArgs类,传递给Observer所感兴趣的信息
            public class BoiledEventArgs : EventArgs
            {
                public readonly int temperature;
                public BoiledEventArgs(int temperature)
                {
                    this.temperature = temperature;
                }
            }
    
            // 可以供继承自 Heater 的类重写,以便继承类拒绝其他对象对它的监视
            protected virtual void OnBoiled(BoiledEventArgs e)
            {
                if (Boiled != null)
                { // 如果有对象注册
                    Boiled(this, e);  // 调用所有注册对象的方法
                }
            }
    
            // 烧水。
            public void BoilWater()
            {
                for (int i = 0; i <= 100; i++)
                {
                    temperature = i;
                    if (temperature > 95)
                    {
                        //建立BoiledEventArgs 对象。
                        BoiledEventArgs e = new BoiledEventArgs(temperature);
                        OnBoiled(e);  // 调用 OnBolied方法
                    }
                }
            }
        }
    
        // 警报器
        public class Alarm
        {
            public void MakeAlert(Object sender, Heater.BoiledEventArgs 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.BoiledEventArgs 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();   //烧水,会自动调用注册过对象的方法
            }
        }
    }

    事件

    View Code
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace 委托DEMO
    {
        class Program
        {
    
            static void Main(string[] args)
            {
                string Name="Anby";
                PeopleGreating(Name,EnglishGreating);
    
                Name = "小雨";
                PeopleGreating(Name, ChineseGreating);
    
                Console.Read();
            }
    
            delegate void Greating(string name);
            static void EnglishGreating(string name)
            {
                Console.WriteLine("Morning!"+name);
            }
            static void ChineseGreating(string name)
            {
                Console.WriteLine("早上好!" + name);
            }
            static void PeopleGreating(string name, Greating greating)
            {
                greating(name);
            }
        }
    }

    委托

  • 相关阅读:
    MongoDB 释放磁盘空间 db.runCommand({repairDatabase: 1 })
    RK 调试笔记
    RK Android7.1 拨号
    RK Android7.1 移植gt9271 TP偏移
    RK Android7.1 定制化 itvbox 盒子Launcher
    RK Android7.1 双屏显示旋转方向
    RK Android7.1 设置 内存条作假
    RK Android7.1 设置 蓝牙 已断开连接
    RK Android7.1 进入Camera2 亮度会增加
    RK 3128 调触摸屏 TP GT9XX
  • 原文地址:https://www.cnblogs.com/anbylau2130/p/2746397.html
Copyright © 2011-2022 走看看