事件实验程序

类别:.NET开发 点击:0 评论:0 推荐:

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

本文地址:http://com.8s8s.com/it/it42638.htm