Sub aa()
員工經(jīng)過長期磨合與沉淀,具備了協(xié)作精神,得以通過團(tuán)隊(duì)的力量開發(fā)出優(yōu)質(zhì)的產(chǎn)品。成都創(chuàng)新互聯(lián)堅(jiān)持“專注、創(chuàng)新、易用”的產(chǎn)品理念,因?yàn)椤皩W⑺詫I(yè)、創(chuàng)新互聯(lián)網(wǎng)站所以易用所以簡單”。公司專注于為企業(yè)提供網(wǎng)站建設(shè)、成都網(wǎng)站制作、微信公眾號開發(fā)、電商網(wǎng)站開發(fā),小程序定制開發(fā),軟件定制網(wǎng)站等一站式互聯(lián)網(wǎng)企業(yè)服務(wù)。
Dim MyFile, MyPath, MyName
MyPath = "c:\abc\" ' 指定路徑。
MyName = Dir(MyPath, vbDirectory) ' 找尋第一項(xiàng)。
Do While MyName "" ' 開始循環(huán)。
' 跳過當(dāng)前的目錄及上層目錄。
If MyName "." And MyName ".." Then
' 使用位比較來確定 MyName 代表一目錄或者文件夾。
If (GetAttr(MyPath MyName) And vbDirectory) = vbDirectory And MyName = "目標(biāo)" Then
Debug.Print MyName ' 如果它是一個(gè)文件夾,且名稱為"目標(biāo)",將其名稱顯示出來。
End If
End If
MyName = Dir ' 查找下一個(gè)目錄。
Loop
End Sub
若非要使用FileSearch方法,就需要使用FileSearch下面的屬性:SearchFolders
這樣子的Application.FileSearch.SearchFolders,具體用法詳見excel幫助
1.Jardin d'Hiver Keren Ann
(是偶爾在別人空間聽到的,不知道是當(dāng)時(shí)的心情影響的還是怎么的,淡淡的調(diào)子很喜歡)
2.Concerto pour deux Voix
(協(xié)奏曲《Concerto pour deux voix》沒有一點(diǎn)歌詞,只是兩個(gè)曼妙的童聲在音樂的襯托
下穿梭游離的,這種形式不失為展現(xiàn)最真切天籟歌喉的最佳方式,一切歌詞的修飾都是多余
的.這首無詞合唱由兩個(gè)十幾歲的孩子完美演繹,jean—baptiste maunier 和 clemence
把童聲的美妙表現(xiàn)得淋漓盡致)
3.Fall Ina
(優(yōu)美的舒緩節(jié)奏純美女聲慢搖.感覺很不錯(cuò).)
4.Entre los dos
(西班牙歌曲,中文是我們之間,很好聽的一首電視劇插曲)
5.Ninna Nanna Mariangela Preparati A Volare
(意大利漂亮女歌手Mariangela一首非常出名的歌曲,排的滿滿的意大利語就象小鳥清脆的
叫聲一般,反復(fù)的重復(fù)那幾個(gè)旋律,有別于傳統(tǒng)的抒情歌曲,節(jié)奏明快,特色鮮明,
Mariangela甜美的聲音始終穿插在旋律的外面,獨(dú)立的存在于歌曲當(dāng)中,很不錯(cuò)的演唱方
式。 )
一進(jìn)空間的開場曲
6.Street Life - Beenie Man feat ASSIA
7.easy to luv you stacie orrico
(她不只是一個(gè)平凡無奇的16歲女孩!一般的16歲女孩不會(huì)在沒有任何誹聞八卦下,第一張
專輯一推出即獲得金唱片的銷量!16歲的少女不會(huì)擁有連葛來美音樂獎(jiǎng)三人團(tuán)體Destiny's
Child也瞠目結(jié)舌的舞臺(tái)爆發(fā)力!但STACIE她做到了,Destiny's Child親自點(diǎn)名邀她一起
參加巡回演唱會(huì);并且,她的首張專輯Genuine還曾登上美國了Billboard告示排排行Hit
Seeker的冠軍位置,并賣出了50萬張的紅盤佳績!。 )
8.Hush Hush Pussycat dolls
(光聽聲音很難聽出這是一個(gè)十幾歲的小女孩唱的,從長相上實(shí)在太難讓人和她那有力豐富,
滿縈靈魂樂感的powerful嗓音.唱出的是21世紀(jì)最 好的old-school,南方風(fēng)情的靈魂樂聯(lián)想
在一起.她就是當(dāng)今歐美流行樂壇里最優(yōu)秀的白人靈魂爵士女歌手!)
9.joss stone - tell me what were gonna do now
(光聽聲音很難聽出這是一個(gè)十幾歲的小女孩唱的,從長相上實(shí)在太難讓人和她那有力豐富,
滿縈靈魂樂感的powerful嗓音.唱出的是21世紀(jì)最 好的old-school,南方風(fēng)情的靈魂樂聯(lián)想
在一起.她就是當(dāng)今歐美流行樂壇里最優(yōu)秀的白人靈魂爵士女歌手!)
10.tonight Reamonn
(德國吹來的英倫之風(fēng),Reamonn的組建是源于Rea登在報(bào)紙上招募樂隊(duì)成員的廣告,“愛爾
蘭歌手尋覓錄音和演出的樂隊(duì)成員”,這個(gè)有意思的廣告沒多久就吸引了Mike與Rea聯(lián)系,
他又邀請了已經(jīng)在和Uwe玩樂隊(duì)的Sebi,Uwe和朋友Phil也表現(xiàn)出了濃厚的興趣,很快就加
入了進(jìn)來。沒費(fèi)什么周折,Reamonn就這么誕生了)
自己 總結(jié)的在我的空間里的
System.Windows.Forms.Application.DoEvents()
Or
My.Application.DoEvents()
處理目前在訊息佇列中的所有 Windows 訊息。
' Usage My.Application.DoEvents()
' Declaration Public Sub DoEvents()
備注
My.Application.DoEvents 方法可以讓您的應(yīng)用程式在執(zhí)行程式碼的同時(shí),也能夠處理可能所引發(fā)的其他事件。My.Application.DoEvents 方法與 DoEvents 方法具有相同的行為。
當(dāng)您執(zhí)行 Windows Form 應(yīng)用程式時(shí)會(huì)建立新表單,表示會(huì)等待處理事件。每一次表單處理事件時(shí) (例如,按鈕點(diǎn)選),便會(huì)處理與該事件相關(guān)聯(lián)的所有程式碼。所有其他事件都會(huì)在佇列中等待。當(dāng)您的程式碼在處理事件時(shí),應(yīng)用程式不會(huì)做出回應(yīng)。例如,如果將其他視窗拖曳至頂端,不會(huì)重新繪制視窗。
如果您在程式碼中呼叫 My.Application.DoEvents,應(yīng)用程式就可以處理其他事件。例如,如果程式碼將資料加入至回圈 (Loop) 中的 ListBox,且會(huì)在回圈的每個(gè)步驟之后呼叫 My.Application.DoEvents,則將其他視窗拖曳至該視窗上方時(shí),便會(huì)重新繪制表單。如果從程式碼中移除 My.Application.DoEvents,則必須等到按鈕的點(diǎn)選事件處理常式完成執(zhí)行之后,才會(huì)重新繪制表單。
您通常會(huì)在回圈中使用此方法處理訊息。
注意事項(xiàng):
My.Application.DoEvents 方法處理事件的方式和表單的方式不太一樣。使用多執(zhí)行緒處理,讓表單直接處理事件。如需詳細(xì)資訊,請參閱 Visual Basic 中的多執(zhí)行緒。
警告:
如果處理使用者介面 (UI) 事件的方法呼叫 My.Application.DoEvents 方法,則在它完成之前可能會(huì)重新輸入方法。發(fā)生這個(gè)狀況的原因是 My.Application.DoEvents 方法會(huì)處理 Windows 訊息,而 Windows 訊息會(huì)引發(fā)事件。
細(xì)說VB.NET(上)
(作者:青蘋果工作室編譯 2001年03月07日 14:47)
微軟公司提出的.NET概念,正從各個(gè)方面滲入到我們的生活中。它將產(chǎn)生的作用,
誠如一位業(yè)內(nèi)名家所描述的:“請忘掉你認(rèn)為你所知道的,.NET將改變一切”!既然如
此,無論是IT業(yè)內(nèi)人士、還是企業(yè)決策者,快速領(lǐng)會(huì)這個(gè)新概念的含義及深遠(yuǎn)影響,
都顯得非常必要。
概要
VB正在不斷地發(fā)展中,它具備了以前VB編程人員作夢都想擁有的性能,想象一下你
將隨心所欲的利用這些性能,是不是很令人激動(dòng)?然而,這個(gè)計(jì)劃于2001年第四季度上
市銷售的VB版本可能會(huì)給你帶來些小麻煩,因?yàn)橐耆莆账枰粋€(gè)較長的學(xué)習(xí)周期
,而且其中包括了一些微妙的變化,你可能在使用他們的時(shí)候出現(xiàn)錯(cuò)誤。
需要準(zhǔn)備的條件:建議獲得Visual Basic.NET beta 版,這些內(nèi)容對所有VB程序員
都是有用的。
Microsoft .NET平臺(tái)的涵蓋面很廣,而且很難預(yù)測它的真正意義。我們注意到,現(xiàn)
在有很多關(guān)于.NET的不正確的理解。因此在這篇文章里,我們將把給你一個(gè)VB.NET到底
是些什么的概念,從頭到尾說一說它是什么、它能干什么以及怎樣才能充分發(fā)揮它的優(yōu)
點(diǎn)。我們要特別地細(xì)看一下IDE的改變、面向?qū)ο筇卣鳌⒌讓咏Y(jié)構(gòu)的改變、一些“現(xiàn)代化
”的語法以及包裝和分發(fā)方面的增強(qiáng)。我們將討論這些功能能為你做什么,解釋他們的
優(yōu)點(diǎn)與不足。由于這些改變是如此之大,而且涉及方方面面,因此希望這一篇文章能滿
足你全部的要求是不現(xiàn)實(shí)的,要了解這方面全部的知識請參閱有關(guān)文章和書籍。
Visual Basic.NET 和你現(xiàn)在所知的開發(fā)工具完全不同,并且這個(gè)新版本會(huì)改變你的
未來。到底有多大不同?如果你覺得從VB3遷移到VB4是一個(gè)很大的變化,那這次VB.NET
會(huì)讓你感到震驚。這次升級與其說是VB的一個(gè)新版本,還不如說是遷移到一個(gè)新平臺(tái)上
,你所面臨的情況就和從DOS遷移到Windows差不多。
VB獲得了繼承能力
VB.NET預(yù)期擁有的第一新功能就是繼承能力。繼承是VB開發(fā)者長期以來要求得最多
的功能。判斷一下對繼承的要求是不是像早些時(shí)候?qū)Ρ镜鼗幾g器的要求一樣將是一件
很有意思的事,后者,當(dāng)Microsoft提供了一個(gè)以后,你就幾乎聽不到多少這方面的言語
了。
Visual Basic現(xiàn)在是真正的面向?qū)ο笳Z言了。過去,你可以通過使用VB的界面繼承
性創(chuàng)建偽實(shí)現(xiàn)的對象繼承,但現(xiàn)在不必這樣做了。
Visual Basic.NET 現(xiàn)在提供大量面向?qū)ο蠊δ埽☉?yīng)用程序繼承,它允許你從其
它類導(dǎo)出你想創(chuàng)建的類。像在其它面向?qū)ο笳Z言里一樣,你能覆蓋基類的方法和屬性,
并且能實(shí)現(xiàn)多態(tài)以創(chuàng)建健壯的、擴(kuò)展性好的組件。例如,假定你從基類 Crane里繼承產(chǎn)
生了一個(gè)ForkLift類,你能使用像下面的代碼覆蓋基類里對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è)組件能對不同數(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)在是類模塊。這就是說類本身包含建立表單的所有“肥料”
的代碼。你可能想知道,為什么你不得不看到這些從前不用看的代碼,但這個(gè)改變同時(shí)
帶來強(qiáng)大的新功能,包括繼承這些表單的能力。Microsoft把這一技術(shù)稱為可視化繼承。
假定你的對話框有一種標(biāo)準(zhǔn)的格式,例如在表單的一側(cè)有一行按鈕,并在角上有一個(gè)標(biāo)
識,那么,通過可視化繼承你能創(chuàng)建一個(gè)表單模板(類),并從這個(gè)基類里導(dǎo)出所需的表
單。
一切都是對象
代碼復(fù)用簡化了開發(fā)過程,像實(shí)現(xiàn)和可視化繼承這樣的功能有利于更簡單、更強(qiáng)大
的代碼復(fù)用。然而,代碼復(fù)用并不是到此為止。你能通過支持VB.NET的通用語言運(yùn)行庫
(Common Language Runtime - CLR)繼承在其它 VS.NET 語言里定義的類。例如,你或別
人創(chuàng)建了一個(gè) C# 類,然后就能從 VB 里繼承它。
VB.NET 的面向?qū)ο竽芰U(kuò)展了語言本身的通路:一切都是對象。這意味著比在以前
的 VB 版本里,你獲得了更多的內(nèi)在功能,你將很少被迫使用 Windows API。例如,在
以前的 VB 版本里,你使用 LoadPicture 方法加載圖片并使用表單的 Line 方法(或較
快的 API) 畫線?,F(xiàn)在,你使用 System.Drawing 對象來創(chuàng)建并處理圖形。你可以使用
以下代碼在表單上顯示一幅圖片:
picshowpicture.Image = _
system.Drawing.Image.FromFile( _
"c:\test.bmp")
注意 VB.NET 的“一切都是對象”方式讓你的語句能用得更長久。
考慮以下語句,它在一個(gè)圖形對象上畫一條黃綠色的線:
objgraphics.DrawLine(system.Drawing. _
Pens.Chartreuse, 0, 0, 100, 100)
這些長長的語句也有好處:改進(jìn)的功能、適應(yīng)性和易用性。從前,你要實(shí)現(xiàn)先進(jìn)的
功能就不得不在文檔中挖掘,經(jīng)常是不得不訴諸API?,F(xiàn)在,相關(guān)的功能集符合邏輯地包
含在對象里。這種處理方式的另外一個(gè)好處就是:類把相關(guān)的功能很好的組織了起來。
所以,瀏覽你感興趣的對象,發(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 的新功能使開發(fā)許多類型的應(yīng)用程序變得更簡單!但是,就像使用所有
的語言能力一樣,你需要使用的是在特定場合下最適合的功能。
自由線程的危險(xiǎn)
對于自由線程可能需要特別給出警告。VB6允許你使用獨(dú)立的線程來創(chuàng)建多線程服務(wù)
器程序,但VB過去從來沒有讓你能創(chuàng)建自由線程的客戶端程序。VB.NET 改變了這一切。
現(xiàn)在,創(chuàng)建自由線程應(yīng)用程序幾乎成了最微不足道的事情。實(shí)際上,我估計(jì)那些沒有理
解其中的微妙差別,就在他們的應(yīng)用程序里添加了自由線程的程序員會(huì)遇到很多問題。
只需要幾行代碼就能啟動(dòng)一個(gè)新線程:簡單地將線索對象的地址傳遞給方法,方法本身
就會(huì)啟動(dòng)線程。這確實(shí)是很酷也很有用的東西,但你需要小心:這些功能適用于特定的
場合,確定哪些是適用的場合并且明智的使用這些工具則是你自己的事。許多開發(fā)者使
用繼承性和自由線程時(shí)給自己找了不少麻煩,請不要讓這些發(fā)生在你身上。
可能大家討論得最多的 VB.NET 特征就是 CLR (通用語言運(yùn)行庫),VB 運(yùn)行在它的
頂層上。是 CLR 提供了 VB.NET 的許多關(guān)鍵功能。例如,CLR 使實(shí)現(xiàn)和跨語言繼承性以
及自由線程成為可能。
分發(fā)VB程序要求你同時(shí)分發(fā)VB的運(yùn)行庫,在VB6里即是msvbvm60.dll。許多其它語言
也有類似的要求,包括 C++ 和 Java。在Visual Studio.NET里,所有的Visual Studio
語言共享同一個(gè)運(yùn)行庫:CLR。這里有幾個(gè)較大的變化,首先,所有的Visual Studio語
言現(xiàn)在都共享同一個(gè)IDE、同樣的表單引擎、同樣的異常處理機(jī)制等等。這意味著Visua
l Basic和像 C#這樣的語言擁有同等的地位,至少差不多是同等的。
回復(fù):
細(xì)說VB.NET(中)
(作者:青蘋果工作室編譯 2001年03月07日 14:47)
易于反編譯的中間語言
無論你用VB、C#或其它.NET語言編寫應(yīng)用程序,VS.NET代碼都編譯成為中間語言(I
L)。當(dāng)應(yīng)用程序運(yùn)行時(shí),一個(gè)即時(shí)編譯器(JITter)處理IL代碼并把它編譯成為機(jī)器語言
。這意味著在理論上可能為Windows以外的平臺(tái)創(chuàng)建.NET運(yùn)行庫,但現(xiàn)在關(guān)于類似的事情
還沒有任何官方消息。中間語言的一個(gè)缺陷是:它像VB5以前的VB版本一樣,容易被反編
譯。這種可能性使許多開發(fā)者普遍地質(zhì)疑.NET架構(gòu)的安全性。
CLR在IL層次內(nèi)外影響代碼,對它的修改將使所有使用CLR的語言受益。然而,語言
只是和代碼如何被解釋為IL有關(guān),對特定語言的優(yōu)化可以根據(jù)特定語言的語法來編寫,
這樣在技術(shù)上就可能使.NET語言之間的性能差別很小。不管怎樣,大體上藍(lán)圖是美好的
。例如,CLR使VB的調(diào)試和監(jiān)測工具和C#的相應(yīng)工具相當(dāng),它做到了這一點(diǎn)因?yàn)樗鼈儽緛?/p>
就是相同的工具。
CLR提供不平行的跨語言集成,包括跨語言繼承代碼的能力。所有使用CLR的語言共
享一個(gè)通用類型系統(tǒng),它使使用多種語言開發(fā)應(yīng)用程序變得更簡單。我不喜歡把 C API
聲明翻譯成VB里可以使用的形式,所以我很贊賞通用類型系統(tǒng)帶來的好處。
在CLR中運(yùn)行的代碼被稱為被管理代碼,被管理代碼使用的內(nèi)存完全由CLR來控制。
被管理代碼帶來很多好處,包括跨語言集成、跨語言異常處理和簡化的部件相互作用模
型。Visual Basic被限制為只能以被管理代碼的方式工作,然而C#擁有跳到非被管理代
碼的能力(執(zhí)行到運(yùn)行庫之外),并能做像指針操作這類事情。這是VB和C#不同等的情況
之一。這種能力到底有多重要取決于你想干什么。
CLR造成的體系結(jié)構(gòu)差別要比跨語言集成、共享功能和被管理代碼等深刻。首先,V
isual Studio.NET的支撐結(jié)構(gòu)不是 COM。另外,VB.NET里的所有東西,甚至字符串都是
對象。因?yàn)檫@些和其它一些原因,Microsoft改變了支撐結(jié)構(gòu)處理對象的方式。COM實(shí)現(xiàn)
了一個(gè)引用計(jì)數(shù)方案,這樣每次引用一個(gè)對象時(shí),計(jì)數(shù)器遞增。當(dāng)一個(gè)對象引用超出作
用域或被釋放時(shí),計(jì)數(shù)器遞減,當(dāng)引用計(jì)數(shù)減少到零時(shí)就終止這個(gè)對象。Microsoft聲稱
在.NET架構(gòu)下引用計(jì)數(shù)的開銷太大,以至于不能在 .NET中實(shí)現(xiàn)它,所以它放棄了引用計(jì)
數(shù)轉(zhuǎn)而使用垃圾收集。
垃圾收集需要新體系結(jié)構(gòu)
CLR垃圾收集器主要是監(jiān)視一個(gè)程序的資源,當(dāng)可用資源達(dá)到確定的閾值時(shí)尋找無用
的對象,并在發(fā)現(xiàn)它們的時(shí)候清除這些對象。垃圾收集的一大好處就是你不再需要擔(dān)心
大多數(shù)普通的循環(huán)引用,即子對象引用了父對象,然后父對象又引用了子對象。在引用
計(jì)數(shù)方案下,循環(huán)引用使兩個(gè)對象都不能被釋放和清除。然而,垃圾收集器會(huì)發(fā)現(xiàn)循環(huán)
引用并清除它們。這也意味著釋放對象的最后一個(gè)引用時(shí)不再需要立即清除對象。
垃圾收集的一個(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 事件。垃圾收集并不是萬靈藥,實(shí)現(xiàn)弱引用依然需要做一些考慮。
從引用計(jì)數(shù)到垃圾收集只是 Visual Studio.NET 的支撐結(jié)構(gòu)不是 COM 這個(gè)事實(shí)的
表象之一。你能在VB.NET中使用COM對象,比如說ActiveX服務(wù)器或ActiveX控件。然而,
你必須通過包裝訪問這些對象。任何時(shí)候聽到“包裝”這個(gè)術(shù)語,你應(yīng)該明白你面對著
性能損失,并且對象的行為可能有所不同。如果當(dāng)計(jì)劃移植一個(gè)使用了大量COM對象的工
程,就需要認(rèn)真地測試和計(jì)劃,可能需要重新規(guī)劃應(yīng)用程序的結(jié)構(gòu)才能移植成功。坦率
地說,你要有遭受挫折的準(zhǔn)備。還記得從VBX遷移到 OCX的過程嗎?我記得,我的精神病
醫(yī)生也記得。我很快就要再去看他了 ;-)
語言本身的變化要遠(yuǎn)遠(yuǎn)超過體系結(jié)構(gòu)的變化。大部分改變確有道理,但我并不認(rèn)為
所有的改變都是如此。以前版本的VB允許你以很多方法來做很多事,以至于統(tǒng)一的編碼
標(biāo)準(zhǔn)要么不存在要么就很難強(qiáng)加于人。Microsoft對VB做了大量的改變?yōu)榈木褪恰扒逦?/p>
這種語言。很多情況下,原來你有好幾種方法做一件事,現(xiàn)在就只有一種了。Billy Ho
llis 提供了語法變化的詳細(xì)列表,包括廢棄的關(guān)鍵字列表,但有些東西需要在這里重復(fù)
一下。
首先,向過程參數(shù)傳遞數(shù)據(jù)的默認(rèn)方法由引用(ByRef)變成了傳值(ByVal)。這個(gè)改
變主要是因?yàn)橐靡葌髦档娘L(fēng)險(xiǎn)大得多。它的風(fēng)險(xiǎn)主要是調(diào)用過程中的數(shù)據(jù)可能被無
意中篡改。你仍然能通過引用傳遞數(shù)據(jù),但這一改變使你需要修改新的默認(rèn)調(diào)用方法來
使用引用。
Set語句消失了
其次,Set 語句消失了。在 VB.NET 里如果你需要向變量傳遞一個(gè)對象引用,所需
要的只是一個(gè)等號,對象被視為同其它值一樣。這很酷,但也有副作用:默認(rèn)屬性消失
了。例如,你不再能用這種方式引用一個(gè)屬性:
Text1 = "What, me worry?"
作為替代,你必須顯式地引用屬性:
Text1.Text = "What, me worry?"
也許一眼看來不需要這種改變,但確實(shí)必須去掉默認(rèn)屬性。例如,假定你有一個(gè)叫
objFoo的對象變量,不用Set語句,下面的語句所設(shè)置的引用就產(chǎn)生了歧義性:
objFoo = Text1
這條語句是應(yīng)該設(shè)置到Text1的引用,還是以Text1的Text屬性來填充objFoo?你不
能確定,編譯器也不能。拋棄Set語句同時(shí)要求拋棄默認(rèn)屬性。
有一個(gè)改變我不喜歡:你不再能在不同的作用域里聲明Property Get和Property S
et過程。注意 VB.NET 沒有 Property Let 語句:對象和數(shù)值都用 Property Set。這意
味著你不能用一個(gè) Friend Property Let 過程來對應(yīng)一個(gè) Public Property Get。用V
B建立組件時(shí)可能會(huì)有麻煩。許多組件開發(fā)者創(chuàng)建 Friend Property Set 過程以使他們
的應(yīng)用程序能改變一個(gè)值,但提供 Public Property Get 過程以使他們的客戶程序能取
回值。我希望我能為這個(gè)改變找到一個(gè)合適的理由,可是我找不到。
Microsoft說它力圖使語言保持清晰并使之現(xiàn)代化—大部分情況下它做得不錯(cuò)—但這
個(gè)作用域問題和其它幾個(gè)問題令人感到困惑。例如,While...Wend 很早以前就應(yīng)該消失
了,因?yàn)?Do...Loop 完成同樣的功能。然而,Microsoft 不僅沒能去掉 While...Wend
,還把它改成了 While...End While 來給自己找了更多的麻煩。真奇怪!
我最不喜歡的改變是:Microsoft改變了你已經(jīng)使用的數(shù)據(jù)類型含義。在 .NET 里,
Integer 現(xiàn)在是 32 位,而 Long 變成了 64 位。我心存恐懼地想:開發(fā)者 (包括我自
己) 會(huì)多么頻繁地使用錯(cuò)誤的變量啊。那個(gè)API到底是接受一個(gè)16位的 Integer還是32位
的?老天!我希望Microsoft重新考慮這個(gè)決定并使用新的變量類型,比如Int32和Long
64。無論遷移到 VB.NET的移植工具是多么的好,它也不能改變開發(fā)者的記憶。為什么要
逼著我們再學(xué)一遍普通的數(shù)據(jù)類型呢?
最后,最需要的一個(gè)改變是:VB.NET引入了 Option Strict 關(guān)鍵字,你可以使用它
來代替 Option Explicit。Option Strict 結(jié)束了萬惡的類型強(qiáng)制(tm),通過它VB樂于
讓你把一個(gè)數(shù)值賦值給一個(gè)字符串,然后像犯罪一樣做另一個(gè)操作。設(shè)置 Option Stri
ct 告訴 Visual Basic.NET 不要為你做任何類型強(qiáng)制。注意 VB.NET 并不是徹底的控制
狂,它允許類型向下轉(zhuǎn)換,但不允許向上。例如,不使用像 sngvariable = CSng(dblv
ariable) 這樣的語句進(jìn)行顯式類型轉(zhuǎn)換,你就不能把聲明為 Single 的變量賦值給聲明
為 Double 的變量。因?yàn)檫@有丟失數(shù)據(jù)的風(fēng)險(xiǎn)。然而,你能不使用顯式類型轉(zhuǎn)換就把聲
明為 Double 的變量賦值給聲明為 Single 的變量,因?yàn)檫@并沒有丟失數(shù)據(jù)的危險(xiǎn)。使
用 Option Strict 能幫助開發(fā)者減少很多類型錯(cuò)誤,包括那些很難調(diào)錯(cuò)的。但有一個(gè)附
加的缺陷:在工程里使用了 Option Strict 后,就不能進(jìn)行 后編聯(lián)了。
回復(fù):
細(xì)說VB.NET(下)
(作者:青蘋果工作室編譯 2001年03月07日 14:47)
表單和新IDE面孔
Visual Basic.NET 的面向?qū)ο蠊δ芎軅ゴ?,但第一次啟?dòng) VB.NET 時(shí)還注意不到它
。可能你注意到的第一件事是它的 IDE。IDE看起來可能很熟悉,建立VS.NET IDE的團(tuán)隊(duì)
以前的工作是開發(fā)VB的IDE,對IDE的增強(qiáng)借鑒了VB IDE的經(jīng)驗(yàn)。
同時(shí),IDE的改變遠(yuǎn)比外表顯示的深刻。所有.NET語言使用相同的IDE,并且IDE中的
新工具功能強(qiáng)大又易于理解。你能把任何一個(gè)設(shè)計(jì)窗口設(shè)置為自動(dòng)隱藏 (就像你能自動(dòng)
隱藏Windows任務(wù)欄那樣),這樣就大大地減少了混亂。主工作區(qū)域是一系列選項(xiàng)卡,這
意味著IDE不再同時(shí)顯式多個(gè)表單和代碼模塊。當(dāng)打開對象的源代碼時(shí),IDE在它的主工
作區(qū)域?yàn)楣ぷ鞯膶ο筇砑右粋€(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)目來解釋這
個(gè)錯(cuò)誤。你能直接向任務(wù)表里添加項(xiàng)目,或者通過在代碼里以 "TODO:"開始一個(gè)注釋行
,你可以在代碼位置和任務(wù)之間建立聯(lián)系。我喜歡Microsoft實(shí)現(xiàn)任務(wù)表的方式;在程序
出爐前,都需要完成些什么?估計(jì)它能幫我省掉很多時(shí)間和麻煩。看到它時(shí),你最容易
產(chǎn)生的一個(gè)想法就是:以前怎么就沒人想到它呢?
你能注意到的另一個(gè)變化就是:VB.NET的表單。Microsoft廢棄了舊的表單引擎而使
用Windows Form代替它。所有基于 CLR的語言都使用Windows Form引擎。相對于VB6的表
單引擎,它有幾個(gè)重要的改進(jìn)。例如,Windows Form讓你能創(chuàng)建能自動(dòng)調(diào)整組件尺寸的
表單,并允許將控件錨定在表單里的特定位置。換句話說,不再需要使用第三方控件就
能完成這些特殊任務(wù)。Windows Form還允許表演像透明表單這樣的很酷的技術(shù)。
過去,VB隱藏了建立表單的所有魔術(shù)。你使用IDE設(shè)計(jì)表單并把代碼添加到Initial
ize事件上,但你沒有手段來控制這兩點(diǎn)之間的過程?,F(xiàn)在,表單就是一個(gè)類,它包含用
來建立表單所有的代碼。我把這些代碼稱為肥料代碼,因?yàn)榇蠖鄶?shù)開發(fā)者希望遠(yuǎn)遠(yuǎn)離開
它們,越遠(yuǎn)越好。要想可靠地弄壞你的程序,沒有比折騰這些代碼更好的辦法了。另一
方面,技術(shù)嫻熟的用戶可以通過這些代碼做很多很酷的事,因?yàn)樗屇隳茏叩絍B.NET表
單的幕后。要是你不想看到這些代碼你也能不看,因?yàn)樾麓a編輯器有展開和折疊代碼
區(qū)的功能,并且這些肥料代碼是默認(rèn)折疊的。代碼編輯器還有幾個(gè)很酷的新功能。例如
,現(xiàn)在它自動(dòng)為你縮排所有代碼(而且還干得不錯(cuò)),它還有內(nèi)置的顯示行號功能。
創(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è)選擇來利用Internet Explorer 某些功能特
有的優(yōu)勢。Web Form使支持Web的應(yīng)用程序能更容易地創(chuàng)建更好、更豐富多彩的用戶界面
。
Web服務(wù)策略
VB.NET里的另外一個(gè)重要的面向Web的功能是:Web服務(wù)。Microsoft的市場部門把W
eb服務(wù)列為采用.NET的幾大理由之一。實(shí)際上,Web服務(wù)的本質(zhì)就是使用標(biāo)準(zhǔn)協(xié)議的、由
Web服務(wù)器提供的、類似于COM的對象。注意在技術(shù)上它們并不是COM對象,但和COM對象
的表現(xiàn)方式很相像。Microsoft希望看到所有的公司使用Web服務(wù),并且未來的應(yīng)用程序
可以簡單地“粘”在不同的Web服務(wù)上,就像現(xiàn)在可以使用Visual Basic for Applicat
ions (VBA)建立基于Office和支持VBA的程序的解決方案一樣。
在PDC上,對于它希望開發(fā)者如何“粘”在這些服務(wù)上,Microsoft提供的一個(gè)演示
程序給出了很好的例子。在這個(gè)演示程序里,一個(gè)假想的診所通過Web服務(wù)提供預(yù)約系統(tǒng)
,演示了你可以怎樣使用智能電話通過Web進(jìn)行預(yù)約。Visual Basic.NET 甚至?xí)试S你
查詢服務(wù)器,并獲得關(guān)于服務(wù)器能支持的所有Web服務(wù)的相關(guān)數(shù)據(jù)。通過IntelliSense
dropdown這個(gè)絕對有用的工具,程序員可以訪問Web服務(wù)。Web服務(wù)是Microsoft雄心勃勃
的戰(zhàn)略,但只有時(shí)間才能檢驗(yàn)它是否能成功地被廣泛接納。
Microsoft試圖消除與包裝和分發(fā)應(yīng)用程序相關(guān)的問題,包括令人恐懼的DLL。所有
.NET應(yīng)用程序被封裝為元件。元件包含著數(shù)據(jù)以描述它運(yùn)行所需的東西。這些數(shù)據(jù)被稱
為貨單,包括很多信息,例如:元件身份(名稱、版本等等);一個(gè)列出了所有文件之間
的依賴關(guān)系的表,以及它們的位置和版本;包括DLL相關(guān)數(shù)據(jù)的外部依賴關(guān)系信息;還有
其它元件需要而開發(fā)者沒有創(chuàng)建的資源。元件是自說明的(通過它們的貨單),所以.NET
應(yīng)用程序不需要修改注冊表才能工作。換句話說,你不再需要注冊表組件。在最好的情
況下,即客戶機(jī)里已經(jīng)有了.NET運(yùn)行庫時(shí),分發(fā)一個(gè)復(fù)雜的應(yīng)用程序可能只是把一個(gè)文
件夾復(fù)制到目標(biāo)機(jī)器上這么簡單的事。元件的另一個(gè)好處是:你可以讓不同的應(yīng)用程序
使用同一個(gè)DLL的不同版本,并且協(xié)調(diào)地運(yùn)行在一臺(tái)機(jī)器上。如果所有這些都可以像計(jì)劃
中那樣工作,有關(guān)DLL的地獄和版本的噩夢就將成為往事。
正確之路
Microsoft徹底更新了它的技術(shù),而不僅僅是核心語言。例如,在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)端
過程調(diào)用。ADO.NET在處理斷開的數(shù)據(jù)集時(shí)比 ADO的性能要好,并且具有更好的伸縮性。
Visual Basic.NET對我們都很熟悉的VB做了重要的改變。C++革命性地跳躍到.NET后
有了一個(gè)新名字:C#,而Visual Basic的名字沒變。然而,如果你把VB.NET當(dāng)作語法相
似的一門新語言而不是簡單的“升級”,可能掌握起來就要容易一些。本文給你一個(gè)起
點(diǎn),但吸收掌握各種知識,并對未來做出有根據(jù)的決定是一個(gè)艱苦的過程,它只是這個(gè)
過程的一條起跑線。我不知道.NET會(huì)有多么成功,它的很多地方吸引我,但有些地方并
非如此。這個(gè)工具做了大量承諾,它夸耀很多功能能使 VB開發(fā)者更簡單地創(chuàng)建更有伸縮
性的高端應(yīng)用程序。最后,它的成功將取決于開發(fā)者能多好地將它應(yīng)用于現(xiàn)實(shí)世界??v
觀Microsoft在PDC和Beta 1版本之間的性能和穩(wěn)定性上所跨過的這一步,我堅(jiān)定地認(rèn)為
:Microsoft走對了路!