//此程序从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;
}
}
}
//由此程序可以看出对事件的处理可以是类中的成员函数,也可以是单独的一个静态函数