C# 委托,事件 实例

 

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

namespace OnKeyDown
{
    class Program
    {
        static void Main(string[] args)
        {
            //实例化一个事件发送器
            KeyInputMonitor monitor = new KeyInputMonitor();

            //实例化一个事件接收器
            EventReceiver eventReceiver = new EventReceiver(monitor);

            //运行
            monitor.Run();
        }
    }

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

        public char KeyChar
        {
            get
            {
                return keyChar;
            }
        }
    }

    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);
                        break;
                }
            }while(!finished);
        }
    }

    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);
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值