您的位置:首页 > 编程语言 > C#

C# 事件(event)分析

2008-12-21 22:41 435 查看
一直对事件的处理机制不是特别明确,今天看了‘风卷残云后’C#事件解析这篇文章后,模仿了一篇Code之后思路清晰许多,下面是代码:

1 using System;

2 using System.Collections.Generic;

3 using System.Text;

4

5 namespace T_Event

6 {

7 class Program

8 {

9 static void Main(string[] args)

{

KeyInputMonitor monitor = new KeyInputMonitor();

EventReceive receive = new EventReceive(monitor);

monitor.run();

}

}

//此类用来保存按键信息

//internal修饰符:使用该修饰符声明的类型或成员只能在同一程集内访问接口的成员

internal class KeyEventArg:EventArgs

{

private char keychar;

public KeyEventArg(char keychar)

{

this.keychar = keychar;

}

public char KeyChar

{

get

{

return keychar;

}

}

}

internal class KeyInputMonitor

{

public delegate void keydownhandle(object Sender,KeyEventArg e);

public event keydownhandle Onkeydownhandle;

public void run()

{

bool Flag = false;

do

{

Console.WriteLine("Please Input A Char");

string response = Console.ReadLine();

char rChar = (response == "") ? ' ' : char.ToUpper(response[0]);

switch (rChar)

{

case 'X':

Flag = true;

break;

default:

//实例化一个 KeyEventArg,获取按键信息

KeyEventArg keyeventarg = new KeyEventArg(rChar);

//触发Onkeydownhandle事件,并交于委托keydownhandle所指定的方法处理

Onkeydownhandle(this, keyeventarg);

break;

}

} while (!Flag);

}

}

internal class EventReceive

{

public EventReceive(KeyInputMonitor monitor)

{

//程序启动后订阅事件,将委托实例添加到产生事件对象的事件列表中去

monitor.Onkeydownhandle += new KeyInputMonitor.keydownhandle(this.Echo);

}

private void Echo(object sender,KeyEventArg e)

{

Console.WriteLine( "Capture key: {0}", e.KeyChar );

//看看sender(this)传递的是什么值,原来就是KeyInputMonitor类

string strsender = sender.ToString();

Console.WriteLine(strsender);

}

}

}

注释是按自己的理解写的,如果理解有误欢迎指正
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: