这一行代码在整个程序是起什么用的

问题描述

namespaceMyButton{[DefaultProperty("Text")][ToolboxData("<{0}:MyButtonrunat=server></{0}:MyButton>")]publicclassMyButton:WebControl,IPostBackEventHandler{privatestaticreadonlyobjectClickKey=newobject();publiceventEventHandlerClick//定义事件的委托{add{Events.AddHandler(ClickKey,value);}remove{Events.RemoveHandler(ClickKey,value);}}protectedvirtualvoidOnClick(EventArgse)//定义单击事件的处理程序{EventHandlerclickEventDelegate=(EventHandler)Events[ClickKey];if(clickEventDelegate!=null){clickEventDelegate(this,e);}}publicvoidRaisePostBackEvent(stringeventArgument)//处理回发事件{OnClick(newEventArgs());}protectedoverridevoidRenderContents(HtmlTextWriteroutput){output.Write("<INPUTTYPE=submitname="+this.UniqueID+"Value='这是自己定制的按钮!'/>");}}}

下面这一片代码有什么用呢publiceventEventHandlerClick//定义事件的委托{add{Events.AddHandler(ClickKey,value);}remove{Events.RemoveHandler(ClickKey,value);}}

解决方案

解决方案二:
类似get/set。
解决方案三:
事件是一个多播的委托链。你看到的Click+=EventHandler其实就是Click.Add(EventHandler)
解决方案四:
在功能上,它很你在类型中写这样的代码是等价的:publicEventHandlerClick;

然后客户程序就可以使用MyButton1.Click+=......;MyButton1.Click-=......;

方法来注册、撤销事件处理程序了。但是,系统类库中的控件普遍都有很多事件。假设平均每个控件有30个事件,假设一个窗口里有1000个控件,那么一个窗口里就有30000个事件对象。尽管客户程序没有向其注册事件处理程序,也要占用30000个事件对象的存储空间。为了少占用一点空间,也是因为.net一开始就是这样在它们内部推广的原因吧,它们不使用上面比较标准和简单的事件定义方法。而是在控件的父类中定了一个Events列表。这样,从其继承的子控件,每一个对象都会有一个Events列表。当客户程序没有向其注册事件事件处理程序,那么就不占用空间。注册了事件处理程序,相应的事件对象才会被加入Events列表中,占用空间。当然,每个控件的Events列表中的每个单元声明时都是父类EventHandler,而要有一个标记说明它是具体对应哪个具体事件,所以使用static的对象(比如对于Click事件就是ClickKey)来做为标记。这些static的对象在类型中创建,而不是在控件对象中创建。所以最终,当窗体上有很多控件时,这种机制可以少为事件预先分配许多空间。这是.net中控件的事件机制的一个基本知识。我们自己设计自定义控件,我倒是觉得不一定有必要学.net类库设计,使用简单标准的publiceventEventHandlerClick;

似乎也不会对程序性能和空间造成什么伤害。。
解决方案五:
第一个代码写错了,少写了一个event单词。参见最下边的一行。

时间: 2024-10-13 19:25:06

这一行代码在整个程序是起什么用的的相关文章

AppInventor:不需要编写一行代码开发Android程序

本文截取自<Android开发权威指南>  转发微博有机会赢得<Android开发权威指南>       从AppInventor本身的名字来看,可将其拆成两个单词:App和Inventor.App表示应用程序,而Inventor是发明家.Inventor这个单词充满了艺术气息.那么将这两个单词连接来,就是发明程序(要注意,不是编写程序,而是发明程序),而且要用艺术的方法.下面先来看一看用AppInventor发明出的程序是个什么样.图1是一个用AppInventor发明的程序.功

c语言-为什么我在一个c程序末尾加入一段代码后前面的代码输出内容没了?加代码 后 前 程序如下

问题描述 为什么我在一个c程序末尾加入一段代码后前面的代码输出内容没了?加代码 后 前 程序如下 代码有点长,我只想知道加代码后变化的原因 #include"stdio.h" static int k = 0; int h[120][5] = { 0 }; int t, g, n, m, i=5, j=1, c; void output(int b[5]) { int p; for (p = 0; p <= 4; p++) { printf("%d ", b[

请教busybox makefile中的一行代码

问题描述 请教busybox makefile中的一行代码 大家好, CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; else if [ -x /bin/bash ]; then echo /bin/bash; else echo sh; fi ; fi) 这句话的目的是为了打印CONFIG_SHELL这个变量的值,可是第一个if中为什么要写成"$$BASH",写成"$BASH&q

只需一行代码,轻松实现一个在线编辑器_javascript技巧

在大部分人眼里,技术宅给人的印象是沉默寡言,总摸不透他心里想些什么,彼此都保持距离.作为半个程序员,我觉得真正的技术宅大部分时间都在找乐子,鼓捣各种想法,和大部分人的极客心理是一样的,程序员也还爱讲笑话,也喜欢烧菜做饭,虽然大多是为了减减压,这样看来和常人没什么不一样. 不一样的地方,技术宅崇尚极致,喜欢极简,又希望简约不简单,背后就是技术宅满心思的不断的尝试,我正在看着一出好戏在上演: "程序员 Jose Jesus Perez Aguinaga 在 CoderWall 分享了一个小技巧:在浏

编写高质量代码改善C#程序——使用泛型集合代替非泛型集合(建议20)_MsSql

软件开发过程中,不可避免会用到集合,C#中的集合表现为数组和若干集合类.不管是数组还是集合类,它们都有各自的优缺点.如何使用好集合是我们在开发过程中必须掌握的技巧.不要小看这些技巧,一旦在开发中使用了错误的集合或针对集合的方法,应用程序将会背离你的预想而运行. 建议20:使用泛型集合代替非泛型集合 在建议1中我们知道,如果要让代码高效运行,应该尽量避免装箱和拆箱,以及尽量减少转型.很遗憾,在微软提供给我们的第一代集合类型中没有做到这一点,下面我们看ArrayList这个类的使用情况: Array

修改一行代码提升 Postgres 性能 100 倍_PostgreSQL

在一个(差)的PostgreSQL 查询中只要一个小小到改动(ANY(ARRAY[...])to ANY(VALUES(...)))就能把查询时间从20s缩减到0.2s.从最简单的学习使用 EXPLAIN ANALYZE开始,到学习使用 Postgres community 大量学习时间的投入将有百倍时间到回报. 使用Postgres监测慢的Postgres查询 在这周早些时候,一个用于我们的图形编辑器上的小表(10GB,1500万行)的主键查询,在我们的一个(多个)数据库上发生来大的查询性能问

用一行代码解决CSS各种IE各种兼容问题

用一行代码来解决CSS在,IE6,IE7,IE8,IE9,IE10 中的各种兼容性问题. 在网站前端写代码的过程中,很多时间IE各个版本的兼容问题很难整.现在百度与谷歌都有了一行解决这种兼容性的代码了.如下面的. 办法一 百度也应用了这种方案去解决IE的兼容问题 百度源代码如下 1 <!Doctype html> 2 <htmlxmlns=http://www.w3.org/1999/xhtmlxmlns:bd=http://www.baidu.com/2010/xbdml> 3 

用asp实现的代码批量修改程序,fso相关

用asp实现的代码批量修改程序,fso相关 是因工作需要做的一个批量修改代码的小东西,拿出来与大家分享 目前可以处理的文件类型:.asp .inc .htm .html 具体类型可自行修改添加 程序实现的功能:将源目录下的文件批量修改后存到目的目录下 用它稍做修改可以实现很多东西噢! 别的不说了,代码里面都写的很清楚了 <% '// +---------------------------------------------------------------------------+ '//

一个显示原代码的asp程序

一个显示原代码的asp程序 我们都知道asp这一类的服务器端处理的程序,其好处之一就是只向客户端输出标准的Html流.因此可以起到向客户隐藏细节的作用.也就是说当我们在浏览器中键入asp程序的网址后只能看见标准的Html文件,而不能看见asp的内容.但有时,例如在一个asp的教学站点,我们有必要显示asp文件的内容,或者你愿意将你的原代码与人享,通过一个程序将代码显示出来. 下面是我编写的一个asp程序,view_code.asp,它提供两种提交方式: 一种是用表格提交,即你知道了该源文件的物理