細(xì)說(shuō)VB.NET(上)
創(chuàng)新互聯(lián)公司主營(yíng)興隆網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,app軟件定制開(kāi)發(fā),興隆h5重慶小程序開(kāi)發(fā)公司搭建,興隆網(wǎng)站營(yíng)銷推廣歡迎興隆等地區(qū)企業(yè)咨詢
(作者:青蘋果工作室編譯 2001年03月07日 14:47)
微軟公司提出的.NET概念,正從各個(gè)方面滲入到我們的生活中。它將產(chǎn)生的作用,
誠(chéng)如一位業(yè)內(nèi)名家所描述的:“請(qǐng)忘掉你認(rèn)為你所知道的,.NET將改變一切”!既然如
此,無(wú)論是IT業(yè)內(nèi)人士、還是企業(yè)決策者,快速領(lǐng)會(huì)這個(gè)新概念的含義及深遠(yuǎn)影響,
都顯得非常必要。
概要
VB正在不斷地發(fā)展中,它具備了以前VB編程人員作夢(mèng)都想擁有的性能,想象一下你
將隨心所欲的利用這些性能,是不是很令人激動(dòng)?然而,這個(gè)計(jì)劃于2001年第四季度上
市銷售的VB版本可能會(huì)給你帶來(lái)些小麻煩,因?yàn)橐耆莆账枰粋€(gè)較長(zhǎng)的學(xué)習(xí)周期
,而且其中包括了一些微妙的變化,你可能在使用他們的時(shí)候出現(xiàn)錯(cuò)誤。
需要準(zhǔn)備的條件:建議獲得Visual Basic.NET beta 版,這些內(nèi)容對(duì)所有VB程序員
都是有用的。
Microsoft .NET平臺(tái)的涵蓋面很廣,而且很難預(yù)測(cè)它的真正意義。我們注意到,現(xiàn)
在有很多關(guān)于.NET的不正確的理解。因此在這篇文章里,我們將把給你一個(gè)VB.NET到底
是些什么的概念,從頭到尾說(shuō)一說(shuō)它是什么、它能干什么以及怎樣才能充分發(fā)揮它的優(yōu)
點(diǎn)。我們要特別地細(xì)看一下IDE的改變、面向?qū)ο筇卣?、底層結(jié)構(gòu)的改變、一些“現(xiàn)代化
”的語(yǔ)法以及包裝和分發(fā)方面的增強(qiáng)。我們將討論這些功能能為你做什么,解釋他們的
優(yōu)點(diǎn)與不足。由于這些改變是如此之大,而且涉及方方面面,因此希望這一篇文章能滿
足你全部的要求是不現(xiàn)實(shí)的,要了解這方面全部的知識(shí)請(qǐng)參閱有關(guān)文章和書(shū)籍。
Visual Basic.NET 和你現(xiàn)在所知的開(kāi)發(fā)工具完全不同,并且這個(gè)新版本會(huì)改變你的
未來(lái)。到底有多大不同?如果你覺(jué)得從VB3遷移到VB4是一個(gè)很大的變化,那這次VB.NET
會(huì)讓你感到震驚。這次升級(jí)與其說(shuō)是VB的一個(gè)新版本,還不如說(shuō)是遷移到一個(gè)新平臺(tái)上
,你所面臨的情況就和從DOS遷移到Windows差不多。
VB獲得了繼承能力
VB.NET預(yù)期擁有的第一新功能就是繼承能力。繼承是VB開(kāi)發(fā)者長(zhǎng)期以來(lái)要求得最多
的功能。判斷一下對(duì)繼承的要求是不是像早些時(shí)候?qū)Ρ镜鼗幾g器的要求一樣將是一件
很有意思的事,后者,當(dāng)Microsoft提供了一個(gè)以后,你就幾乎聽(tīng)不到多少這方面的言語(yǔ)
了。
Visual Basic現(xiàn)在是真正的面向?qū)ο笳Z(yǔ)言了。過(guò)去,你可以通過(guò)使用VB的界面繼承
性創(chuàng)建偽實(shí)現(xiàn)的對(duì)象繼承,但現(xiàn)在不必這樣做了。
Visual Basic.NET 現(xiàn)在提供大量面向?qū)ο蠊δ?,包括?yīng)用程序繼承,它允許你從其
它類導(dǎo)出你想創(chuàng)建的類。像在其它面向?qū)ο笳Z(yǔ)言里一樣,你能覆蓋基類的方法和屬性,
并且能實(shí)現(xiàn)多態(tài)以創(chuàng)建健壯的、擴(kuò)展性好的組件。例如,假定你從基類 Crane里繼承產(chǎn)
生了一個(gè)ForkLift類,你能使用像下面的代碼覆蓋基類里對(duì)Lift方法的默認(rèn)實(shí)現(xiàn):
Public Class ForkLift
Inherits Crane
Overrides Sub Lift(ByRef _
Height As Double)
Height = Height + 10
End Sub
End Class
VB.NET不僅能讓你覆蓋方法或?qū)傩裕凰€能讓你重載方法。重載是定義同名、但使
用不同數(shù)據(jù)類型的方法或?qū)傩缘哪芰?。例如,假定你有一個(gè)組件能對(duì)不同數(shù)據(jù)類型的數(shù)
組進(jìn)行排序,你不需要三個(gè)(每種數(shù)據(jù)類型一個(gè))不同名的方法;實(shí)際上你可以重載一個(gè)
方法名:
Overloads Sub SortArray(ByRef _
aValues()As String)
...
Overloads Sub SortArray(ByRef _
aValues() As Integer)
...
Overloads Sub SortArray(ByRef _
aValues() As Object)
另一個(gè)改變是:表單現(xiàn)在是類模塊。這就是說(shuō)類本身包含建立表單的所有“肥料”
的代碼。你可能想知道,為什么你不得不看到這些從前不用看的代碼,但這個(gè)改變同時(shí)
帶來(lái)強(qiáng)大的新功能,包括繼承這些表單的能力。Microsoft把這一技術(shù)稱為可視化繼承。
假定你的對(duì)話框有一種標(biāo)準(zhǔn)的格式,例如在表單的一側(cè)有一行按鈕,并在角上有一個(gè)標(biāo)
識(shí),那么,通過(guò)可視化繼承你能創(chuàng)建一個(gè)表單模板(類),并從這個(gè)基類里導(dǎo)出所需的表
單。
一切都是對(duì)象
代碼復(fù)用簡(jiǎn)化了開(kāi)發(fā)過(guò)程,像實(shí)現(xiàn)和可視化繼承這樣的功能有利于更簡(jiǎn)單、更強(qiáng)大
的代碼復(fù)用。然而,代碼復(fù)用并不是到此為止。你能通過(guò)支持VB.NET的通用語(yǔ)言運(yùn)行庫(kù)
(Common Language Runtime - CLR)繼承在其它 VS.NET 語(yǔ)言里定義的類。例如,你或別
人創(chuàng)建了一個(gè) C# 類,然后就能從 VB 里繼承它。
VB.NET 的面向?qū)ο竽芰U(kuò)展了語(yǔ)言本身的通路:一切都是對(duì)象。這意味著比在以前
的 VB 版本里,你獲得了更多的內(nèi)在功能,你將很少被迫使用 Windows API。例如,在
以前的 VB 版本里,你使用 LoadPicture 方法加載圖片并使用表單的 Line 方法(或較
快的 API) 畫(huà)線?,F(xiàn)在,你使用 System.Drawing 對(duì)象來(lái)創(chuàng)建并處理圖形。你可以使用
以下代碼在表單上顯示一幅圖片:
picshowpicture.Image = _
system.Drawing.Image.FromFile( _
"c:\test.bmp")
注意 VB.NET 的“一切都是對(duì)象”方式讓你的語(yǔ)句能用得更長(zhǎng)久。
考慮以下語(yǔ)句,它在一個(gè)圖形對(duì)象上畫(huà)一條黃綠色的線:
objgraphics.DrawLine(system.Drawing. _
Pens.Chartreuse, 0, 0, 100, 100)
這些長(zhǎng)長(zhǎng)的語(yǔ)句也有好處:改進(jìn)的功能、適應(yīng)性和易用性。從前,你要實(shí)現(xiàn)先進(jìn)的
功能就不得不在文檔中挖掘,經(jīng)常是不得不訴諸API?,F(xiàn)在,相關(guān)的功能集符合邏輯地包
含在對(duì)象里。這種處理方式的另外一個(gè)好處就是:類把相關(guān)的功能很好的組織了起來(lái)。
所以,瀏覽你感興趣的對(duì)象,發(fā)現(xiàn)它們做些什么實(shí)際上很有意思。
Visual Basic.NET 的面向?qū)ο蠊δ芴峁┝撕芏鄬?shí)在的好處。很多情況下,VB.NET
面向?qū)ο蟮谋举|(zhì)和實(shí)現(xiàn)的繼承性能幫助你比在以前的 VB 版本里更容易、更迅速地創(chuàng)建
特定類型的功能。然而,你不一定要僅僅因?yàn)槟隳茏龅剑褪褂脤?shí)現(xiàn)繼承性或其它 .NE
T 功能。VB.NET 的新功能使開(kāi)發(fā)許多類型的應(yīng)用程序變得更簡(jiǎn)單!但是,就像使用所有
的語(yǔ)言能力一樣,你需要使用的是在特定場(chǎng)合下最適合的功能。
自由線程的危險(xiǎn)
對(duì)于自由線程可能需要特別給出警告。VB6允許你使用獨(dú)立的線程來(lái)創(chuàng)建多線程服務(wù)
器程序,但VB過(guò)去從來(lái)沒(méi)有讓你能創(chuàng)建自由線程的客戶端程序。VB.NET 改變了這一切。
現(xiàn)在,創(chuàng)建自由線程應(yīng)用程序幾乎成了最微不足道的事情。實(shí)際上,我估計(jì)那些沒(méi)有理
解其中的微妙差別,就在他們的應(yīng)用程序里添加了自由線程的程序員會(huì)遇到很多問(wèn)題。
只需要幾行代碼就能啟動(dòng)一個(gè)新線程:簡(jiǎn)單地將線索對(duì)象的地址傳遞給方法,方法本身
就會(huì)啟動(dòng)線程。這確實(shí)是很酷也很有用的東西,但你需要小心:這些功能適用于特定的
場(chǎng)合,確定哪些是適用的場(chǎng)合并且明智的使用這些工具則是你自己的事。許多開(kāi)發(fā)者使
用繼承性和自由線程時(shí)給自己找了不少麻煩,請(qǐng)不要讓這些發(fā)生在你身上。
可能大家討論得最多的 VB.NET 特征就是 CLR (通用語(yǔ)言運(yùn)行庫(kù)),VB 運(yùn)行在它的
頂層上。是 CLR 提供了 VB.NET 的許多關(guān)鍵功能。例如,CLR 使實(shí)現(xiàn)和跨語(yǔ)言繼承性以
及自由線程成為可能。
分發(fā)VB程序要求你同時(shí)分發(fā)VB的運(yùn)行庫(kù),在VB6里即是msvbvm60.dll。許多其它語(yǔ)言
也有類似的要求,包括 C++ 和 Java。在Visual Studio.NET里,所有的Visual Studio
語(yǔ)言共享同一個(gè)運(yùn)行庫(kù):CLR。這里有幾個(gè)較大的變化,首先,所有的Visual Studio語(yǔ)
言現(xiàn)在都共享同一個(gè)IDE、同樣的表單引擎、同樣的異常處理機(jī)制等等。這意味著Visua
l Basic和像 C#這樣的語(yǔ)言擁有同等的地位,至少差不多是同等的。
回復(fù):
細(xì)說(shuō)VB.NET(中)
(作者:青蘋果工作室編譯 2001年03月07日 14:47)
易于反編譯的中間語(yǔ)言
無(wú)論你用VB、C#或其它.NET語(yǔ)言編寫(xiě)應(yīng)用程序,VS.NET代碼都編譯成為中間語(yǔ)言(I
L)。當(dāng)應(yīng)用程序運(yùn)行時(shí),一個(gè)即時(shí)編譯器(JITter)處理IL代碼并把它編譯成為機(jī)器語(yǔ)言
。這意味著在理論上可能為Windows以外的平臺(tái)創(chuàng)建.NET運(yùn)行庫(kù),但現(xiàn)在關(guān)于類似的事情
還沒(méi)有任何官方消息。中間語(yǔ)言的一個(gè)缺陷是:它像VB5以前的VB版本一樣,容易被反編
譯。這種可能性使許多開(kāi)發(fā)者普遍地質(zhì)疑.NET架構(gòu)的安全性。
CLR在IL層次內(nèi)外影響代碼,對(duì)它的修改將使所有使用CLR的語(yǔ)言受益。然而,語(yǔ)言
只是和代碼如何被解釋為IL有關(guān),對(duì)特定語(yǔ)言的優(yōu)化可以根據(jù)特定語(yǔ)言的語(yǔ)法來(lái)編寫(xiě),
這樣在技術(shù)上就可能使.NET語(yǔ)言之間的性能差別很小。不管怎樣,大體上藍(lán)圖是美好的
。例如,CLR使VB的調(diào)試和監(jiān)測(cè)工具和C#的相應(yīng)工具相當(dāng),它做到了這一點(diǎn)因?yàn)樗鼈儽緛?lái)
就是相同的工具。
CLR提供不平行的跨語(yǔ)言集成,包括跨語(yǔ)言繼承代碼的能力。所有使用CLR的語(yǔ)言共
享一個(gè)通用類型系統(tǒng),它使使用多種語(yǔ)言開(kāi)發(fā)應(yīng)用程序變得更簡(jiǎn)單。我不喜歡把 C API
聲明翻譯成VB里可以使用的形式,所以我很贊賞通用類型系統(tǒng)帶來(lái)的好處。
在CLR中運(yùn)行的代碼被稱為被管理代碼,被管理代碼使用的內(nèi)存完全由CLR來(lái)控制。
被管理代碼帶來(lái)很多好處,包括跨語(yǔ)言集成、跨語(yǔ)言異常處理和簡(jiǎn)化的部件相互作用模
型。Visual Basic被限制為只能以被管理代碼的方式工作,然而C#擁有跳到非被管理代
碼的能力(執(zhí)行到運(yùn)行庫(kù)之外),并能做像指針操作這類事情。這是VB和C#不同等的情況
之一。這種能力到底有多重要取決于你想干什么。
CLR造成的體系結(jié)構(gòu)差別要比跨語(yǔ)言集成、共享功能和被管理代碼等深刻。首先,V
isual Studio.NET的支撐結(jié)構(gòu)不是 COM。另外,VB.NET里的所有東西,甚至字符串都是
對(duì)象。因?yàn)檫@些和其它一些原因,Microsoft改變了支撐結(jié)構(gòu)處理對(duì)象的方式。COM實(shí)現(xiàn)
了一個(gè)引用計(jì)數(shù)方案,這樣每次引用一個(gè)對(duì)象時(shí),計(jì)數(shù)器遞增。當(dāng)一個(gè)對(duì)象引用超出作
用域或被釋放時(shí),計(jì)數(shù)器遞減,當(dāng)引用計(jì)數(shù)減少到零時(shí)就終止這個(gè)對(duì)象。Microsoft聲稱
在.NET架構(gòu)下引用計(jì)數(shù)的開(kāi)銷太大,以至于不能在 .NET中實(shí)現(xiàn)它,所以它放棄了引用計(jì)
數(shù)轉(zhuǎn)而使用垃圾收集。
垃圾收集需要新體系結(jié)構(gòu)
CLR垃圾收集器主要是監(jiān)視一個(gè)程序的資源,當(dāng)可用資源達(dá)到確定的閾值時(shí)尋找無(wú)用
的對(duì)象,并在發(fā)現(xiàn)它們的時(shí)候清除這些對(duì)象。垃圾收集的一大好處就是你不再需要擔(dān)心
大多數(shù)普通的循環(huán)引用,即子對(duì)象引用了父對(duì)象,然后父對(duì)象又引用了子對(duì)象。在引用
計(jì)數(shù)方案下,循環(huán)引用使兩個(gè)對(duì)象都不能被釋放和清除。然而,垃圾收集器會(huì)發(fā)現(xiàn)循環(huán)
引用并清除它們。這也意味著釋放對(duì)象的最后一個(gè)引用時(shí)不再需要立即清除對(duì)象。
垃圾收集的一個(gè)后果是:你再也不能指望一個(gè)類的 Terminate 事件能在適當(dāng)?shù)臅r(shí)機(jī)
發(fā)出。實(shí)際上,如果線程被阻塞,可能根本就不會(huì)發(fā)出 Terminate 事件。和COM提供的
確定化終止相反,它被稱為不確定的終止。缺乏確定化終止,以及因?yàn)槔占髦匦?/p>
安排并壓縮內(nèi)存從而不能使用指針的事實(shí),在新聞組里激發(fā)了一波激烈的辯論。我想這
些新限制可能會(huì)令你痛恨,因?yàn)槟阋揽看_定化終止;也可能你漠不關(guān)心,因?yàn)槟悴灰?/p>
賴 Terminate 事件。垃圾收集并不是萬(wàn)靈藥,實(shí)現(xiàn)弱引用依然需要做一些考慮。
從引用計(jì)數(shù)到垃圾收集只是 Visual Studio.NET 的支撐結(jié)構(gòu)不是 COM 這個(gè)事實(shí)的
表象之一。你能在VB.NET中使用COM對(duì)象,比如說(shuō)ActiveX服務(wù)器或ActiveX控件。然而,
你必須通過(guò)包裝訪問(wèn)這些對(duì)象。任何時(shí)候聽(tīng)到“包裝”這個(gè)術(shù)語(yǔ),你應(yīng)該明白你面對(duì)著
性能損失,并且對(duì)象的行為可能有所不同。如果當(dāng)計(jì)劃移植一個(gè)使用了大量COM對(duì)象的工
程,就需要認(rèn)真地測(cè)試和計(jì)劃,可能需要重新規(guī)劃應(yīng)用程序的結(jié)構(gòu)才能移植成功。坦率
地說(shuō),你要有遭受挫折的準(zhǔn)備。還記得從VBX遷移到 OCX的過(guò)程嗎?我記得,我的精神病
醫(yī)生也記得。我很快就要再去看他了 ;-)
語(yǔ)言本身的變化要遠(yuǎn)遠(yuǎn)超過(guò)體系結(jié)構(gòu)的變化。大部分改變確有道理,但我并不認(rèn)為
所有的改變都是如此。以前版本的VB允許你以很多方法來(lái)做很多事,以至于統(tǒng)一的編碼
標(biāo)準(zhǔn)要么不存在要么就很難強(qiáng)加于人。Microsoft對(duì)VB做了大量的改變?yōu)榈木褪恰扒逦?/p>
這種語(yǔ)言。很多情況下,原來(lái)你有好幾種方法做一件事,現(xiàn)在就只有一種了。Billy Ho
llis 提供了語(yǔ)法變化的詳細(xì)列表,包括廢棄的關(guān)鍵字列表,但有些東西需要在這里重復(fù)
一下。
首先,向過(guò)程參數(shù)傳遞數(shù)據(jù)的默認(rèn)方法由引用(ByRef)變成了傳值(ByVal)。這個(gè)改
變主要是因?yàn)橐靡葌髦档娘L(fēng)險(xiǎn)大得多。它的風(fēng)險(xiǎn)主要是調(diào)用過(guò)程中的數(shù)據(jù)可能被無(wú)
意中篡改。你仍然能通過(guò)引用傳遞數(shù)據(jù),但這一改變使你需要修改新的默認(rèn)調(diào)用方法來(lái)
使用引用。
Set語(yǔ)句消失了
其次,Set 語(yǔ)句消失了。在 VB.NET 里如果你需要向變量傳遞一個(gè)對(duì)象引用,所需
要的只是一個(gè)等號(hào),對(duì)象被視為同其它值一樣。這很酷,但也有副作用:默認(rèn)屬性消失
了。例如,你不再能用這種方式引用一個(gè)屬性:
Text1 = "What, me worry?"
作為替代,你必須顯式地引用屬性:
Text1.Text = "What, me worry?"
也許一眼看來(lái)不需要這種改變,但確實(shí)必須去掉默認(rèn)屬性。例如,假定你有一個(gè)叫
objFoo的對(duì)象變量,不用Set語(yǔ)句,下面的語(yǔ)句所設(shè)置的引用就產(chǎn)生了歧義性:
objFoo = Text1
這條語(yǔ)句是應(yīng)該設(shè)置到Text1的引用,還是以Text1的Text屬性來(lái)填充objFoo?你不
能確定,編譯器也不能。拋棄Set語(yǔ)句同時(shí)要求拋棄默認(rèn)屬性。
有一個(gè)改變我不喜歡:你不再能在不同的作用域里聲明Property Get和Property S
et過(guò)程。注意 VB.NET 沒(méi)有 Property Let 語(yǔ)句:對(duì)象和數(shù)值都用 Property Set。這意
味著你不能用一個(gè) Friend Property Let 過(guò)程來(lái)對(duì)應(yīng)一個(gè) Public Property Get。用V
B建立組件時(shí)可能會(huì)有麻煩。許多組件開(kāi)發(fā)者創(chuàng)建 Friend Property Set 過(guò)程以使他們
的應(yīng)用程序能改變一個(gè)值,但提供 Public Property Get 過(guò)程以使他們的客戶程序能取
回值。我希望我能為這個(gè)改變找到一個(gè)合適的理由,可是我找不到。
Microsoft說(shuō)它力圖使語(yǔ)言保持清晰并使之現(xiàn)代化—大部分情況下它做得不錯(cuò)—但這
個(gè)作用域問(wèn)題和其它幾個(gè)問(wèn)題令人感到困惑。例如,While...Wend 很早以前就應(yīng)該消失
了,因?yàn)?Do...Loop 完成同樣的功能。然而,Microsoft 不僅沒(méi)能去掉 While...Wend
,還把它改成了 While...End While 來(lái)給自己找了更多的麻煩。真奇怪!
我最不喜歡的改變是:Microsoft改變了你已經(jīng)使用的數(shù)據(jù)類型含義。在 .NET 里,
Integer 現(xiàn)在是 32 位,而 Long 變成了 64 位。我心存恐懼地想:開(kāi)發(fā)者 (包括我自
己) 會(huì)多么頻繁地使用錯(cuò)誤的變量啊。那個(gè)API到底是接受一個(gè)16位的 Integer還是32位
的?老天!我希望Microsoft重新考慮這個(gè)決定并使用新的變量類型,比如Int32和Long
64。無(wú)論遷移到 VB.NET的移植工具是多么的好,它也不能改變開(kāi)發(fā)者的記憶。為什么要
逼著我們?cè)賹W(xué)一遍普通的數(shù)據(jù)類型呢?
最后,最需要的一個(gè)改變是:VB.NET引入了 Option Strict 關(guān)鍵字,你可以使用它
來(lái)代替 Option Explicit。Option Strict 結(jié)束了萬(wàn)惡的類型強(qiáng)制(tm),通過(guò)它VB樂(lè)于
讓你把一個(gè)數(shù)值賦值給一個(gè)字符串,然后像犯罪一樣做另一個(gè)操作。設(shè)置 Option Stri
ct 告訴 Visual Basic.NET 不要為你做任何類型強(qiáng)制。注意 VB.NET 并不是徹底的控制
狂,它允許類型向下轉(zhuǎn)換,但不允許向上。例如,不使用像 sngvariable = CSng(dblv
ariable) 這樣的語(yǔ)句進(jìn)行顯式類型轉(zhuǎn)換,你就不能把聲明為 Single 的變量賦值給聲明
為 Double 的變量。因?yàn)檫@有丟失數(shù)據(jù)的風(fēng)險(xiǎn)。然而,你能不使用顯式類型轉(zhuǎn)換就把聲
明為 Double 的變量賦值給聲明為 Single 的變量,因?yàn)檫@并沒(méi)有丟失數(shù)據(jù)的危險(xiǎn)。使
用 Option Strict 能幫助開(kāi)發(fā)者減少很多類型錯(cuò)誤,包括那些很難調(diào)錯(cuò)的。但有一個(gè)附
加的缺陷:在工程里使用了 Option Strict 后,就不能進(jìn)行 后編聯(lián)了。
回復(fù):
細(xì)說(shuō)VB.NET(下)
(作者:青蘋果工作室編譯 2001年03月07日 14:47)
表單和新IDE面孔
Visual Basic.NET 的面向?qū)ο蠊δ芎軅ゴ螅谝淮螁?dòng) VB.NET 時(shí)還注意不到它
。可能你注意到的第一件事是它的 IDE。IDE看起來(lái)可能很熟悉,建立VS.NET IDE的團(tuán)隊(duì)
以前的工作是開(kāi)發(fā)VB的IDE,對(duì)IDE的增強(qiáng)借鑒了VB IDE的經(jīng)驗(yàn)。
同時(shí),IDE的改變遠(yuǎn)比外表顯示的深刻。所有.NET語(yǔ)言使用相同的IDE,并且IDE中的
新工具功能強(qiáng)大又易于理解。你能把任何一個(gè)設(shè)計(jì)窗口設(shè)置為自動(dòng)隱藏 (就像你能自動(dòng)
隱藏Windows任務(wù)欄那樣),這樣就大大地減少了混亂。主工作區(qū)域是一系列選項(xiàng)卡,這
意味著IDE不再同時(shí)顯式多個(gè)表單和代碼模塊。當(dāng)打開(kāi)對(duì)象的源代碼時(shí),IDE在它的主工
作區(qū)域?yàn)楣ぷ鞯膶?duì)象添加一個(gè)新的選項(xiàng)卡。
IDE還包括一個(gè)叫作任務(wù)表(Task List)的新窗口。它的內(nèi)容由IDE創(chuàng)建的項(xiàng)目組成。
例如,如果在試圖編譯一個(gè)工程時(shí)收到一個(gè)錯(cuò)誤,VB在任務(wù)表里創(chuàng)建一個(gè)項(xiàng)目來(lái)解釋這
個(gè)錯(cuò)誤。你能直接向任務(wù)表里添加項(xiàng)目,或者通過(guò)在代碼里以 "TODO:"開(kāi)始一個(gè)注釋行
,你可以在代碼位置和任務(wù)之間建立聯(lián)系。我喜歡Microsoft實(shí)現(xiàn)任務(wù)表的方式;在程序
出爐前,都需要完成些什么?估計(jì)它能幫我省掉很多時(shí)間和麻煩??吹剿鼤r(shí),你最容易
產(chǎn)生的一個(gè)想法就是:以前怎么就沒(méi)人想到它呢?
你能注意到的另一個(gè)變化就是:VB.NET的表單。Microsoft廢棄了舊的表單引擎而使
用Windows Form代替它。所有基于 CLR的語(yǔ)言都使用Windows Form引擎。相對(duì)于VB6的表
單引擎,它有幾個(gè)重要的改進(jìn)。例如,Windows Form讓你能創(chuàng)建能自動(dòng)調(diào)整組件尺寸的
表單,并允許將控件錨定在表單里的特定位置。換句話說(shuō),不再需要使用第三方控件就
能完成這些特殊任務(wù)。Windows Form還允許表演像透明表單這樣的很酷的技術(shù)。
過(guò)去,VB隱藏了建立表單的所有魔術(shù)。你使用IDE設(shè)計(jì)表單并把代碼添加到Initial
ize事件上,但你沒(méi)有手段來(lái)控制這兩點(diǎn)之間的過(guò)程?,F(xiàn)在,表單就是一個(gè)類,它包含用
來(lái)建立表單所有的代碼。我把這些代碼稱為肥料代碼,因?yàn)榇蠖鄶?shù)開(kāi)發(fā)者希望遠(yuǎn)遠(yuǎn)離開(kāi)
它們,越遠(yuǎn)越好。要想可靠地弄壞你的程序,沒(méi)有比折騰這些代碼更好的辦法了。另一
方面,技術(shù)嫻熟的用戶可以通過(guò)這些代碼做很多很酷的事,因?yàn)樗屇隳茏叩絍B.NET表
單的幕后。要是你不想看到這些代碼你也能不看,因?yàn)樾麓a編輯器有展開(kāi)和折疊代碼
區(qū)的功能,并且這些肥料代碼是默認(rèn)折疊的。代碼編輯器還有幾個(gè)很酷的新功能。例如
,現(xiàn)在它自動(dòng)為你縮排所有代碼(而且還干得不錯(cuò)),它還有內(nèi)置的顯示行號(hào)功能。
創(chuàng)建編譯的服務(wù)器端代碼
除了新的Windows Form引擎,.NET還包括一個(gè)為創(chuàng)建Web表單而特別設(shè)計(jì)的表單引擎
。這些被稱為Web Form的表單很聰明,就像VB讓你能很容易地為傳統(tǒng)Windows桌面應(yīng)用程
序創(chuàng)建表單一樣,它們讓你能方便地為Web創(chuàng)建表單。Web Form是 ASP.NET里的技術(shù),讓
你能使用熟悉的RAD工具創(chuàng)建帶有代碼的表單。創(chuàng)建的ASP.NET代碼編譯并駐留在服務(wù)器
上,并在那里被執(zhí)行,然后以HTML方式發(fā)送給任何一個(gè)支持HTML 3.2的瀏覽器。
底層結(jié)構(gòu)捕獲客戶端上的事件數(shù)據(jù),并把它發(fā)送給服務(wù)器。這意味著可以使用各種
用戶界面工具,可以利用現(xiàn)有的表單設(shè)計(jì)技巧,而且應(yīng)用程序界面是不依賴瀏覽器的。
如果可以放棄不依賴瀏覽器,你還有另一個(gè)選擇來(lái)利用Internet Explorer 某些功能特
有的優(yōu)勢(shì)。Web Form使支持Web的應(yīng)用程序能更容易地創(chuàng)建更好、更豐富多彩的用戶界面
。
Web服務(wù)策略
VB.NET里的另外一個(gè)重要的面向Web的功能是:Web服務(wù)。Microsoft的市場(chǎng)部門把W
eb服務(wù)列為采用.NET的幾大理由之一。實(shí)際上,Web服務(wù)的本質(zhì)就是使用標(biāo)準(zhǔn)協(xié)議的、由
Web服務(wù)器提供的、類似于COM的對(duì)象。注意在技術(shù)上它們并不是COM對(duì)象,但和COM對(duì)象
的表現(xiàn)方式很相像。Microsoft希望看到所有的公司使用Web服務(wù),并且未來(lái)的應(yīng)用程序
可以簡(jiǎn)單地“粘”在不同的Web服務(wù)上,就像現(xiàn)在可以使用Visual Basic for Applicat
ions (VBA)建立基于Office和支持VBA的程序的解決方案一樣。
在PDC上,對(duì)于它希望開(kāi)發(fā)者如何“粘”在這些服務(wù)上,Microsoft提供的一個(gè)演示
程序給出了很好的例子。在這個(gè)演示程序里,一個(gè)假想的診所通過(guò)Web服務(wù)提供預(yù)約系統(tǒng)
,演示了你可以怎樣使用智能電話通過(guò)Web進(jìn)行預(yù)約。Visual Basic.NET 甚至?xí)试S你
查詢服務(wù)器,并獲得關(guān)于服務(wù)器能支持的所有Web服務(wù)的相關(guān)數(shù)據(jù)。通過(guò)IntelliSense
dropdown這個(gè)絕對(duì)有用的工具,程序員可以訪問(wèn)Web服務(wù)。Web服務(wù)是Microsoft雄心勃勃
的戰(zhàn)略,但只有時(shí)間才能檢驗(yàn)它是否能成功地被廣泛接納。
Microsoft試圖消除與包裝和分發(fā)應(yīng)用程序相關(guān)的問(wèn)題,包括令人恐懼的DLL。所有
.NET應(yīng)用程序被封裝為元件。元件包含著數(shù)據(jù)以描述它運(yùn)行所需的東西。這些數(shù)據(jù)被稱
為貨單,包括很多信息,例如:元件身份(名稱、版本等等);一個(gè)列出了所有文件之間
的依賴關(guān)系的表,以及它們的位置和版本;包括DLL相關(guān)數(shù)據(jù)的外部依賴關(guān)系信息;還有
其它元件需要而開(kāi)發(fā)者沒(méi)有創(chuàng)建的資源。元件是自說(shuō)明的(通過(guò)它們的貨單),所以.NET
應(yīng)用程序不需要修改注冊(cè)表才能工作。換句話說(shuō),你不再需要注冊(cè)表組件。在最好的情
況下,即客戶機(jī)里已經(jīng)有了.NET運(yùn)行庫(kù)時(shí),分發(fā)一個(gè)復(fù)雜的應(yīng)用程序可能只是把一個(gè)文
件夾復(fù)制到目標(biāo)機(jī)器上這么簡(jiǎn)單的事。元件的另一個(gè)好處是:你可以讓不同的應(yīng)用程序
使用同一個(gè)DLL的不同版本,并且協(xié)調(diào)地運(yùn)行在一臺(tái)機(jī)器上。如果所有這些都可以像計(jì)劃
中那樣工作,有關(guān)DLL的地獄和版本的噩夢(mèng)就將成為往事。
正確之路
Microsoft徹底更新了它的技術(shù),而不僅僅是核心語(yǔ)言。例如,在Visual Studio.N
ET里同時(shí)提供了ADO.NET,這是有特殊優(yōu)點(diǎn)的下一代ActiveX Data Objects (ADO) 版本
。它的一個(gè)靈活改變是:ADO.NET用Extensible Markup Language (XML)作為在組件之間
傳遞數(shù)據(jù)集的格式。這意味著接收組件不一定必須是ADO.NET組件,同時(shí)接收組件可以接
受任何XML 格式的數(shù)據(jù)集。談到XML,它支撐著VS.NET中的任何東西,從配置文件到遠(yuǎn)端
過(guò)程調(diào)用。ADO.NET在處理斷開(kāi)的數(shù)據(jù)集時(shí)比 ADO的性能要好,并且具有更好的伸縮性。
Visual Basic.NET對(duì)我們都很熟悉的VB做了重要的改變。C++革命性地跳躍到.NET后
有了一個(gè)新名字:C#,而Visual Basic的名字沒(méi)變。然而,如果你把VB.NET當(dāng)作語(yǔ)法相
似的一門新語(yǔ)言而不是簡(jiǎn)單的“升級(jí)”,可能掌握起來(lái)就要容易一些。本文給你一個(gè)起
點(diǎn),但吸收掌握各種知識(shí),并對(duì)未來(lái)做出有根據(jù)的決定是一個(gè)艱苦的過(guò)程,它只是這個(gè)
過(guò)程的一條起跑線。我不知道.NET會(huì)有多么成功,它的很多地方吸引我,但有些地方并
非如此。這個(gè)工具做了大量承諾,它夸耀很多功能能使 VB開(kāi)發(fā)者更簡(jiǎn)單地創(chuàng)建更有伸縮
性的高端應(yīng)用程序。最后,它的成功將取決于開(kāi)發(fā)者能多好地將它應(yīng)用于現(xiàn)實(shí)世界??v
觀Microsoft在PDC和Beta 1版本之間的性能和穩(wěn)定性上所跨過(guò)的這一步,我堅(jiān)定地認(rèn)為
:Microsoft走對(duì)了路!
writeline只接受一個(gè)參數(shù),要輸出兩個(gè)數(shù)需要兩行writeline,如下:
f.writeline("{0}")
f.writeline("什么")
' 關(guān)于VB.net { Visual Basic.NET是基于微軟.NET Framework之上的面向?qū)ο蟮闹虚g解釋性語(yǔ)言,可以看作是Visual Basic在.Net Framework平臺(tái)上的升級(jí)版本,增強(qiáng)了對(duì)面向?qū)ο蟮闹С?。但由于改?dòng)太大,導(dǎo)致VB.net對(duì)VB的向后兼容性不好,在業(yè)界引起不小的爭(zhēng)議。 } ' VB.net與VB6.0的主要區(qū)別 { VB.Net需要在.Net Framework平臺(tái)上才能執(zhí)行,因此,大多的VB.Net程序員使用Visual Studio.Net作為IDE(integrated development environment-集成性的開(kāi)發(fā)環(huán)境)開(kāi)發(fā).net應(yīng)用程序。 VB6生成的應(yīng)用程序不需要.Net Framework框架的支持。 因此,使用VB.net開(kāi)發(fā)的應(yīng)用程序只能在裝有.Net Framework框架的系統(tǒng)中運(yùn)行。 } ' VB.net與VB6.0的編程思想 { 網(wǎng)上流傳的VB與VB.net差別被過(guò)分夸大。其實(shí)VB.net改善的只是完整的面向?qū)ο笏枷耄?0%語(yǔ)法與VB6.0保持一致。 抽象、封裝、多態(tài)、繼承是面向?qū)ο笳Z(yǔ)言的四個(gè)基本屬性。VB6.0不支持繼承,而VB.NET則不然。所以,和C++一樣,VB.NET也是完全面向?qū)ο蟮木幊陶Z(yǔ)言。 } ' VB.net與VB6.0的應(yīng)用前景(個(gè)人觀點(diǎn) By 刺猬) ( 介于現(xiàn)在應(yīng)用最為廣泛WindowsXP操作系統(tǒng)沒(méi)有預(yù)裝.net framework的原因,許多VB程序員采用VB6.0開(kāi)發(fā)應(yīng)用程序;但現(xiàn)在不一樣了,在未來(lái),WindowsXP系統(tǒng)必將面臨淘汰。繼Vista以后,系統(tǒng)都預(yù)裝了.net framework框架,由此看來(lái),微軟正在極力推崇使用.net技術(shù)。或許,.net應(yīng)用程序的開(kāi)發(fā)在未來(lái)會(huì)有很大的發(fā)展前景。 }
求采納
在“調(diào)試”工具欄上選擇Release,然后啟動(dòng)程序,當(dāng)前工作目錄就是Release文件夾
或者修改工程選項(xiàng),在“調(diào)試”那頁(yè)的“工作目錄”指定
反匯編的程序代碼肯定是有錯(cuò)誤的,你可以把東西拿上來(lái),如果工程不是太大的話我們可以試試幫你改