经典的的自定义事件参数例子

来源:互联网 发布:软件使用权摊销年限 编辑:程序博客网 时间:2024/04/30 14:27

//比较经典的 .net 自带的事件参数例子,通过了四个类
火灾事件参数类(FireEventArgs),火灾事件告警类(FireAlarm)和
火灾事件处理类(FireHandlerClass),最后通过类 FireEventTest
演示了事件的处理


using System;

// FireEventArgs: a custom event inherited from EventArgs.
//

public class FireEventArgs: EventArgs
{
    public FireEventArgs(string room, int ferocity) {
        this.room = room;
        this.ferocity = ferocity;
    }

    // The fire event will have two pieces of information--
    // 1) Where the fire is, and 2) how "ferocious" it is. 

    public string room;
    public int ferocity;

}    //end of class FireEventArgs


// Class with a function that creates the eventargs and initiates the event
public class FireAlarm {

    // Events are handled with delegates, so we must establish a FireEventHandler
    // as a delegate:

    public delegate void FireEventHandler(object sender, FireEventArgs fe);

    // Now, create a public event "FireEvent" whose type is our FireEventHandler delegate.

    public event FireEventHandler FireEvent;   

    // This will be the starting point of our event-- it will create FireEventArgs,
    // and then raise the event, passing FireEventArgs.

    public void ActivateFireAlarm(string room, int ferocity) {

        FireEventArgs fireArgs = new FireEventArgs(room, ferocity);

        // Now, raise the event by invoking the delegate. Pass in
        // the object that initated the event (this) as well as FireEventArgs.
        // The call must match the signature of FireEventHandler.

        FireEvent(this, fireArgs);
    }
}    // end of class FireAlarm


// Class which handles the event

class FireHandlerClass {

    // Create a FireAlarm to handle and raise the fire events.

    public FireHandlerClass(FireAlarm fireAlarm)    {

        // Add a delegate containing the ExtinguishFire function to the class'
        // event so that when FireAlarm is raised, it will subsequently execute
        // ExtinguishFire.

        fireAlarm.FireEvent += new FireAlarm.FireEventHandler(ExtinguishFire);
    }

    // This is the function to be executed when a fire event is raised.
 
    void ExtinguishFire(object sender, FireEventArgs fe) {

        Console.WriteLine("/nThe ExtinguishFire function was called by {0}.", sender.ToString());

        // Now, act in response to the event.

        if (fe.ferocity < 2)
            Console.WriteLine("This fire in the {0} is no problem.  I'm going to pour some water on it.", fe.room);
        else if (fe.ferocity < 5)
            Console.WriteLine("I'm using FireExtinguisher to put out the fire in the {0}.",  fe.room);
        else
            Console.WriteLine("The fire in the {0} is out of control.  I'm calling the fire department!", fe.room);
    }
}    //end of class FireHandlerClass

public class FireEventTest {
    public static void Main ()     {   

        // Create an instance of the class that will be firing an event.

        FireAlarm myFireAlarm = new FireAlarm();
       
        // Create an instance of the class that will be handling the event. Note that
        // it receives the class that will fire the event as a parameter.

        FireHandlerClass myFireHandler = new FireHandlerClass(myFireAlarm);
       
        //use our class to raise a few events and watch them get handled
        myFireAlarm.ActivateFireAlarm("Kitchen", 3);
        myFireAlarm.ActivateFireAlarm("Study", 1);
        myFireAlarm.ActivateFireAlarm("Porch", 5);
       
        return;

    }    //end of main

}    // end of FireEventTest