我对委托与事件就单独的编写程序而言做个简单的步骤总结:

1、首先要写一个类来继承EventArgs类,这个类是系统提供的,我们继承这个类的目的就是为以后触发事件的来存储事件的相关信息。

2、写事件发生类:

首先,这个类中要创建一个委托,这个委托的返回值是void,参数分别是object sender和EventArgs e ,object类型的参数代表了监视变量,EventArgs参数包含的是事件的信息(数据)。

其次,声明一个事件并将其与上面创建的委托相关联。

最后,写具体的方法,方法中的的某些条件满足事件触发条件时候就将事件中的信息存储进EventArgs对象中,并触发事件。

3、写事件接收类:

这个类要实现的功能就是将处理事件的“事件处理方法”与具体的事件关联起来,即将方法注册到事件中。

首先,要产生一个委托实例并添加到产生的事件列表中。

其次,写具体的事件处理方法。

4、在主函数中创建事件产生类、事件接受类的对象,并调用事件产生类的方法来触发事件。

(这只是我个人对委托和事件在应用上的步骤的一点浅薄理解,有不妥之处望高手指教,另附一个例子程序-转载的程序,认为比较好!)

附:

using System;
using System.Collections.Generic;
using System.Text;

namespace DelegateAndEvent
{
    /// <summary>
    ///1、首先创建一个自己的EventArgs类。用于存储事件发生时候的事件信息。
    ///引自MSDN:EventArgs是包含事件数据的类的基类,此类不包含事件数据,在事件引发时不向事件处理程序传递状态信息的事
    ///件会使用此类。如果事件处理程序需要状态信息,则应用程序必须从此类派生一个类来保存数据。
    ///因为在我们键盘按键事件中要包含按键信息,所以要派生一个KeyEventArgs类,来保存按键信息,好让后面知道按了哪个键。
    /// </summary>

    internal class KeyEventArgs : EventArgs
{
    private char keyChar;
    public KeyEventArgs( char keyChar )
    {
        this.keyChar = keyChar;
    }

    public char KeyChar
    {
        get
        {
            return keyChar;
        }
    }
}
   
   
   
   
   
/// <summary>
/// 2、再创建一个事件发生的类KeyInputMonitor,这个类用于监控键盘按键的输入并触发一个事件:
/// <summary>
internal class KeyInputMonitor
{
    // 创建一个委托,返回类型为void,两个参数
    public delegate void KeyDown( object sender, KeyEventArgs e );
    // 将创建的委托和特定事件关联,在这里特定的事件为OnKeyDown
    public event KeyDown OnKeyDown;

    public void Run()
    {
        bool finished = false;
        do
        {
            Console.WriteLine( "Input a char" );
            string response = Console.ReadLine();

            char responseChar = ( response == "" ) ? ' ' : char.ToUpper( response[0] );
            switch( responseChar )
            {
                case 'X':
                    finished = true;
                    break;
                default:
                    // 得到按键信息的参数
                    KeyEventArgs keyEventArgs = new KeyEventArgs( responseChar );
                    // 触发事件
                   
                    OnKeyDown( this, keyEventArgs );
                    /// <summary>
                    ///这里注意OnKeyDown( this, KeyEventArgs );一句,这就是触发事件的语句,
                    /// 并将事件交由KeyDown这个委托来处理,委托指定事件处理方法去处理事件,
                    /// 这就是事件接收方的类的事情了。参数this是指触发事件的对象就是本身这个对象,
                    /// keyEventArgs包含了按键信息。
                    /// <summary>
                    break;
            }
        }while( !finished );
    }
}
   

   
/// <summary>
///3、最后创建一个事件接收方的类,这个类先产生一个委托实例,
/// 再把这个委托实例添加到产生事件对象的事件列表中去,
/// 这个过程又叫订阅事件。然后提供一个方法回显按键信息。
/// <summary>
    internal class EventReceiver
{
    public EventReceiver( KeyInputMonitor monitor )
    {
      
        // 产生一个委托实例并添加到KeyInputMonitor产生的事件列表中
        monitor.OnKeyDown += new KeyInputMonitor.KeyDown( this.Echo );
    }

   
    private void Echo(object sender, KeyEventArgs e)
    {
        // 真正的事件处理函数
        Console.WriteLine( "Capture key: {0}", e.KeyChar );
    }
}
    /// <summary>
    ///4、看一下如何调用
    /// <summary>
public class MainEntryPoint
{
    public static void Main(string []args)
    {
        // 实例化一个事件发送器
        KeyInputMonitor monitor = new KeyInputMonitor();
        // 实例化一个事件接收器
        EventReceiver eventReceiver = new EventReceiver( monitor );
        // 运行
        monitor.Run();
        Console.ReadLine();
    }
}
}

posted on 2008-12-27 19:33  David.Ding  阅读(182)  评论(0)    收藏  举报