委托

EventArgs是包含事件数据的基类,此类不包含事件数据,在事件引发时不向事件处理程序传递状态信息的事件会使用此类。

如果事件处理程序需要状态信息,则必须从此类派生一个类来保存数据。

 

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值