zoukankan      html  css  js  c++  java
  • C# 事件与委托

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 
     7 namespace ConsoleApplication
     8 {
     9     class Program
    10     {
    11         static void Main(string[] args) //客户端
    12         {
    13             Heater t = new Heater(); //初始化Heater类的实例
    14             t.Boiled += new BoiledEventHandler(new Monitor().Display);//在监视对象(热水器)中为观察者(显示器)实例方法事件的注册
    15             t.BoilingWater();//Heater类实例对Boiled事件的触发,以便更新观察者(显示器)中的数据
    16             Console.ReadKey();
    17         }
    18     }
    19 
    20     class BoiledEventArgs : EventArgs //事件类,存储观察者对监视对象(热水器)所感兴趣的字段(如Temperature)
    21     {
    22         public readonly int Tempurature;
    23         public BoiledEventArgs(int tempurature)
    24         {
    25             Tempurature = tempurature;
    26         }
    27     }
    28     delegate void BoiledEventHandler(object sender,BoiledEventArgs e); //定义一个委托
    29     class Heater //监视对象(热水器)
    30     {
    31         int _Temperature;//令观察者(显示器)感兴趣的字段:温度
    32         public string Brand = "Midea";
    33         public event BoiledEventHandler Boiled;//事件委托:观察者(显示器)对监视对象(热水器)所调用的方法
    34         protected virtual void OnBoiled(BoiledEventArgs e)
    35         {
    36             if (Boiled != null)
    37             {
    38                 Boiled(this, e);//事件绑定:如客户端(一般指Main函数)已有观察者(显示器)对监视对象(热水器)的事件(Boiled)进行订阅,
    39                                 //则进行对观察者(显示器)数据(Temperature:温度)的更新显示
    40             }
    41         }
    42 
    43         public void BoilingWater()
    44         {
    45             for (int i = 0; i <= 100; i++)
    46             {
    47                 _Temperature= i;
    48                 if (i > 90)
    49                 {
    50                     BoiledEventArgs e = new BoiledEventArgs(_Temperature);//事件类的构造函数,传递观察者(显示器)所感兴趣的字段(温度)
    51                     OnBoiled(e);//对Boiled事件进行触发,以便使观察者(显示器)数据(Temperature:温度)得到更新
    52                 }
    53             }
    54         }
    55     }
    56 
    57     class Monitor //观察者(显示器)
    58     {
    59         public void Display(object sender, BoiledEventArgs e)
    60         {
    61             Heater t = (Heater)sender;//sender,来自Heater类,可以对实例的字段等进行访问,
    62             Console.WriteLine("Brand is " + t.Brand);//如访问该热水器的品牌
    63             Console.WriteLine("Current temperature is " + e.Tempurature);//观察者(显示器)本身数据的更新显示
    64         }
    65     }
    66 }

    参考来自:http://www.cnblogs.com/jimmyzhang/archive/2007/09/23/903360.html

  • 相关阅读:
    1 绪论
    3.4 向量空间及其子空间的的基与维数
    3.3 极大线性无关组以及&向量的秩
    3.2 线性相关与线性无关的向量组
    3.1 n维向量空间及其子空间
    2.6 拉普拉斯定理
    2.5 克拉默法则
    2.4 行列式按行(列)展开
    2.3 行列式的性质
    2.2 n阶行列式的定义
  • 原文地址:https://www.cnblogs.com/cncc/p/3593292.html
Copyright © 2011-2022 走看看