委托,事件那点事儿!

疯狂的大菠萝 2013-04-18 03:03:06
引言:教科书中写的如何 如何神秘,如何如何的机制,我QNMLGB,教材就不能说人话吗?什么委托是把一个方法当参数传递,什么事件是特殊的委托。特殊JM,事件就是微软写的委托,完后封装在微软的button等控件中的委托实例。发泄完了。我来给你通俗的讲。错了别怪我,我不是所谓的架构师,也不是大神,我是TMD个愤青程序员。我骄傲。。。。。

切记:事件就是TMD委托的实例

外部
委托参数:
public class 委托参数
{
public int Index;
public string Name;
public 委托参数(int _index,string _name)
{
Index = _index;
Name = _name;
}
}

委托:
public delegate void 委托(委托参数 e);

自定义控件中
事件(实例化委托):
public event 委托 事件;

触发事件:
事件(new 委托参数(1, "名字"));


窗体(用户UI线程)中
实例化自定义控件.事件 += new委托(事件处理函数);

委托成功:就是委托干了点事,并执行了你的方法事件处理函数,还传过来自定义控件的参数
private void 事件处理函数(委托参数 e)
{
e.Index ;
e.Name;
}







C#中的事件,比如Click事件
其实就是
委托
EventHandler
委托参数类
EventArgs
控件中的触发事件
都给你写好了,给你写好了,你写好了,写好了,好了,了,了……………

最终你只是在UI中
button.Click+=new EventHandler(Click);
private void Click(object sender, EventArgs e)
{
}


当你点击按钮时候,按钮在windows消息机制中接收到你的信息【之后】才触发了按钮的事件Click,最后调用了你的事件处理函数。
说白了就是原来你调用自己的函数。现在改button通过委托来调用你的函数。
...全文
301 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
疯狂的大菠萝 2013-04-23
  • 打赏
  • 举报
回复
引用 14 楼 sp1234 的回复:
事件的概念,是非常非常基础、非常低级、根本不应该再去争论什么理论而应该“凭感觉”就知道运用的设计知识。换句话说,只有知道点最基本的“依赖倒置”是基本模式,你才能开始写出分层、服务、灵活的代码。
我看出来了:凡是有脏话的部分你否定了。凡是没脏话的部分你肯定了。 情绪是人类的宝贵财产。好的体制是尊重人性的。人性中包括发泄。。。 楼下肯定有掌声。。 我觉得我的优点是悟性好,我的缺点是我不喜欢看一板一眼的书。
wxl1010 2013-04-23
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
事件的概念,是非常非常基础、非常低级、根本不应该再去争论什么理论而应该“凭感觉”就知道运用的设计知识。换句话说,只有知道点最基本的“依赖倒置”是基本模式,你才能开始写出分层、服务、灵活的代码。
  • 打赏
  • 举报
回复
引用 7 楼 zrwdopod03 的回复:
我觉得为什么委托和事件这么难搞懂。就是因为大家习惯了自己去调用自己的函数。而事件就是系统触发系统自己的事件来调用你写的函数。就是方向反了。与我们平时编程时想法正好反过来。所以容易走入误区不好理解。这就是关键所在
这个是对的。 软件开发效率最终并不是比编程语言,更多地是工程技术。这就好比如说有人以为工地上板砖和泥就能盖楼房了,而有人以为出了出苦力的人以外,还需要有人懂工程技术。事件是基本的依赖倒置技术,这是非常基本的东西,不懂这个东西就会被GOF的所谓《设计模式》忽悠得找不着北。有些人之所以钻进繁琐雷人的简单“模式”的文章里出不来,就是因为没有人告诉他要先去理解“事件驱动”的基本设计概念。
三五月儿 2013-04-20
  • 打赏
  • 举报
回复
了解了理论的基础上,多写写代码。自然而然,影响就深刻了。
qldsrx 2013-04-20
  • 打赏
  • 举报
回复
学过C++的都知道有函数知道有函数指针,而委托就是C#版本的函数指针而已,事件则是允许传递多个函数指针。楼主把一个简单问题拿来发牢骚没必要啊。
  • 打赏
  • 举报
回复
引用 楼主 zrwdopod03 的回复:
教科书中写的如何 如何神秘,如何如何的机制,我QNMLGB,教材就不能说人话吗?什么委托是把一个方法当参数传递,什么事件是特殊的委托。特殊JM,事件就是微软写的委托,完后封装在微软的button等控件中的委托实例。发泄完了。
你的定义一点也没有比原来的定义更正规、更有意义。
疯狂的大菠萝 2013-04-19
  • 打赏
  • 举报
回复
我觉得为什么委托和事件这么难搞懂。就是因为大家习惯了自己去调用自己的函数。而事件就是系统触发系统自己的事件来调用你写的函数。就是方向反了。与我们平时编程时想法正好反过来。所以容易走入误区不好理解。这就是关键所在
threenewbee 2013-04-19
  • 打赏
  • 举报
回复
看得出来,lz基本理解了。其实本来就很简单,无论多么“高深”的东西,都是人想出来的。说什么东西很难,多半是因为他自己菜。
著一 2013-04-19
  • 打赏
  • 举报
回复
不错,很简单,而且很容易理解。
风一样的大叔 2013-04-18
  • 打赏
  • 举报
回复
疯狂的大菠萝 2013-04-18
  • 打赏
  • 举报
回复
引用 3 楼 davinciyxw 的回复:
delegate就是一种类型
这个有道理。说白了就是规定委托执行函数的摸样。
  • 打赏
  • 举报
回复
delegate就是一种类型
cheng2005 2013-04-18
  • 打赏
  • 举报
回复
event 的本质就是一个多播委托。 MSDN写的很清楚

110,545

社区成员

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

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

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