当前位置: 首页 > news >正文

建设一个网站系统要多久/百度快速收录工具

建设一个网站系统要多久,百度快速收录工具,网站建设技术论文,wordpress 一个广告位放两个广告引言: 当我们在点击窗口中的Button控件VS会帮我们自动生成一些代码,我们只需要在Click方法中写一些自己的代码就可以实现触发Click事件后我们Click方法中代码就会执行,然而我一直有一个疑问的——既然上一专题中说事件是一个多播委托&#xf…

引言:

 当我们在点击窗口中的Button控件VS会帮我们自动生成一些代码,我们只需要在Click方法中写一些自己的代码就可以实现触发Click事件后我们Click方法中代码就会执行,然而我一直有一个疑问的——既然上一专题中说事件是一个多播委托,然而自动生成的代码中只有事件的实例化,却没有看到事件的调用,那既然没有事件调用的代码,那封装的Click为什么会执行呢?

一、点击按钮时触发Click事件背后发送的事情

在引言中提出了我的提问的, 我相信有些朋友可能也会有这样的疑问的,然后事件肯定是调用了的, 只是不是我们代码中调用,而是Butoon控件的内部代码里面调用了事件,而导致委托封装的Click方法而被调用,这样才符合我们看到的情况的——我们点击按钮后,我们后台代码中的Click方法就会执行。为了明白到底背后发生了什么事情的, 让我们一起来探究个究竟吧?

我们新建一个Windows 窗体程序,然后在窗体中拖入一个Button控件并单击按钮,这时候VS为我们生成了如下的代码:

[csharp] view plaincopyprint?
  1. private System.Windows.Forms.Button button1;  
  2.  private void InitializeComponent()  
  3.         {  
  4.             his.button1 = new System.Windows.Forms.Button();  
  5.          
  6.  this.button1.Location = new System.Drawing.Point(105, 89);  
  7.             this.button1.Name = "button1";  
  8.             this.button1.Size = new System.Drawing.Size(75, 23);  
  9.             this.button1.TabIndex = 0;  
  10.             this.button1.Text = "请点击我";  
  11.             this.button1.UseVisualStyleBackColor = true;  
  12.             this.button1.Click += new System.EventHandler(this.button1_Click);  
  13. }  
  14. // 后台代码  
  15.   private void button1_Click(object sender, EventArgs e)  
  16.         {  
  17.   
  18.         }  

从上面代码中我们看到VS为我们自动创建了一个Button对象并实例化,设置了它的属性并通过 this.button1.Click += new System.EventHandler(this.button1_Click);这行代码把 button1_Click注册对Click事件的关注,然而事件的调用代码在哪里呢? 下面我们就在button1_Click方法里面设置断点看看代码是如何执行的(通过查看调用堆栈来看看代码的执行顺序),下面是我设置断点的一张调用堆栈截图:

从上图中我发现在调用button1_Click方法之前要执行Control.OnClick(System.EventArgs e)方法的,然后我们用发射工具去查看下Control.OnClick(System.Eventrgs e)方法中具体有什么样的代码:OnClick方法内部代码截图为:

从反射的代码中可以明白,首先从Events(大家可以通过反射工具去查看Events的类型,它的类型为EventHandlerList,而EventHandlerList又是一个密封类)委托集合中取出委托,如果Click事件(委托)实例化了的话,此时就不为空,此时就会调用委托——handler(this, e),我们知道之前我们通过this.button1.Click += new System.EventHandler(this.button1_Click);代码实例化了委托事件,所以此时被EventHandler封装的button1_Click方法就会执行。

通过上面的解释我已经解除了我一开始的疑惑了,事件的调用在.Net类库中的Control.OnClick方法里面调用,这也就是我说要表达的Click事件背后做的事情的
下面是反射得到的Click事件的代码截图:

 

二、小结

本专题首先提出我对按钮单击事件背后发生的事情的疑惑,通过调试和反射工具一步一步把疑惑接触,相信其他控件的其他事件也是如此的,本专题主要想让大家知道下.Net类库为我们做的事情的,希望一些初学者们了解知识时,要努力知道事物的本质。最后希望本专题可以让大家更进一步的理解事件的本质的,我将下一专题和大家分享下我理解的泛型到底是怎样的。

反射工具的下载地址:http://files.cnblogs.com/zhili/Reflector.zip

http://www.lbrq.cn/news/1087579.html

相关文章:

  • 西安网站建设有那些公司/开发制作app软件
  • 浦北网站建设/站长域名查询
  • 公司介绍网站模板/网址收录平台
  • 金融投资理财网站建设/免费自媒体网站
  • 网站开发软件技术专业好吗/目前小说网站排名
  • 福州做网站建设/中国搜索引擎有哪些
  • 深圳建立网站公司网站/百度指数怎么查
  • 卖汽车的网站怎么做的吗/关键词搜索引擎工具
  • 高端网站建设网站/seo顾问什么职位
  • 什么是搭建网站/seo快速排名案例
  • 个人web网站/周口seo公司
  • 扶余手机网站开发/全球搜索
  • 男女做爰视频免费网站/全网关键词指数查询
  • 做网站的重要性/做企业推广的公司
  • 加利弗设计公司官网/哪些网站可以seo
  • 申请绿色网站/新闻发稿平台
  • 求购做网站/金阊seo网站优化软件
  • 做天猫网站价格表/网站优化助手
  • 什么网页可以做网站/百度seo优化系统
  • 北京市网站建设企业/淘宝运营培训课程免费
  • 最权威的公文写作网站/百度学术官网登录入口
  • 2017网站建设/东莞seo建站投放
  • 贵阳制作网站/百度seo排名培训优化
  • 网站建设的设备/百度关键词排名突然下降很多
  • 引用网站的内容如何做注释/青岛seo整站优化
  • 关于春节的网站设计html/西安seo公司
  • 多语言网站建设应注意哪些事项/统计网站流量的网站
  • 做网站实现发送信息功能/营销推广案例
  • 做的比较好的网页设计网站/企业如何开展网络营销
  • 手机建站服务/制作网站的平台
  • Kotlin位运算
  • 代码随想录算法训练营二十八天|动态规划part01
  • git stash 命令详解
  • 工业控制系统安全之 Modbus 协议中间人攻击(MITM)分析与防范
  • 俄罗斯方块游戏开发(面向对象编程)
  • pytorch学习笔记-自定义卷积