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

C#事件

2016-03-07 20:18 603 查看
C#中的事件处理实际上是一种具有特殊签名的delegate,象下面这个样子:

public delegate void MyEventHandler (object sender, MyEventArgs e)

sender代表事件发送者,e是事件参数类

创建步骤

  (1)、定义delegate对象类型。

  (2)、定义事件参数类,从System.EventArgs类派生。如果事件不带参数,这一步可以省略。

  (3)、定义“事件处理方法,它应当与delegate对象具有相同的参数和返回值类型”。//创建

  (4)、用event关键字定义事件对象,它同时也是一个delegate对象。

  (5)、用+=操作符添加事件到事件队列中(-=操作符能够将事件从队列中删除)。//订阅

  (6)、在需要触发事件的地方用调用delegate的方式写事件触发方法。一般来说,此方法应为protected访问限制,既不能以public方式调用,但可以被子类继承。

  (7)、在适当的地方调用事件触发方法触发事件。

事件例子1

//事件类
public class EventSend {
public delegate void EventHandler(object sender, EventArgs a);//第一步,创建委托
//第二步省略
public class HandleClass {
public void HandleFunction(object sender, EventArgs a)   //第三步事件处理函数,参数必须一样,以供订阅
{
Console.WriteLine("hello");
}
}
public event EventHandler oneEvent;//第四步定义事件实体
private HandleClass handleClass;//处理函数实例化
public EventSend()//构造函数
{
handleClass = new HandleClass();
this.oneEvent += new EventHandler(handleClass.HandleFunction);//第五步订阅,添加事件到事件队列
}
protected void GetEvent(EventArgs e)//第六步事件触发函数
{
if (oneEvent != null) {
oneEvent(this, e);
}
}
public void CreateEvent()//第七步触发事件
{
EventArgs e = new EventArgs();
if (Console.ReadLine() == "a")
this.GetEvent(e);
else
Console.WriteLine("未触发事件");
}
}


事件例子2

//调用事件
static void Main(string[] args) {
Console.WriteLine("请输入小写字母a触发事件");
for (;;)
{
EventSend event1 = new EventSend();
event1.CreateEvent();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: