A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 叮当 中级黑马   /  2014-7-23 11:46  /  2782 人查看  /  21 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 叮当 于 2014-8-30 22:26 编辑

最近学到事件,一做题,就不会了,都快崩溃了:Q:dizzy:

21 个回复

倒序浏览
继续加油,先从简单的开始,难的慢慢消化
回复 使用道具 举报
1.形象地说,事件(event)就是类或对象用来“发出通知”的成员。
2.通过提供事件的句柄,客户能够把事件和可执行代码联系在一起。
3.事件的声明格式:
   attributes event-modifiers  evet type variable-declarators;
   attributes   event-modifiers  evet type  member-name
   {   event-accessor-declarations}
事件的修饰符event-modifiers可以是:new public protected internal private static virtual sealed override abstract

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报
我也是这样的
回复 使用道具 举报
为什么晕菜,是对概念不理解,还是实例看不懂?
回复 使用道具 举报
看的多了就会了
回复 使用道具 举报
事件就是一般所说的要做的一件事情,犹如一个方法完成某一功能,理解方法体一样去理解事件吧,我是这样理解的。

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1 赞一个!

查看全部评分

回复 使用道具 举报
还好,,,,,,,,
回复 使用道具 举报
陈君 金牌黑马 2014-7-27 08:02:47
9#
记得设置为提问结束哦
回复 使用道具 举报
蜗牛阿布 发表于 2014-7-23 18:37
为什么晕菜,是对概念不理解,还是实例看不懂?

看视频的时候,老师做题,一下用这个一下用那个,一开始还明白,看着看着就晕了,到最后啥都没明白
回复 使用道具 举报
陈君 发表于 2014-7-27 08:02
记得设置为提问结束哦

好的好的{:2_32:}
回复 使用道具 举报
czwanglei 发表于 2014-7-23 14:02
继续加油,先从简单的开始,难的慢慢消化

当明白了就有信心,一不会做,又看不懂,一下子又没有信心。
回复 使用道具 举报
在项目中接触过,做项目的时候还有点明白,可是现在自己做就有点晕菜了,应该是不扎实造成的
回复 使用道具 举报
我就知道当执行到某一步时,按着事件顺序是要去另外一个地方执行下一步事件,貌似需要先注册事件,然后通过委托传递参数,事件触发完成后又回到当前操作,继续执行至当前事件的完成
回复 使用道具 举报
形式上看,事件是一种特殊的委托,委托就像我们的int啊,string啊一样,是一种类型,只不过int类型的变量指向的是一个整数的地址,string类型的变量,指向的是一个字符串的地址,而委托类型的变量,指向的是一个方法的地址。
委托采用event关键字修饰以后,类外部就无法直接调用这个委托,外部只能给委托上绑定方法或者移除方法。委托的调用完全由类内部自己确定。

用winform里面常见的键盘按下来简单说明下事件,人家觉得键盘按下时很重要,我们肯定希望在键盘时调用一个什么方法,但是人家又不知道我们究竟会调用一个什么样的方法,人家就公开一个事件给我们,我们只需要将我们想要调用的方法绑定在人家公开的事件上即可。而我们又想知道,究竟是哪个控件对象触发了键盘按下事件?所以人家公开的事件就提供了一个object类型的参数。当事件触发时,人家就把触发事件的那个控件对象给我们传了进来。还有一些剩下的我们也想知道的事情,比如我们按下的是哪个键(我们自然不会不知道我们按下的是哪个键,但是通过这样的处理,我们可以把所有的有关键盘按下的处理逻辑都放在这个事件里,通过读取人家返回给我们的按键进行不同逻辑,比如按下A弹窗"你好",按下B弹窗"再见"什么的)?人家就把很多其他的东西,作为第二个参数传给我们???EventArgs(具体忘记了键盘按下第二个参数的类型)

不使用event关键字修饰委托类型的变量,那就是普通的委托,从功能角度来说,和使用事件没太大区别,但是这样,外界就可以随便调用你的委托,这就不叫事件了,事件事件,顾名思义,要有触发条件的,触发条件自然是它所在的类决定的,你随随便便自己就调用了鼠标点击事件,那还叫鼠标点击事件么?
事件的这种机制,刚好也是面向对象开放封闭原则的体现。

在做游戏开发时,事件的采用更为频繁,此时,一般都会有一个全局的事件管理类,比如EventManager,这个类有一个添加监听的方法AddListener,还有个触发事件的方法Raise。通过不同的EventArgs的子类来区分不同模块的事件。比如场上有5个士兵,上来着5个士兵都注册一个挨打的监听,绑定的方法里面会有一个参数,比如BattleEventArgs,BattleEventArgs里面有一个字段表示士兵ID,还有个参数表示攻击力,这个方法的最外层会判断传入的ID是不是和自己ID匹配,匹配则根据攻击力和自己防御力扣除自己血量
当A士兵打了C士兵。A士兵就会调用EventManager的Raise方法,把一个BattleEventArgs的对象传进去,ID就是C士兵ID,攻击力就是自己的攻击力,此时5个士兵都会触发自己添加的挨打监听,但是只有C士兵ID匹配,所以C士兵会掉血。
这样,A士兵无需获得C士兵的引用,就可以达到目的,降低了耦合,而且层次上更加鲜明(通过不同的EventArgs子类来实现不同模块的分离)
回复 使用道具 举报
多看几次视频,多做下老师视频里面做的是题目,我当初做飞行棋的时候  那节视频 我看了3次
回复 使用道具 举报
vs中事件的介绍你多看下中文的意思,你不是事件不会用事你做题没思路导致的苏老师不是经常在视频上说要多练习么!我也是新手正在练习。
回复 使用道具 举报
没有啊!
回复 使用道具 举报
认真学吧,事件不难的
回复 使用道具 举报
多看几遍 多想想就会了
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马