关闭顶部展开顶部

细说.Net开发中的Visual Basic.Net(2)_.Net教程

编辑Tag赚U币
教程Tag:暂无Tag,欢迎添加,赚取U币!

推荐:怎么在ASP.NET中使用SmtpMail发送邮件
在ASP中,就可以通过调用CDONTS组件发送简单邮件,在ASP.NET中,自然也可以。不同的是,.Net Framework中,将这一组件封装到了System.Web.Mail命名空间中。 一个典型的邮件发送程序如下: <%@ Import Namespace=System.Web.Mail %> <script runat=server

易于反编译的中间语言

无论你用VB、C#或其它.NET语言编写应用程序,VS.NET代码都编译成为中间语言(IL)。当应用程序运行时,一个即时编译器(JITter)处理IL代码并把它编译成为机器语言。这意味着在理论上可能为Windows以外的平台创建.NET运行库,但现在关于类似的事情还没有任何官方消息。中间语言的一个缺陷是:它像VB5以前的VB版本一样,容易被反编译。这种可能性使许多开发者普遍地质疑.NET架构的安全性。

CLR在IL层次内外影响代码,对它的修改将使所有使用CLR的语言受益。然而,语言只是和代码如何被解释为IL有关,对特定语言的优化可以根据特定语言的语法来编写,这样在技术上就可能使.NET语言之间的性能差别很小。不管怎样,大体上蓝图是美好的。例如,CLR使VB的调试和监测工具和C#的相应工具相当,它做到了这一点因为它们本来就是相同的工具。

CLR提供不平行的跨语言集成,包括跨语言继承代码的能力。所有使用CLR的语言共享一个通用类型系统,它使使用多种语言开发应用程序变得更简单。我不喜欢把 C API 声明翻译成VB里可以使用的形式,所以我很赞赏通用类型系统带来的好处。

在CLR中运行的代码被称为被管理代码,被管理代码使用的内存完全由CLR来控制。被管理代码带来很多好处,包括跨语言集成、跨语言异常处理和简化的部件相互作用模型。Visual Basic被限制为只能以被管理代码的方式工作,然而C#拥有跳到非被管理代码的能力(执行到运行库之外),并能做像指针操作这类事情。这是VB和C#不同等的情况之一。这种能力到底有多重要取决于你想干什么。

CLR造成的体系结构差别要比跨语言集成、共享功能和被管理代码等深刻。首先,Visual Studio.NET的支撑结构不是 COM。另外,VB.NET里的所有东西,甚至字符串都是对象。因为这些和其它一些原因,Microsoft改变了支撑结构处理对象的方式。COM实现了一个引用计数方案,这样每次引用一个对象时,计数器递增。当一个对象引用超出作用域或被释放时,计数器递减,当引用计数减少到零时就终止这个对象。Microsoft声称在.NET架构下引用计数的开销太大,以至于不能在 .NET中实现它,所以它放弃了引用计数转而使用垃圾收集。

垃圾收集需要新体系结构

CLR垃圾收集器主要是监视一个程序的资源,当可用资源达到确定的阈值时寻找无用的对象,并在发现它们的时候清除这些对象。垃圾收集的一大好处就是你不再需要担心大多数普通的循环引用,即子对象引用了父对象,然后父对象又引用了子对象。在引用计数方案下,循环引用使两个对象都不能被释放和清除。然而,垃圾收集器会发现循环引用并清除它们。这也意味着释放对象的最后一个引用时不再需要立即清除对象。

垃圾收集的一个后果是:你再也不能指望一个类的 Terminate 事件能在适当的时机发出。实际上,如果线程被阻塞,可能根本就不会发出 Terminate 事件。和COM提供的确定化终止相反,它被称为不确定的终止。缺乏确定化终止,以及因为垃圾收集器重新安排并压缩内存从而不能使用指针的事实,在新闻组里激发了一波激烈的辩论。我想这些新限制可能会令你痛恨,因为你要依靠确定化终止;也可能你漠不关心,因为你不依赖 Terminate 事件。垃圾收集并不是万灵药,实现弱引用依然需要做一些考虑。

从引用计数到垃圾收集只是 Visual Studio.NET 的支撑结构不是 COM 这个事实的表象之一。你能在VB.NET中使用COM对象,比如说ActiveX服务器或ActiveX控件。然而,你必须通过包装访问这些对象。任何时候听到“包装”这个术语,你应该明白你面对着性能损失,并且对象的行为可能有所不同。如果当计划移植一个使用了大量COM对象的工程,就需要认真地测试和计划,可能需要重新规划应用程序的结构才能移植成功。坦率地说,你要有遭受挫折的准备。还记得从VBX迁移到 OCX的过程吗?我记得,我的精神病医生也记得。我很快就要再去看他了 ;-)

语言本身的变化要远远超过体系结构的变化。大部分改变确有道理,但我并不认为所有的改变都是如此。以前版本的VB允许你以很多方法来做很多事,以至于统一的编码标准要么不存在要么就很难强加于人。Microsoft对VB做了大量的改变为的就是“清晰”这种语言。很多情况下,原来你有好几种方法做一件事,现在就只有一种了。Billy Hollis 提供了语法变化的详细列表,包括废弃的关键字列表,但有些东西需要在这里重复一下。

首先,向过程参数传递数据的默认方法由引用(ByRef)变成了传值(ByVal)。这个改变主要是因为引用要比传值的风险大得多。它的风险主要是调用过程中的数据可能被无意中篡改。你仍然能通过引用传递数据,但这一改变使你需要修改新的默认调用方法来使用引用。

其次,Set 语句消失了。在 VB.NET 里如果你需要向变量传递一个对象引用,所需要的只是一个等号,对象被视为同其它值一样。这很酷,但也有副作用:默认属性消失了。例如,你不再能用这种方式引用一个属性:

以下是引用片段:Text1 = "What, me worry?"

作为替代,你必须显式地引用属性:

以下是引用片段:Text1.Text = "What, me worry?"

也许一眼看来不需要这种改变,但确实必须去掉默认属性。例如,假定你有一个叫objFoo的对象变量,不用Set语句,下面的语句所设置的引用就产生了歧义性:

以下是引用片段:objFoo = Text1

这条语句是应该设置到Text1的引用,还是以Text1的Text属性来填充objFoo?你不能确定,编译器也不能。抛弃Set语句同时要求抛弃默认属性。

有一个改变我不喜欢:你不再能在不同的作用域里声明Property Get和Property Set过程。注意 VB.NET 没有 Property Let 语句:对象和数值都用 Property Set。这意味着你不能用一个 Friend Property Let 过程来对应一个 Public Property Get。用VB建立组件时可能会有麻烦。许多组件开发者创建 Friend Property Set 过程以使他们的应用程序能改变一个值,但提供 Public Property Get 过程以使他们的客户程序能取回值。我希望我能为这个改变找到一个合适的理由,可是我找不到。

分享:谈.Net和Java的socket机制比较
socket是基于TCP和UDP协议的高层接口,定义了收发数据的格式。Java的TCP服务中使用的Socket是一种流机制,即对于编程人员来说,处理socket只需要从Socket中获取流,然后可以像处理本地流一样来进行数据的收发。 例如: DataOutputStream outToClient =new D

来源:模板无忧//所属分类:.Net教程/更新时间:2009-03-02
相关.Net教程
闂備焦鐪归崺鍕垂闁秵鍋ら柡鍥舵緛缂嶆牠鏌涢埄鍐姇闁抽攱甯楅妵鍕即濡も偓娴滄儳顪冮妶蹇曠Ф闁瑰嚖鎷�
婵犵數鍋涢顓熸叏椤撱垹纾婚柟鐐灱濡插牓鏌¢崒婵囩《濠⒀勭⊕娣囧﹪鎳犻澶嗗亾濠靛鐓熼柕蹇婃櫅閻忔煡鏌熼崙銈嗗
婵犵數濮烽。浠嬪焵椤掆偓閸熷潡鍩€椤掑嫷妫戠紒杈╁仜椤撳吋寰勭€n亝顓鹃柣搴f嚀鐎氼厽绔熼崱娆愬床濞戞柧绶氶弻锝夊閳轰胶浼堥梺鐟板殩閹凤拷
婵犵數濮烽。浠嬪焵椤掆偓閸熷潡鍩€椤掑嫷妫戠紒杈╁仜椤撳吋寰勬繝鍕靛悑闂備浇顕栭崹搴ㄥ礋椤撗勑氶梻浣筋嚙闁帮絽岣胯铻炴繛鎴欏灪閸嬪鏌ㄩ悤鍌涘
闂傚倷鑳舵灙缂佺粯鍔欓獮濠冩償閵娿儳鍔﹀銈嗗笒閸婂摜鏁崼鏇炵閻庢稒岣块惌鎺斺偓瑙勬礃缁诲牓寮幘缁樻櫢闁跨噦鎷�
闂傚倷鑳舵灙缂佺粯鍔欓獮濠冩償閵娿儳鍔﹀銈嗗坊閸嬫捇鏌涘顒夊剳缂侇喖锕弫鍌炲礈瑜忛悡鎾绘煟鎼搭垳宀涢柡鍛箞閹苯鈻庨幋鐘碉紳婵炴挻鑹鹃敃銉р偓姘炬嫹
闂傚倷娴囬妴鈧柛瀣尰閵囧嫰寮介妸褉妲堥梺浼欏瘜閸o綁寮诲☉妯锋斀闁归偊浜為懗铏圭磽娴i潧濡芥俊鐐舵椤曪綁濡搁埡濠冩櫖濠电偛妫欓崹鐢电箔閿熺姵鈷戦柛婵嗗閳ь剙顭烽獮濠囧箻閼告娼熼梺璺ㄥ櫐閹凤拷
闂傚倷绀侀幖顐﹀疮閻楀牊鍙忓瀣捣缁€濠傤熆閼搁潧濮堥柣鎿勭秮閹娼幏宀婂妳濠电偛鐪伴崐鏇㈡箒闂佹寧绻傚Λ娆戠矆閳ь剟姊洪崨濞氭垿鎮ч悩鑼殾闁规壆澧楅弲鎼佹煥閻曞倹瀚�
濠电姷顣藉Σ鍛村垂椤忓牆绀堟繝闈涙-閻斿棙淇婇姘倯閻庢氨绮妵鍕箻鐎靛摜鐣洪柣搴㈢啲閹凤拷
婵犵數濮烽。浠嬪焵椤掆偓閸熷潡鍩€椤掑嫷妫戠紒杈╁仜椤撳ジ宕堕妸銉紩婵$偑鍊栭幐鑽ゆ崲閸愵亖鍋撳铏彧濞e洤锕、娑樜旈埀顒佹櫠閸欏绡€妞ゎ偒鍠楃€氾拷
濠电姷顣藉Σ鍛村垂椤忓牆绀堟繝闈涙-閻斿棙鎱ㄥ璇蹭壕閻庤娲﹂崜鐔笺€佸▎鎾崇闁绘挸绨堕崑鎾绘偨閸涘﹦鍘搁梺鍓插亝缁诲嫬鐡┑鐘愁問閸n垶骞忛敓锟�
濠电姷顣藉Σ鍛村垂椤忓牆绀堟繝闈涙-閻斿棙鎱ㄥ璇蹭壕闂佸搫鑻幊姗€宕洪埀顒併亜閹哄棗浜鹃梺瀹狀嚙闁帮綁鐛幋锕€绠涢梻鍫熺⊕椤斿棝姊绘担鍛婃儓閻庢碍鎮傞獮蹇涙晸閿燂拷
濠电姷顣藉Σ鍛村垂椤忓牆绀堟繝闈涙-閻斿棙鎱ㄥ璇蹭壕閻庤娲╃紞渚€鐛€n亖鏀介柛顐亗缁憋拷
婵犵數濮烽。浠嬪焵椤掆偓閸熷潡鍩€椤掑嫷妫戠紒杈╁仜椤撳吋寰勬繝鍕幀闂備胶鎳撻悺銊ф崲閸曨垼鏁傞悗娑櫭肩换鍡樸亜閺嶎煈娈斿褍寮剁换婵嬶綖椤旇棄顏�
闂備浇顕ф鎼佸储濠婂牆绀堟繝闈涱儐閸嬪鏌熼幆鐗堫棄闁活厽顨呴埞鎴︽偐閹绘帗娈梺濂告涧缂嶅﹪寮婚妶澶嬪殟闁靛鍎遍~宥夋⒑缂佹ḿ澹勭紓宥勭閻e嘲鈻庨幘瀛樻闂佽法鍣﹂幏锟�
UB闂傚倷绀佸﹢杈╁垝椤栫偛绀夋俊銈呮噽瀹撲線鏌涢妷銏℃珕閻庢碍宀搁幃妤€鈽夊▍铏灴閿濈偤鏁撻敓锟�
闂傚倷娴囨竟鍫熴仈缁嬫娼栧┑鐘崇閻掗箖鎮楅悽鐢点€婇柛瀣崌閻涱噣宕归鍙ョ棯婵犵數濮崑鎾绘煥閻曞倹瀚�
闂備浇顕ф鍝ョ不瀹ュ鍨傞柛婵嗗閼板潡鏌涢姀銏犳
闂傚倷绀侀幉鈥愁潖缂佹ɑ鍙忓瀣捣缁€濠傤熆鐠鸿櫣鐏遍柛妤佺缁绘盯宕卞Δ鈧銏ゆ煕閻愬樊妲圭紒缁樼〒缁辨瑩鎮╅崫鍕腐闂備胶枪妤犲繘骞忛敓锟�
缂傚倸鍊搁崐鐑芥倿閿曞倹鍋¢柨鏇炲€搁崹鍌涚節婵犲倸顏い鈺呮敱閵囧嫰骞掑鍥舵М缂備焦褰冨﹢閬嶅焵椤掑倸浠柛濠冪箘缁辨挸顫濇0婵囨櫓闂佽法鍣﹂幏锟�
©2017 www.mb5u.com濠电姷顣藉Σ鍛村垂椤忓牆绀堟繝闈涙-閻斿棙鎱ㄥ璇蹭壕閻庢鍣崳锝夊箖閳哄懎绠甸柟鐑樻尭閻︼拷
闂傚倷娴囬妴鈧柛瀣崌閺岀喖顢涘⿰鍐炬毉濡炪們鍎婚幏锟�&闂傚倷绀侀幉锛勬暜閹烘嚦娑㈠籍閸噥妫呴梺璺ㄥ櫐閹凤拷