首页 > 开发 > 综合 > 正文

C#事件机制归纳(下)

2024-07-21 02:19:34
字体:
来源:转载
供稿:网友
3.c#中预定义事件处理方式

学习事件,我觉得最不好理解的就是c#中预定义了事件,使我才开始学习事件时一头雾水。在查了些资料后,终于弄明白了一些,如下:

eventargs是包含事件数据的类的基类,用于传递事件的细节。

eventhandler是一个委托声明如下(其在.net类库中如下声明的)

public delegate void eventhandler( object sender , eventargs e )
所以,所有形如:

void 函娄名(object 参数名,eventargs 参数名);

的函数都可以作为control类的click事件响应方法了。如下面所定义的一个事件响应方法:

private void button1_click(object sender, system.eventargs e)

参数object sender表示引发事件的对象,(其实这里传递的是对象的引用,如果是button1的click事件则sender就是button1)system.eventargs e 代表事件的相应信息,如鼠标的x,y值等。

下面我们研究一下button类看看其中的事件声明,以click事件为例。

public event eventhandler click;

这里定义了一个eventhandler类型的事件click
private void button1_click(object sender, system.eventargs e)
{
...
}
这是我们和button1_click事件所对应的方法。注意方法的参数符合委托中的签名(既参数列表)。那我们怎么把这个方法和事件联系起来呢,请看下面的代码。
this.button1.click += new system.eventhandler(this.button1_click); (其实button1.click 为system.eventhandler委派的实例事件。与委派中委派实例委托给某一方法非常相似)
把this.button1_click方法绑定到this.button1.click事件。





4.事件的参数的使用。

using system;



class class1

{

static void main()

{

student s1=new student();

s1.name ="student1";

student s2=new student();

s2.name ="student2";

s1.registerok +=new student.delegateregisterokevent(student_registerok);

s2.registerok +=new student.delegateregisterokevent(student_registerok);



//当register方法一执行,触发registerok事件

//registerok事件一触发,然后执行student_registerok方法

s1.register();

s2.register();

console.readline();

}

static void student_registerok(registerokargs e)

{

console.writeline(e.eventinfo);

}

}



class student

{

public delegate void delegateregisterokevent(registerokargs e);

public event delegateregisterokevent registerok;

public string name;

public void register()

{

console.writeline("register method");

registerok(new registerokargs("student name: "+name));

}

}

class registerokargs:eventargs

{

public string eventinfo;

public registerokargs(string eventinfo):base()

{

this.eventinfo =eventinfo;

}

}



发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表