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

c#事件处理中事件信息EventArgs的使用和类型内部事件委托delegate的调用

2012-06-06 20:24 741 查看
事件信息EventArgs:http://msdn.microsoft.com/zh-cn/library/system.eventargs.aspx

1事件信息可以用于传递处理附带的事件数值,可以自定义事件信息类型来继承

2事件委托可以声明在事件的类型中,并可以通过【类型名.事件委托名】来调用该委托类型创建事件的处理代理

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

namespace 事件2
{
class Program
{
static void Main(string[] args)
{
myEventer mEr = new myEventer();
EventWatcher EWr = new EventWatcher(mEr);
mEr.OnTrigger("浣熊市行动", 1);
}
}

class myEventArgs:EventArgs//声明事件信息类型,并继承于EventArgs
{
public myEventArgs(string strinfo,int intinfo)
{
this.strinfo = strinfo;
this.intinfo = intinfo;
}
private string strinfo;
private int intinfo;
public string StrInfo
{
get { return strinfo; }
}
public int IntInfo
{
get { return intinfo; }
}
}

class myEventer//声明用于声明事件的类型
{
public delegate void myEventerHandler(object sender,myEventArgs mEa);//在类型内部声明事件代理
public event myEventerHandler trigger;//通过事件代理声明事件event
public void OnTrigger(string strinfo,int intinfo)//事件触发的方法,这里要传递2个参数
{
myEventArgs mEa = new myEventArgs(strinfo,intinfo);//以参数初始化一个新的事件信息对象
trigger(this, mEa);
}
}

class EventWatcher//事件观察和事件处理方法绑定类
{
private myEventer mEr;
public EventWatcher(myEventer mer)//通过构造函数传递一个事件触发类对象,用于绑定事件处理方法
{
this.mEr = mer;
mEr.trigger += new myEventer.myEventerHandler(processEvent);//虽然事件委托位于事件类型中,但仍可以通过[类型.事件委托]来访问创建
}
private void processEvent(object sender,myEventArgs mEa)//和事件委托相同签名的事件处理方法
{
Console.WriteLine("已获取事件信息,事件编号:{0},事件名称:{1}",mEa.IntInfo,mEa.StrInfo);
}
}
}


可以看到,该事件委托并非全局声明,但依旧可以通过

类型对象.事件+=new 类型名称.事件委托(事件处理方法名);


来进行事件的绑定~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐