一个C# 事件的简单例子

来源:互联网 发布:众途汽车软件 编辑:程序博客网 时间:2024/05/19 04:54

 

using System;

   
/*
    * 一个C# 事件的简单例子
  * 功能:当起床铃声响起,就引发学生起床/厨师做早餐两个事件
  * 设计很简单,目的是说明C# 中事件的含义
  
*/



// 定义一个委托
public delegate void DoSomething();

// 产生事件的类 
public class Ring
{
    
// 声明一个委托事件
    public event DoSomething doIt;

    
// 构造函数
    public Ring()
    
{
    }


    
// 定义一个方法,即"响铃"   引发一个事件
    public void RaiseEvent()
    
{
        Console.WriteLine(
"铃声响了.......");

        
// 通知 学生类,厨师类,该起床的起床,该做早餐的做早餐
        if (null != doIt)
        
{
            doIt(); 
//  如果有注册的对象,才调用它们的方法 
        }

    }

}


// 学生类( 处理事件类一)
public class HandleEventOfStudents
{
    
// 默认构造函数
    public HandleEventOfStudents()
    
{
    }


    
// 当听到起床铃响起,学生起床(学生太累了,想睡个安稳觉,它告诉“铃声类” :“我好好睡觉,时间到了,你再叫我起床”)
    
//学生把起床事件登记[委托]到铃声类,让铃声类来通知他起床,自己只管好好睡觉
    public void GetUp()
    
{
        Console.WriteLine(
"[学生]:听到起床铃声响了,起床了。");
    }

}


//  校园厨师类(处理事件类二)  
public class HandleEventOfChefs
{
    
// 默认构造函数
    public HandleEventOfChefs()
    
{
    }


    
// 当听到起床铃响起, 应该准备给学生做早餐了(当然厨师也可能能是早就起床了)  
    
// 厨师就把为学生做早餐的事情登记到[委托]到铃声类,让铃声来通知他什么时候做早饭,免得做早了(免得做早了,早餐凉了,做晚了,学生可能就吃不上早餐了) 
    public void Cook()
    
{
        Console.WriteLine(
"[厨师]:听到起床铃声响了,为学生做早餐。");
    }

}


// 主类
public class ListenerEvent
{
    
public static void Main(String[] args)
    
{
        Ring ring 
= new Ring(); // 实例化一个铃声类[它是主角,都是因为它才牵连一系列的动作]  
        ring.doIt += new HandleEventOfStudents().GetUp; // 告诉铃声类,我委托你什么时候叫我起床.
        ring.doIt += new HandleEventOfChefs().Cook;        // 告诉铃声类,我也委托你叫我什么时候做早餐

        ring.RaiseEvent(); 
// 你一响起,学生要起床,厨师要早餐,( 所以,大家都不喜欢听到这个铃声") 
    }

}
原创粉丝点击