大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
C++和.Net程序采用了两种不同的编译方式。通常一个C++编写的程序,都是一次编译成二进制的代码,在相应的操作系统平台上直接执行即可。而.Net程序采用两次编译的方式,用C#,VB.Net等语言写成的程序被编译成IL代码,通过CLR在运行的时候JIT编译成为本地二进制代码。
创新互联建站坚持“要么做到,要么别承诺”的工作理念,服务领域包括:网站设计、网站建设、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的天坛街道网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
MFC和WinForm很多设计上的不同从根本上说,都是因为编译模式带来的不同。因此,在仔细探讨MFC和WinForm之前,有必要细细体会一下不同编译方式带来的改变。
考虑一段代码,它需要在不同的编译环境下生成不同的代码,或者是为了减少代码编写量用一些替换方式取代类似的代码。在C++中利用预编译和宏来解决这些事情。MFC框架中,更是大量使用宏来进行核心功能的设计。但是宏只是一种巧妙的减少输入代码量的方式,本质上和手写输入一些代码并无区别(也许不够严密吧),它并不能在程序运行的时候动态支持代码的插入和改变,因为此时它已经编译完成了。而二次编译则不同,你可以将它的第一次编译看成是通常一次编译程序的预编译期,只是这个预编译更为的强大,它可以编译生成信息更为丰富的元数据。并且,只要在JIT执行前动态插入代码,利用反射等手段,就可以将已经编译好的程序的行为在某种程度上进行改变,其动态性能得到了本质上的改变。
因此,在MFC和WinForm中,我们可以看到两者在动态性能,安全性和效率方面都有很大的不同,总结一下,都可以归结到这不同的编译模式上来。在以后的日志中,都可以看到这些区别的
这个执行顺序由点虐 内部处理和维护
现在我测试了下,如果动态添加delegate的话,那么事件调用就会按照添加的先后顺序来执行
不过在过程里直接用"handles 某个事件"来指定的话,顺序就不一定了,比如我测试你的代码就是3,1,2的循序,和处理过程的名字应该没什么关系
不过事件的处理过程会按照在invocation list里的循序来执行
给你一段代码
Function GetHandlers(ByVal instance As Object, ByVal e As String) As String
Dim pi As PropertyInfo = GetType(Button).GetProperty("Events", BindingFlags.Instance Or BindingFlags.NonPublic)
Dim ehl As EventHandlerList = CType(pi.GetValue(instance, Nothing), EventHandlerList)
Dim fi As FieldInfo = GetType(Control).GetField("Event" e, BindingFlags.Static Or BindingFlags.NonPublic)
Dim d As [Delegate] = ehl(fi.GetValue(Nothing))
Dim handlerStr As String = Nothing
If (d Nothing) Then
For Each i As [Delegate] In d.GetInvocationList()
handlerStr = handlerStr i.Method.Name vbCrLf
Next
Else
handlerStr = "无"
End If
Return handlerStr
End Function
调用gethandlers函数可以得到某个控件的某个事件注册的所有handler,这个顺序就是真正的调用顺序了
但我觉得还是应该不要太过依赖这部分内容,不管是用handles还是addhandler,现在是这样,以后的版本说不定就变成其他了,因为ms并没有对他们有过任何的明文说明
.NET语言,包括VB.NET,它们所开发的程序源代码并不是直接编译成能够直接在操作系统上执行的二进制本地代码,而是被编译成为中间代码,然后通过.NET Framework的通用语言运行时(CLR)——执行。 所有的.Net编程语言都被编译成这种被称为MSIL(Microsoft Intermediate Language )的中间代码,这与Java的字节码类似。因此虽然最终的程序在表面上仍然与传统意义上的可执行文件都具有“.exe”的后缀名。但是实际上,如果计算机上没有安装.Net Framework,那么这些程序将不能够被执行。在程序执行时,.Net Framework将中间代码翻译成为二进制机器码,从而使它得到正确的运行。最终的二进制代码被存储在一个缓冲区中。所以一旦程序使用了相同的代码,那么将会调用缓冲区中的版本。这样如果一个.Net程序第二次被运行,那么这种翻译不需要进行第二次,速度会明显加快。
VB.NET代码之所以不直接编译成二进制机器码,是基于.NET跨平台这一目标的考虑。 Visual Basic .NET 2002
2002年Visual Basic .NET 问世,此后Visual Basic 包含在 Visual Studio套装中。该版本又被称为VB 7.0,是与C#一起在2002年发布的最初始的VB点虐 版本。C#是一门新设计.Net语言并且语法上和Java有一定的相似性,所以被大力宣传为微软对付JAVA的王牌,受到媒体极力关注。然而VB.NET则相反被错误地认为仅仅是VB的一个升级(故有时被称为VB7),它的受关注度也因此较低,当然VB社区以及喜欢Basic系列风格的语言的人还是很关注它的。那些试用过此版VB.NET的人在层层幕布下发现一个强大却艰深的语言。不过任何一种语言都是有弱点的,当然后面这一点也是.NET语言的共性,那就是运行的计算机上必须装相应版本的.Net framework。
Visual Basic .NET 2003
该版本是和.NET Framework 1.1一起发布的。新功能包括对.NET Compact Framework的支持和更好的VB升迁向导。并改进了运行状况,IDE稳定性(尤其是后台编译器),以及运行时RunTime稳定性。另外,VB.NET2003还有一个学院版Visual Studio .NET 2003 Academic Edition (VS03AE),它是分发给各国某些学者免费使用的版本。
Visual Basic .NET 2005
该版本是VB.Net的重大转变。但是这个版本的 Visual Studio 仍然还是面向 .NET 框架的(版本2.0)。它同时也能开发跨平台的应用程序,如开发使用微软操作系统的手机的程序等。总体来说是一个非常庞大的软件,甚至包含代码测试功能。
Visual Basic .NET 2008
Visual Basic 2008于2008年2月1日发布。通过几年的发展,它已成为一种专业化的开发语言和环境。用户可用 Visual Basic 快速创建 Windows 程序,现在还可以编写企业水平的客户/服务器程序及强大的数据库应用程序。
Visual Studio 2010
Visual Studio 2010于2010年4月12日上市,其中包含 Visual Basic .NET 2010 。Visual Studio是微软公司推出的开发环境。是目前最流行的Windows平台应用程序开发环境。Visual Studio 2010集成开发环境(IDE)的界面被重新设计和组织,变得更加简单明了。Visual Studio 2010同时带来了 NET Framework 4.0、Microsoft Visual Studio 2010 CTP( Community Technology Preview--CTP),并且支持开发面向Windows 7的应用程序。除了Microsoft SQL Server,它还支持 IBM DB2和Oracle数据库等。
Visual Studio 2012
从该版本开始VB.NET已没有单独发售的IDE了,微软给Visual Basic .NET 以及C#开发者的IDE就只有Visual Studio 了。该版本增加了modern(原metro)风格的支持等众多新特性。
Visual Studio 2015
增加了大量新特性,提升你的编写效率。对编译器和开发环境优化,提高编译速度,帮你重构代码和解决错误。最明显的14项改进见参考资料的14 Top Improvements in Visual Basic 14。 不能简单认为VB 点虐 是VB的新版本。首先它们一个是完全面向对象的语言,而另一个不是完全面向对象的,其次VB .NET是构建于.Net framework之上的。当然,它们同属Basic系列语言,又同为微软所开发,语法上有一定的相似或沿袭是很正常的,但不能因此认为VB .NET是VB的升级版。
对于想从VB转到VB .NET的开发者来说,如果你只是喜欢Basic系列语言的代码风格,那么你的迁移会很顺利,如果你想沿袭之前VB的编程思想和习惯,你会很苦恼,原因之一就是VB .NET贯穿的是完全面向对象的思想,而VB不是。
微软为使VB开发者更容易转到VB .NET,兼容一些VB6函数和库的用法,但是比不上.NET语言中自带的可替换的函数和库来得高效,所以我们应该尽量使用.NET下的新方法。微软还提供了VB到VB .NET的自动转换器,虽几经改进,但仍无法转换全部代码,几乎所有非小型程序都需要人工修改以完成编译。为了运行优化,大多程序需要大量工作去重构。
争议与解释:许多资深的VB程序员抱怨VB .NET,因为VB .NET丢掉了许多不再发行的VB6中使用的大量语言constructs和用户界面功能,并且对保留下来的东西也改变了语意。其实不应该再把VB和VB .NET做功能上的比较,因为它们除了有些语法相似外,可以说是完全不同的两种语言。
Visual Basic .NET与VB都代表了Basic系列语言的编码风格,Visual Basic .NET是这种编码风格在.NET平台上的继承,而不是同系列语言VB的沿袭。
语言革命
* 1991年4月,Visual Basic诞生,Visual Basic 1.0 Windows版本发布。这个连接编程语言和用户界面的进步被称为Tripod(有些时候叫做Ruby),最初的设计是由阿兰·库珀(Alan Cooper)完成的。 1992年9月,Visual Basic 1.0 DOS版本发布。
* 1998年夏天,VB6.0发布。
* 2001年,Visual Basic .NET和.NET Framework发布。Visual Basic .NET正式诞生。
* 2005年,微软宣布将不会再对非.NET版本的VB进行支持。
*2010年,Visual Basic .NET随Visual Studio 2010发布,不再提供单独的Visual Basic .NET IDE。 MONO开发平台提供了一个VB.NET特性库(VB.NET-specific libraries)并着手研发一个编译器和Windows Forms GUI 库。由于各方面的原因,VB.NET开发的开源工具较C#发展得慢一些。
一个一个回答吧。
1、CheckBox 的 MouseDown 事件发生在 CheckedChange 事件之前,但这是指在单步调试的状态下,事实上在编译好的程序中,这两个事件是分别处在两个不同的线程中,单纯的考虑时间上的前后没有意义。
2、MouseDown 在先。Scroll 事件发生在滚动条移动的过程中,而 ValueChange 事件发生在滚动条的 Value 属性发生改变的时候,两者没有必然联系。举例,当你用鼠标拖动滚动条移动的时候,这时发生的是 Scroll 事件;松开鼠标键后,Value 属性值改变,这时候触发 ValueChange 事件。另外,如果滚动条的 Value 是通过代码改变的而非鼠标拖动的,是不触发 Scroll 事件只触发 ValueChange 事件。
3、ClientSize 是指控件的工作区的高度和宽度。比如说 form,它的 Size 值是包括标题栏、边框等,而 ClientSize 是工作区,不包括标题栏、边框等。
4、一般是 Load→Paint→Shown。