c#事件介绍

事件是由对象引发的,处理事件必须订阅它们(订阅事件就是指提供代码,在事件发生时执行这些代码——事件处理程序)。
一个事件可供多个处理程序订阅:一个事件发生时,多个事件处理 程序都会被调用。
事件的定义:
定义事件前,先要定义一个委托类型用于该事件,这个委托类型指定了事件处理方法的参数和返回类型。如:
public delegate void MessageHandler(string messageText);
定义事件:使用event关键字,并指定事件的委托类型,如:public event MessageHandler MessageArrived;
引发事件:MessageArrived("This is a message.");
example:
定义一个保存数据的类
namespace delegateClass
{
    //EventArgs类:包含事件数据的类的基类,在事件引发时不向事件处理程序传递状态信息的事件会使用此类,
    //应用程序从此类派生一个类保存数据
    internal class KeyEventArgs:EventArgs
    {
        private char keyChar;
        public KeyEventArgs(char keyChar) : base()
        {
            this.keyChar = keyChar;
        }
        public char KeyChar { get { return keyChar; } }
    }
}
定义一个触发事件的类
/*
 * 监控键盘按键的输入并触发一个事件
 */
namespace delegateClass
{
    internal class KeyInputMonitor
    {
        public delegate void KeyDownHandler(object sender, KeyEventArgs e);
        public event KeyDownHandler KeyDown;
        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);
                        KeyDown(this, keyEventArgs);
                        break;
                }
            } while (!finished);
        }
    }
}
定义一个处理事件的类
/// <summary>
/// 产生一个委托实例,把这个委托实例添加到产生事件对象的事件列表中去(订阅事件)
/// </summary>
namespace delegateClass
{
    internal class EventReceiver
    {
        public EventReceiver(KeyInputMonitor monitor)
        {
            monitor.KeyDown += OnKeyDown;
        }
        public void OnKeyDown(object sender, KeyEventArgs e)
        {
            Console.WriteLine("Capture key: {0}", e.KeyChar);
        }
    }
}
主函数用于调用
class MainEntryPoint
{
    static void Main(string[] args)
    {
        KeyInputMonitor monitor = new KeyInputMonitor();
        EventReceiver eventReceiver = new EventReceiver(monitor);
        monitor.Run();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值