C# 事件与委托

摘要:
1使用系统;2使用System.Collections。通用的3使用系统。Linq;4使用系统。文本5使用System.Threading。任务;67namespaceConsoleApplication8{9classProgram10{11staticvoidMain(string〔〕args)//客户端12{13He
 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

免责声明:文章转载自《C# 事件与委托》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇git clone新项目后如何拉取分支代码到本地zookeeper leader选举机制下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

分辨率与行场同步信号的关系

当CRT显示器显示一幅图像时,电子枪是从左到右、从上到下来扫描屏幕的。由电子枪打出的电子经由偏转线圈的偏转得以打到屏幕的不同点上。电子束在从左到右扫描完一行后,需要回到起始方向进行下一行的扫描,这个返回的工作由回程转换器来完成。         这一系列动作要想很精确,就得使电子枪、偏转线圈、回程转换器协同(同步)工作。为了达到这个目标,我们需要两个...

【原创】【js】screenLeft screenTop screenX screenY属性的有效性和兼容性研究

chrome浏览器(51.0.2704.106 m) 整个浏览器相对于主显示器屏幕的位置 虽然还原状态时有边缘,但是最大化时两个值都为0 IE浏览器(IE11): 浏览器文档区域相对于主显示器屏幕的位置 最大化时left值是0,top值是55 还原状态时left和top始终为正值,因为左右两侧有边缘 Opera浏览器(38.0.2220.41): 整...

关于对VGA、DVI、HDMI的区别

VGA接口: DVI接口: HDMI接口 可以这么理解: 1. VGA传输普通视频信号,DVI传输高清视频信号,HDMI传输高清视频信号并支持音频传输。2. HDMI的三种接口只有大小区别,功能没有任何区别,主要是为了兼容各种设备。3. DVI接口有25针和29针,效果都一样,但是大家在购买的时候一定要注意区分。其实最开始自己也不怎么关注显示器的接口,...

intel英特尔NUC主机bug大清除案例

如果你的NUC进入HDMI无法在显示器显示,可以参考此文章的思路,尝试排除各种问题。接下来我讲述一下我的NUCbug清除历程。 我的NUC激动时刻 我的NUC是这个型号,直接上图了:英特尔(Intel)NUC10i5FNH6 NUC迷你电脑主机 没有内存没有硬盘的 这个NUC刚买回来,自信心满满,结果在同事面前翻车了,在HDMI 转VGA不显示,换了转...

linux 视频输出xrandr设置命令

linux 视频输出xrandr设置命令 沈祥佑关注 0.592019.03.28 17:44:09字数 397阅读 6,886 xrandr 不带参数的xrandr 命令会列出系统支持的视频接口名称和设备连接情况,还可以从输出信息里看到当前分辨率current,以及支持的最大分辨率。带*的表示当前分辨率。 $xrandr Screen 0: m...

Ubuntu下双显示器设定

自8.10后的版本,系统自带了xrandr工具,可以很好的实现双显示器。配置与使用如下: 介绍    X Windows 中有一个显示分辨率的概念,在默认情况下,这个显示分辨率为 max*max ,max等于你的所有连接上的显示器中最大分辨率中的最大值。例如我的笔记本液晶屏最大分辨率为 1024*768,外接显示器最大分辨率为 1280*1024,则...