标签:
上次聊了下委托(delegate),简单的介绍了下使用方法,顺便问下你家保姆干活还行么?
今天我们来看看事件(event)。
public delegate void EventHandler(object sender, EventArgs e);
using System;
using System.Collections.Generic;
/// <summary>
/// 首先,我们写的是一个事件的类,其中有一个KeyEventArgs的参数
/// 它是EventArgs的派生类,用来存储我们输入的字符
/// </summary>
class MyEvent
{
private delegate void EventHandler(object sender, KeyEventArgs e); // 这里我们声明了一个委托看清楚他的参数类型,一个object,一个EventArgs或者是它的派生类
private event EventHandler doEvent; // 这里声明一个事件,***它的类型是委托***
public void OnEvent(KeyEventArgs e)
{
// 这里用来判断,事件发生时应该调用哪一个方法,将方法加入事件处理的队列中
switch (e.Key)
{
case "a":
doEvent += new EventHandler(FunA);
break;
case "b":
doEvent += new EventHandler(FunB);
break;
case "c":
doEvent += new EventHandler(FunC);
break;
default:
doEvent += new EventHandler(FunNull);
break;
}
// 处理事件
doEvent(this, e);
}
// 不同事件的处理方法
private void FunA(object sender, KeyEventArgs e)
{
Console.WriteLine("输入 A");
}
private void FunB(object sender, KeyEventArgs e)
{
Console.WriteLine("输入 B");
}
private void FunC(object sender, KeyEventArgs e)
{
Console.WriteLine("输入 C");
}
private void FunNull(object sender, KeyEventArgs e)
{
Console.WriteLine("输入未录入字符");
}
}
using System;
using System.Collections.Generic;
/// <summary>
/// 这是EventArgs的派生类,其中这个key就是用来储存我们输入的字符的
/// </summary>
class KeyEventArgs : EventArgs
{
private string key;
public string Key
{
get
{
return key;
}
set
{
key = value;
}
}
}
using System;
using System.Collections.Generic;
class MyListener
{
static void Main(string[] args)
{
while (true) // 这个只是为了让它能重复调用,不然用一次就没有
{
MyEvent me = new MyEvent(); // 实例化事件类
KeyEventArgs e = new KeyEventArgs(); // 实例化参数类
e.Key = Console.ReadLine(); // 给参数类中的属性赋值
me.OnEvent(e); // 调用事件的函数
}
}
}
从结果看,同一个输入事件,根据不同的输入内容,调用不同的处理方法。
总结一下,我们如何来使用事件:
1. 声明一个特殊的委托,参数的类型为一个object,一个EventArgs或者它的派生类(如果不需要传递什么特别的信息的就直接用EventArgs);
2. 声明一个事件,它的类型就是上面声明的委托;
3. 声明处理事件的方法,就是如果这个事件发生了,我们需要做什么;
4. 然后就是根据事件发生的不同情况,把不同方法加入到事件中,就是doEvent += new EventHandler(FunNull)像这样的代码。
5. 最后一定要调用事件,如doEvent(this, e)。
PS:很多人看了很多教程都不明白事件到底怎么写,多是因为看了别人写的好像都是不一样的,很难找出规律来。这里我归纳一下,步骤1,2,3都是为事件的发生做准备的,步骤4,5是当事件发生的时候,我们该如何去使用之前的准备去处理它。所以,1,2,3几乎都是大同小异,4,5就有可能写法多种多样了,再看别人写的关于事件的教程时,把代码分类,应该就能比较好理解了。
以上就是小贱对委托,事件的一点浅显的理解,可能例子不合适,也有可能说的有错误,各位坛友都能直接向我提出来,我也能有机会更深入地去了解。
标签:
原文地址:http://www.cnblogs.com/SogaZhaZha/p/4645786.html