微软推荐了一套写事件程序的标准,下面我来简单的演示一下,将要实现如下功能,进行一次for循环,没循环一次,触发一次是事件,将当前循环的次数输出,事件定义及实现类如下:
using System;
using System.Collections.Generic;
using System.Text;

namespace 事件
{
    
//定义委托,要注意委托名应以EventHandle结尾,参数应为object sender和IndexEventArgs e
    public delegate void MydelegateEventHandle(object sender,IndexEventArgs e);
    
//定义IndexEventArgs类,应作为EventArgs的子类

    
public class IndexEventArgs : EventArgs //EventArgs是包含事件数据的类的基类
    {
        
int index;
        
public IndexEventArgs(int i)
        
{
            index 
= i;
        }


        
public int Index
        
{
            
get return index; }
        }

    }

    
//定义功能类
    public class A
    
{
        
public event MydelegateEventHandle MyEvent;//定义事件委托
        public void count()
        
{
            
for (int i = 1; i < 101; i++)
            
{
                IndexEventArgs e 
= new IndexEventArgs(i);
                OnMyEvent(e);
//每循环一次,执行一次事件

            }

        }

        
        
//定义protected类型的虚方法,方法名应为事件委托名前面加“On”

        
protected virtual void OnMyEvent(IndexEventArgs e)
        
{
            
if (MyEvent != null)
            
{
                MyEvent(
this, e);
            }

        }

    }

}


主函数调用如下:
using System;
using System.Collections.Generic;
using System.Text;

namespace 事件
{
    
class Program
    
{
        
static void Main(string[] args)
        
{
            A a 
= new A();
            a.MyEvent 
+= new MydelegateEventHandle(a_MyEvent)//关联事件
            a.count();
        }


        
static void a_MyEvent(object sender, IndexEventArgs e)
        
{
            Console.WriteLine(e.Index);
        }

    }

}


请大家注意看注释中的命名规范,我要说明一点,建立一个虚方法来执行事件是为了方便的实现功能的增删只要再写一个子类,重写OnMyEvent方法就可以了。
posted on 2007-08-25 10:07  ATP.NET  阅读(377)  评论(0编辑  收藏  举报