C#支持事件简单描述

开发 后端
这里介绍C#支持事件,当前很多主流程序语言处理事件的方式各不相同,Delphi采用的是函数指针、Java用改编类来实现、VC用WindowsAPI的消息系统,而C#则直接使用delegate和event关键字来解决这个问题。

本文向大家介绍C#支持事件,可能好多人还不了解C#支持事件,没有关系,看完本文你肯定有不少收获,希望本文能教会你更多东西。

这里介绍C#支持事件(这个特点也是MSVJ所具有的),当前很多主流程序语言处理事件的方式各不相同,Delphi采用的是函数指针(这在Delphi中的术语是“closure”)、Java用改编类来实现、VC用WindowsAPI的消息系统,而C#则直接使用delegate和event关键字来解决这个问题。下面让我们来看一个例子,例子中会给大家举出声明、调用和处理事件的全过程。

  1. //首先是指代的声明,它定义了唤醒某个函数的事件信号  
  2. public delegate void ScoreChangeEventHandler (int newScore, ref bool cancel);  
  3.  
  4. //定义一个产生事件的类  
  5. public class Game  
  6. {  
  7. // 注意这里使用了event关键字  
  8. public event ScoreChangeEventHandler ScoreChange;  
  9. int score;  
  10. // Score 属性  
  11. public int Score  
  12. {  
  13. get {  
  14. return score;  
  15. }  
  16. set {  
  17. if (score != value)  
  18. {  
  19. bool cancel = false;  
  20. ScoreChange (value, ref cancel);  
  21. if (! cancel)  
  22. score = value;  
  23. }  
  24. }  
  25. }  
  26.  
  27.  
  28. // 处理事件的类  
  29. public class Referee  
  30. {  
  31. public Referee (Game game)  
  32. {  
  33. // 裁判负责调整比赛中的分数变化  
  34. game.ScoreChange += new ScoreChangeEventHandler (game_ScoreChange);  
  35. }  
  36.  
  37. // 注意这里的函数是怎样和ScoreChangeEventHandler的信号对上号的  
  38. private void game_ScoreChange (int newScore, ref bool cancel)  
  39. {  
  40. if (newScore < 100)  
  41. System.Console.WriteLine ("Good Score");  
  42. else  
  43. {  
  44. cancel = true;  
  45. System.Console.WriteLine ("No Score can be that high!");  
  46. }  
  47. }  
  48. }  
  49.  
  50. // 主函数类,用于测试上述特性  
  51. public class GameTest  
  52. {  
  53. public static void Main ()  
  54. {  
  55. Game game = new Game ();  
  56. Referee referee = new Referee (game);  
  57. game.Score = 70;  
  58. game.Score = 110;  
  59. }  
  60. }  

在主函数中,我们创建了一个game对象和一个裁判对象,然后我们通过改变比赛分数,来观察裁判对此会有什么响应。以上介绍C#支持事件。

【编辑推荐】

  1. C#线程同步详细分析
  2. C#探讨木马程序浅谈
  3. C# Pop3Connection类简介
  4. C#数据类型简单介绍
  5. C#计算素数序列浅谈
责任编辑:佚名 来源: 博客园
相关推荐

2009-09-02 17:38:16

C#泛型支持

2009-09-03 15:46:57

C#自定义事件

2009-08-31 18:32:01

C# ListBoxE

2009-08-12 18:28:09

C#事件处理程序

2009-08-19 10:09:21

C#和C++

2009-08-20 16:45:03

C#哈希值

2009-09-01 17:08:35

C# Color枚举

2009-09-03 16:55:58

C#引用类型

2009-08-27 10:01:52

C#自动属性

2009-08-21 17:31:58

C#垃圾回收

2009-09-02 13:01:11

C#多路广播

2009-08-28 09:30:48

C#命名属性

2009-09-01 18:25:32

C#结构实例

2009-09-07 14:33:02

C# switch语句

2009-08-13 17:58:34

C#存储过程

2009-09-16 09:01:40

C#多维数组

2009-09-03 10:19:12

C#表单控件

2009-08-31 17:53:20

C#实现索引器

2009-09-02 10:39:00

C#释放托管资源

2009-09-17 16:28:27

C#参差数组
点赞
收藏

51CTO技术栈公众号