事件和委托的概念问题,还是不清楚,大家再帮我看看

fattycat 2006-07-22 06:25:26

我现在对事件和委托的理解是:

假设3个对象:事件定义者、事件处理者、宿主程序

事件定义者完成3件事情:
1、定义一个委托
2、用这个委托定义一个事件
3、提供一个可以引发此事件的函数

事件处理者需要完成1件事情:
1、定义一个事件处理函数,用于处理此事件。(实际上也可以处理任何的事件?)

宿主程序完成2件事情:
1、使用委托将对象的事件与某个处理函数相关联,这又叫订阅事件。(实际上这是两个步骤,一是以事件处理函数为参数,实例化一个委托对象;二是将此委托对象添加到对象的事件处理函数列表当中)
2、调用事件定义者提供的可以引发事件的函数,引发这个事件

然后就可以得到事件处理函数的处理结果了。

拜托大家仔细帮我检查一下,我上面描述的概念是否是正确的?在什么地方有错误?


今天在写程序的时候忽然发现一个问题,看下面两句话:

语句一:this.ComboBox1_SelectedIndexChanged((object)ComboBox1, new EventArgs());

语句二:ComboBox1.Invoke(new System.EventHandler(this.ComboBox1_SelectedIndexChanged));

ComboBox1是我一个WinForm窗体Form1上的ComboBox控件实例

我现在想在Form1窗体类的某个函数A中,调用ComboBox1的SelectedIndexChanged事件的事件处理函数

我的思路是,在函数A中,为ComboBox1控件对象引发SelectedIndexChanged事件,或者直接调用Form1类的ComboBox1_SelectedIndexChanged方法。于是,就产生了上面两条语句

请注意,以上两句话的效果是相同的!都可以引发事件处理函数!

其中第二句我不太明白,这是什么语法呢?

如果按照我对事件的理解,应该调用一个事件定义者提供的可以引发SelectedIndexChanged事件的函数啊,但是?!!有点晕~~


看来还是我的概念不清楚

请大家帮忙指点指点

谢谢啦~

...全文
167 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
fattycat 2006-07-22
  • 打赏
  • 举报
回复

哦,是这样啊,我明白了

十分感谢您的指点

^o^
netmicro 2006-07-22
  • 打赏
  • 举报
回复
1) 你对事件的理解大概OK,不存在太大的冲突,细节就不需太计较了
(注:你对事件的理解不等于你对委托的理解;虽然两者经常同时出现,但委托的概念不同,且更广;但是因为你的问题集中在对事件的理解上,所以暂时忽略)

2)作为ComboBox的事件,只能由ComboBox自己引发,其他对象是无权过问的
如果你只需要代码重用(code reuse),那就将事件处理过程看作方法来调用即可,即你所写的语句1

而且,如果你这样分开,你就会更清楚了:

private void DoSomething() {
// 这是当有需要的时候要处理一些事情的方法
...
}

private void ComboBox1_SelectedIndexChanged(object sender, EventArgs e) {
// 这是“事件处理过程”
// 发生了某事件,所以“有需要处理一些事情”
DoSomething();
}

private void A() {
// 你所说的“某函数A”
...
// 虽然没有发生什么事情,但是现在也有需要了
DoSomething();
...
}

3) 关于语句二的“Invoke”,其实是与事件完全无关的方法,参考
http://community.csdn.net/Expert/TopicView1.asp?id=4895831

110,554

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧