本文向大家介绍C#支持事件,可能好多人还不了解C#支持事件,没有关系,看完本文你肯定有不少收获,希望本文能教会你更多东西。
这里介绍C#支持事件(这个特点也是MSVJ所具有的),当前很多主流程序语言处理事件的方式各不相同,Delphi采用的是函数指针(这在Delphi中的术语是“closure”)、Java用改编类来实现、VC用WindowsAPI的消息系统,而C#则直接使用delegate和event关键字来解决这个问题。下面让我们来看一个例子,例子中会给大家举出声明、调用和处理事件的全过程。
- //首先是指代的声明,它定义了唤醒某个函数的事件信号
- public delegate void ScoreChangeEventHandler (int newScore, ref bool cancel);
- //定义一个产生事件的类
- public class Game
- {
- // 注意这里使用了event关键字
- public event ScoreChangeEventHandler ScoreChange;
- int score;
- // Score 属性
- public int Score
- {
- get {
- return score;
- }
- set {
- if (score != value)
- {
- bool cancel = false;
- ScoreChange (value, ref cancel);
- if (! cancel)
- score = value;
- }
- }
- }
- // 处理事件的类
- public class Referee
- {
- public Referee (Game game)
- {
- // 裁判负责调整比赛中的分数变化
- game.ScoreChange += new ScoreChangeEventHandler (game_ScoreChange);
- }
- // 注意这里的函数是怎样和ScoreChangeEventHandler的信号对上号的
- private void game_ScoreChange (int newScore, ref bool cancel)
- {
- if (newScore < 100)
- System.Console.WriteLine ("Good Score");
- else
- {
- cancel = true;
- System.Console.WriteLine ("No Score can be that high!");
- }
- }
- }
- // 主函数类,用于测试上述特性
- public class GameTest
- {
- public static void Main ()
- {
- Game game = new Game ();
- Referee referee = new Referee (game);
- game.Score = 70;
- game.Score = 110;
- }
- }
在主函数中,我们创建了一个game对象和一个裁判对象,然后我们通过改变比赛分数,来观察裁判对此会有什么响应。以上介绍C#支持事件。
【编辑推荐】