关于C#事件的理解

一、一个不错的例子

复制代码
class FileFFF
    {
        public delegate void FileWatchEventHandler(object sender,EventArgs args);//当然事件必须有委托支撑,建立一个委托是必须的
        public event FileWatchEventHandler FileWatchEven;//这就是要声明的事件,其实就是委托类型的变量,前面加了一个event关键字       
        public void OnFileWatchEven(EventArgs e)//完成事件的触发,就是如何触发事件,写一个触发函数,和OnClick什么的差不多。这个写法一般都这样。
        {
            if (FileWatchEven!=null)
            {
                FileWatchEven(this, e);
            }
        }
        public void MonitorFile()
        {
           
            while (true)
            {
              
                if (XXXXXXXX)
                {
                   
                    OnFileWatchEven(EventArgs.Empty); 
                    //这个就是什么时候触发该事件,这个就是功能了,一般都是函数内部,就是执行此方法时候触发的这个事件,当然触发这个事件后该怎么处理,那是在其他处完成的
                   
                }

               
            }
        }
    }
复制代码

 

我们之前已经对委托和事件介绍很多了,现在写代码应该很容易了,现在在这里直接给出代码,并在注释中加以说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
using System;
 
using System.Collections.Generic;
 
using System.Text;
namespace Delegate
 
{     // 热水器 
 
   public class Heater
 
 {        private int temperature;   
 
    public delegate void BoilHandler(int param);  //声明委托     
 
  public event BoilHandler BoilEvent;//声明事件
       // 烧水    
 
  public void BoilWater()
 
{         
 
  for (int i = 0; i <= 100; i++)
 
{            
 
  temperature = i;
              
 
 if (temperature > 95)
 
{              
 
    if (BoilEvent != null) { //如果有对象注册 
 
         BoilEvent(temperature);  //调用所有注册对象的方法   
 
       }          
 
    }       
 
    }      
 
}  
 
  }
    // 警报器 
   public class Alarm
{    
   public void MakeAlert(int param)
 {         
  Console.WriteLine("Alarm:嘀嘀嘀,水已经 {0} 度了:", param);   
    }  
  }
    // 显示器   
public class Display {
 public static void ShowMsg(int param)
 { //静态方法           
Console.WriteLine("Display:水快烧开了,当前温度:{0}度。", param); 
  }   
 }        
 class Program
 {     
           static void Main()
             {       
            Heater heater = new Heater();    
             Alarm alarm = new Alarm();
           heater.BoilEvent += alarm.MakeAlert;    //注册方法    
            heater.BoilEvent += (new Alarm()).MakeAlert;   //给匿名对象注册方法  
           heater.BoilEvent += Display.ShowMsg;       //注册静态方法
           heater.BoilWater();   //烧水,会自动调用注册过对象的方法      
              }  
           } }
输出为: Alarm:嘀嘀嘀,水已经 96 度了: Alarm:嘀嘀嘀,水已经 96 度了: Display:水快烧开了,当前温度:96度。 // 省略...

 http://blog.csdn.net/jamestaosh/article/details/4372172

 

posted @   GavinJune  阅读(349)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示