c#中事件怎么去使用?

丿俗人 2014-03-06 09:37:19
我知道它是一种对象之间传递触发信息的机制,但是我不知道怎么去理解。不知道有没有朋友有比较清晰的视频或者源码给我看看。在这一个点上纠结了很久了。
...全文
346 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
BenBenBears 2014-03-07
  • 打赏
  • 举报
回复
强烈建议给9楼满分,相信他是手打的,不容易!
zhengnan2012 2014-03-07
  • 打赏
  • 举报
回复
事件就是用现实生活中去理解,就是发生的一些事情,有一定的影响后果. 比如:昆明3.01事件,某某事件. 其实就是指向一定的流程.比如3.01事件就是表示 xx砍人.... 如果一个类里定义了一个事件,那么它也是指向一定的代码,也就是方法吧. 我们可以用+= -=来控制事件指向的具体方法,但是这个方法的模型是不变的. 当然在某个地方我也是要触发这个事件的,就是要运行这一段代在码,我们可以用 事件名(实参)这样子来触发,就像我们平时调用方法是一样的 用 方法名(实参).
fangpengyu 2014-03-06
  • 打赏
  • 举报
回复
引用 4 楼 yuekunge 的回复:
[quote=引用 3 楼 fangyangmao 的回复:] 网上资料很多,委托,事件
你这头像碉堡了· 是凹凸曼还是牛魔王?[/quote]再碉也没你碉,咋了,啥事想不开
敌敌畏耶 2014-03-06
  • 打赏
  • 举报
回复
引用 3 楼 fangyangmao 的回复:
网上资料很多,委托,事件
你这头像碉堡了· 是凹凸曼还是牛魔王?
fangpengyu 2014-03-06
  • 打赏
  • 举报
回复
网上资料很多,委托,事件
threenewbee 2014-03-06
  • 打赏
  • 举报
回复
http://bbs.csdn.net/topics/390622815 http://bbs.csdn.net/topics/390284294
zl289kkk 2014-03-06
  • 打赏
  • 举报
回复
引用 楼主 u013012701 的回复:
我知道它是一种对象之间传递触发信息的机制,但是我不知道怎么去理解。不知道有没有朋友有比较清晰的视频或者源码给我看看。在这一个点上纠结了很久了。

// 声明一个委托
        public delegate void MyDelegate(object args);

        // 声明一个事件(事件是一个特殊的委托)
        public event MyDelegate DoMyWork;

        // 事件初始化及事件触发
        public void ActionEvent()
        {
            // 事件初始化
            // 1
            DoMyWork += _DoMyWork;

            // 2
            DoMyWork = new MyDelegate(
            delegate(object args)
            {
                // 事件要做的事情
            });

            // 3
            DoMyWork = new MyDelegate((object args) =>
            {
                // 事件要做的事情
            });

            // 触发事件
            if (DoMyWork != null)
            {
                // 事件参数
                var args = new object();
                DoMyWork(args);
            }
        }

        void _DoMyWork(object args)
        {
            // 事件要做的事情
        }
minhua1983 2014-03-06
  • 打赏
  • 举报
回复
我以前自己学事件和委托都一直模模糊糊的,直到看了设计模式中的“观察者模式”才明白。没人带,自己理解能力比较差,一直对事件和委托说不清,一开始只会硬背,但是始终不理解。 委托不多说了,网上基本都是说,把方法按参数方式传递给另一个方法;多个委托可以连接成一个委托链,当委托链被调用时,依次执行对应的方法,不过如果方法有返回时,只能返回最后一个方法的返回值,当然也有办法取得每个方法的返回值;再后来就是委托的协变和逆变。 再说事件,不少ASP.NET程序员工作了2,3年也没弄懂,有的甚至搞了5年以上ASP.NET都没用过事件或不知道该怎么用事件。 而我呢,当时也是算搞了4年ASP.NET的了,还是不知道该如何使用事件,不过我在搞ASP.NET开始1,2年时就接触到了自定义控件,就是因为这个,所以我知道在写自定义控件时,需要用到事件,只是当时一直是死记硬背该如何在自定义控件去写事件,但是还是不知道事件触发的原理。 第4年后,买了本设计模式在家里看看,23个也没学会几个,就会那几个最简单的,不过发现书中说“观察者模式”就是c#中事件机制的一个体现。 我是这样理解事件的: 一般事件定义在被观察者上,观察者可以注册被观察者身上的事件,一旦被观察者做出某个动作而触发事件,则观察者会被动通知到,并做出相应的动作。 就拿页面和button控件的Click事件来说, button控件就是被观察者,页面就是观察者,页面中有个细节被VS隐藏了: button.Click += new EventHandler(this.button_Click);这行代码在vs2003中可以看到。 而button_Click方法就是页面因button.Click事件触发后而被动的通知后再做出的动作。 那页面的button.Click事件是何时触发的呢? 页面回发后,button.Click事件在页面生命周期执行到RaisePostbackEvent阶段后触发的,页面的RaisePostbackEvent阶段时,会依次调用页面上所有实现了IPostbackEventHandle接口的控件的RaisePostbackEvent方法(因为button控件实现了IPostbackEventHandle接口,只有实现这个接口才能让button实现事件回发)。如button在页面有Click事件的话,那么在页面页面生命周期的RaisePostbackEvent阶段时,会调用button.RaisePostbackEvent方法,这个方法里面又会调用button.OnClick这个方法,而在button.OnClick方法里面,会判断button.Click事件是否被注册,如果被注册则调用Click(sender,e)。 而这个Click(sender,e)被调用后,实际上就是执行页面的button_Click方法。 这个实现过程不学“观察者模式”确实不容易理解,而在懂了“观察者模式”再结合页面生命周期去看自定义控件的事件回发,一目了然。 ASP.NET到处能看到事件的影子,如HttpApplication的19个事件,页面生命周期中各个事件。
如风CSharp 2014-03-06
  • 打赏
  • 举报
回复
不用知道原理,只要知道你单击控件和或选择控件他能自己响应就可以了
欢乐的小猪 2014-03-06
  • 打赏
  • 举报
回复
http://msdn.microsoft.com/zh-cn/library/8627sbea http://msdn.microsoft.com/zh-cn/library/w369ty8x
敌敌畏耶 2014-03-06
  • 打赏
  • 举报
回复
引用 5 楼 fangyangmao 的回复:
[quote=引用 4 楼 yuekunge 的回复:] [quote=引用 3 楼 fangyangmao 的回复:] 网上资料很多,委托,事件
你这头像碉堡了· 是凹凸曼还是牛魔王?[/quote]再碉也没你碉,咋了,啥事想不开[/quote]

110,539

社区成员

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

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

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