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

C# 事件学习

2017-06-06 16:46 302 查看
C#中使用事件需要的步骤:
1.创建一个委托
2.将创建的委托与特定事件关联(.Net类库中的很多事件都是已经定制好的,所以他们也就有相应的一个委托,在编写关联事件处理程序--也就是当有事件发生时我们要执行的方法的时候我们需要和这个委托有相同的签名)
3.编写事件处理程序
4.利用编写的事件处理程序生成一个委托实例
5.把这个委托实例添加到产生事件对象的事件列表中去,这个过程又叫订阅事件


namespace EventLearn
{
class Program
{
static void Main(string[] args)
{
// MainEntryPoint even = new MainEntryPoint();
EventLearn.MainEntryPoint.Start();   //方法是静态的
}
}
//首先要创建一个自己的EventArgs类(是包含事件类的基类)
//在事件引发时不向事件处理程序传递状态信息的事件会使用此类

//派生出一个类来包含数据
internal class KeyEventArgs : EventArgs
{
private char _keyChar; //字段
public KeyEventArgs(char value)
: base()
{
this._keyChar = value;
}
public char KeyChar //属性
{
get
{
return _keyChar;
}
}
}

//创建一个事件的发生类,用于监控事件发生并触发一个类
internal class KeyInputMonitor
{
//创建一个委托,
public delegate void KeyDownHandler(object sender,KeyEventArgs eve);
//将创建的委托与特定的事件相连,这里特定的事件为KeyDown
public event KeyDownHandler KeyDown;
public void Run()
{
bool finish = false;
while(!finish)
{
Console.WriteLine("Input a char");
string response = Console.ReadLine();
char responseChar = (response == "") ? ' ': char.ToLower(response[0]);
switch (responseChar)
{
case 'x':
finish = true;
break;
default:
KeyEventArgs keyEvent = new KeyEventArgs(responseChar );
KeyDown(this,keyEvent);
//这句是触发事件的语句,并将事件交由KeyDownHandler这个委托来处理,
//委托指定事件处理方法去处理事件,这就是事件接收方的类的事情了。
//参数this是指触发事件的对象就是本身这个对象,keyEventArgs包含了按键信息。

//前面已经声明keyEvent为KeyDownHandler---委托
break;

}
Console.WriteLine(finish);
}

}
}
/// <summary>
/// 事件接受方的类,这个类先产生一个委托实例,再把这个委托实例添加到产生事件对象的事件列表中去,
/// 这个过程又叫订阅事件。然后提供一个方法回显按键信息。
/// </summary>
internal class EventReceiver
{
public EventReceiver(KeyInputMonitor monitor)
{
monitor.KeyDown += new KeyInputMonitor.KeyDownHandler(this.onKeyDown);
}
private void onKeyDown(object sender,KeyEventArgs   e)
{
Console.WriteLine("Capture Key:{0}",e.KeyChar );
}
}

public class MainEntryPoint
{
public static void  Start()
{
//实例化一个事件发生器
KeyInputMonitor mon=new KeyInputMonitor ();
//实例化一个事件接收器
EventReceiver  rec=new EventReceiver (mon);
mon.Run();
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: