//此程序从0到100计数,对偶数产生事件 using System;
namespace myevent { public delegate int EvenNumberHandler(int Number);//声明一个无返回值的以int型数为参数的委托 class Counter //声明计数器类 { public event EvenNumberHandler OnEventNumber;//声明一个EvenNumberHandler委托类型的事件
public Counter() { OnEventNumber=null; }
public void CountTo100() //公共方法,计数 { int temp; int currentnumber;
for (currentnumber=0;currentnumber<=100;currentnumber++) { if (currentnumber%2==0) { if (OnEventNumber!=null) { temp=OnEventNumber(currentnumber); Console.WriteLine(temp); } } } } }
/*class EventNumberHandleClass { public void EventNumberFound(int EventNumber) { Console.Write(EventNumber+" "); } }*/
class mainclass { /// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main(string[] args) { Counter MyCounter=new Counter(); //EventNumberHandleClass MyEventNumberHandle=new EventNumberHandleClass();
//MyCounter.OnEventNumber+=new EvenNumberHandler(MyEventNumberHandle.EventNumberFound);
MyCounter.OnEventNumber+=new EvenNumberHandler(MyCounter_OnEventNumber); //1.将MyCounter_OnEventNumber函数做为OnEventNumber事件的处理,也就是将MyCounter_OnEventNumber //函数“安装”到事件中! //2.这里对事件函数的调用不用参数表是因为有委托的存在,委托就相当于C++中的函数指针,它指向 //的是函数的首地址,所以不写参数表
MyCounter.CountTo100(); Console.ReadLine(); }
private static int MyCounter_OnEventNumber(int Number) //事件函数(对事件的处理) //此函数的返回值的类型和参数类型是由委托决定的,必须和委托的声明一致 { return Number; } } } //由此程序可以看出对事件的处理可以是类中的成员函数,也可以是单独的一个静态函数 
|