VisualBasic.NETBeta1試用報告
本文描述使用Visual Basic .NET 測試版的感觸,說明了他突飛猛進的發展,通過從工作環境和編碼來闡述了VB7的變化。
前 言
早半年前就在網上看見一大堆的關于VB7的介紹,說的天花亂墜,我向來對新技術是非常歡迎的,所以收集了很多這方面的資料,可收集的越多,心就越癢癢,天天盼著VB7從天而將。
直到大概去年10月份底,微軟的站點提供了Visual Studio .NET的測試版下載,可他要的ID和Password,眼巴巴的看著DownLoad幾個字母,我痛啊!
終于在今年1月初,我搞到一套(怎么得來的我是不必說了),經過好一番折騰,終于他、他……出來了(我太激動了)。
圖一
環境印象
一、界面
也許大家首先看見上圖的第一印象就是現在微軟又回到平面時代,也許是看了太多的3D圖,我個人是非常喜歡這種樣式的,微軟的Office 10也是采用同一樣式的工具欄。
另一個我很喜歡的地方是現在的工作空間利用率更高了,原先典型的工作環境-工程欄、屬性欄、工具欄和立即窗口,幾個小窗口把代碼窗口擠的簡直沒辦法工作了。現在所有的工具欄都可以自動隱藏了(圖二-2),真的非常方便。而且微軟在工作窗口的上部添加了切換頁簽(圖二-1),更加提供了效率,從這一點上我不的不很佩服微軟。
界面上的另一個變動是部分窗口采用了Web方式,個人認為Web Form是個雙刃刀,他可以采用腳本后期再修改,但他相對Windows Form缺乏足夠的界面靈活性,而且性能不佳,更糟糕的是連微軟自己都無法在Web Form上實現一些功能,所以造成界面有時不同意。
圖二
二、編碼
在VB .NET環境下編寫代碼我發現能偷懶的微軟都可以讓你偷懶了。在圖三-3處大家可以看見VB幫你自動填寫了END IF和NEXT;你在定義函數時,他會自動出現ByVal、ByRef等選擇;更加難以想象的是你在打入On Error Goto時,他出現了0和-1的選擇,如果你在這個子程序中已經定義了行標,他也會自動加入到選擇中,我重新輸入On Error Resume后,他自動出現Next,我倒!
圖三
在VB .NET中語法檢查更加迅速直接,而且設計的更加體貼。以前你輸入IF后突然想起想起前面的變量沒有定義,于是我就想立即將光標定位到開始輸入變量的定義,可是VB6出來討厭的語法錯誤對話框,真是非常麻煩,現在VB7聰明多了,他會在錯誤的地方打入下波浪線,如果你想知道錯誤的原因,可以將光標移動到錯誤處,VB7自動給出提示。
現在的語法檢查可以識別變量是否定義(圖三-2),而且可以立即的識別關鍵字了。
可折疊代碼也是可以稱道的地方(圖三-1),這樣編寫出的代碼觀看會更清晰。初學編程的人總是把代碼寫的亂七八糟,在VB7種你再也看不到這種情況了,試試看光標從第二行移走時他會發生什么。
For I = 1 To 100 '1
I = 1 '2
Next '3
Office 2000中的多次剪切板,你一定十分喜歡,現在當你Copy一段代碼到剪切板時在Toolbox面板的Clipboard Ring卡片中你能找到剪切板中的內容。
三、輔助工具
現在VB、VC、C#共享了Visual Studio的統一工作環境了,你不再會為VC的工具而羨慕無比,一般來說,你在VC下看到的,在VB中一樣能用。
語 言
一、完全的面向對象
面向對象的好處我是不必說了,在VB7沒有出現之前VB一直被別人譏笑為基于對象而不是面向對象的語言,雖然微軟安慰我們說:使用接口會比使用繼承更好等一大堆的塘塞之語,顯然這種說法是自欺欺人的,現在VB7出現了,我們可以理直氣壯的說:我們使用完全面向對象的語言。
封裝性:也許你會說好像VB4都實現了封裝性,但連VB6的封裝性還不完善,例如沒有繼承的友元(VB6更本沒有繼承,所以也談不上繼承的友元)。
繼承性:這可能是我盼望VB7的更本原因,我不知道因為VB沒有繼承性而痛苦無比,看著一大堆Copy過來有Copy過去的代碼我頭都大了,不要說沒有效率,維護這些代碼才是最要命的。現在你看看VB7是怎么寫的吧:
Public Class Form1
Inherits System.WinForms.Form
就這么簡單,用同樣的方法,你可以自己繼承出一個自己的TextBox對象-藍色底紋、自動選擇、回車響應一大堆多功能加進去,而你寫的代碼比原先寫控件的代碼不管是總量還是質量還是功能簡直是--天壤之別。
重載:在VB7中重載也是非常方便的事,例如下面的代碼:
Overloads Sub Display(ByVal theChar As Char)
'……
End Sub
Overloads Sub Display(ByVal theInteger As Integer)
'……
End Sub
多態:在VB6中通過接口,我們已經能夠很好的實現多態了,在VB7中接口的支持更加好,比如VB6中接口必定是公有的,但VB7中你可以定義為私有的,而不讓別人看見(見下面代碼)。
二、直接支持多線程
在VB7中你不必用API費力的實現多線程了,VB7提供了極其簡單的方法:
Dim MyThread As New System.Threading.thread(AddressOf UseAnimal)
有了這樣方便的方法你一定能夠通過VB7實現和VC一樣速度的程序來。
三、更加靈活的方法
這一點我覺得早就應該有的功能,因為我實在想不起來在主流的程序語言中,還有哪一個不能實現這些功能的。
我們現在要實現VC中一直非常值得驕傲的語法之一:i++,在VB7中你可以這樣:
i += 1
也許你會發現VB7這樣寫一是比VC要好理解一點,二是他會更靈活,而且VB7中有更多的這樣相似的語法。例如:
i += 100
i = 100
i *= k
在VC中你可以在聲明變量時初始化變量,VB7也可以這樣,而且對象聲明時也可初始化:
Dim Distance As Double = 0
Dim mDog As Dog = New Dog("Init String")
四、一切都是對象
現在你仍然能夠使用諸如Integer、Long、String之類的“變量”,但他們現在實際上是一個對象了。正因為如此,我們原先在VB6這樣的一句話:
Msgbox Err.Description +Cstr(Err.Number)
在VB7中你仍然可以這樣書寫,但你現在有另一種辦法了:
Msgbox(Err.Description + Err.Number.ToString)
那為什么要這樣做呢?這樣做的好處是你不再需要背誦一大堆的函數了,而且時間一長你就會覺得這樣非常的棒。
五、結構化的出錯
在VB發展到VB6時,不要說對象編程不徹底,甚至你有時不得不使用比結構化編程還要原始的GOTO語句,你在VB6中到處都能看見這樣的語句:
On Error Goto Err_Load
VB7中人員允許你這樣使用,但微軟提供了更好的辦法:
Sub TryExample()
Dim x As Integer ' Declare variables.
Dim y As Integer
Try ' Setup structured error handling.
x = y ' Cause a "Divide by Zero" error.
Catch E As Exception ' Catch the error.
Debug.WriteLine(E.ToString)
Finally
Beep() ' Beep after error processing.
End Try
End Sub
是不是有點像Java。
六、其他
我認為VB7對于因特網的超強支持不能算是語言的增強,就像面包車噴了新漆時不能說他就變成轎車一樣,我們只能說他功能更強大或更活看一點。但微軟把VB7改叫.NET,我怎能不說他的網絡功能呢。
目前VB7中提供強大的對XML、HTML、JScript、VBScript、Web Form和Web Service等的編寫環境,雖然我同意因特網是未來的發展方向,但我似乎太顯示,對這些功能不大敏感,所以也沒有過多的使用。
后 記
老實說VB7強大的功能沒有讓我失望,看見VB7現在的發展我突然想對中國的軟件也提提意見。
可以看出VB7中微軟在易用性和智能化方面花了大量的工作,我想這也是微軟的產品之所以受歡迎的原因,因為比微軟功能強大的軟件太多了,但他們大多使用不方便。
易用性包括醒目的提示、統一的界面、良好的界面布局和高度靈活的的界面定制能力,其實對程序員來說這些問題是不存在的技術性的問題的,那為什么中國的很多軟件不能做到呢,說得好聽一點是工作態度不嚴謹,說的難聽就是太懶。——你能做到的為什么不做呢!
其次微軟的成功我覺得還有另一部分的原因:它能提供整體的解決方案,看看微軟的產品都是家族式的產品,因為沒有人愿意一項工作使用10家公司的10種產品,他們更愿意用一家公司的10中產品,哪怕這會犧牲部分軟件的功能。
有些人會說我現在沒有微軟那樣財大氣粗,你叫我怎么開發全套的軟件呢,這又涉及微軟成功的第三點:良好的擴展性。微軟不僅公開它的COM對象庫,還鼓勵你去做二次開發,它提供了盡可能完整的文檔。我覺得這筆公開源代碼要更實際,不要以為這樣會泄漏你的商業機密,但我想這比得到的好處要少得多,很簡單的問題你看WORD早在95版就公開了它的對象結構,但目前有人能做出微軟一樣的WORD嗎?
公開你的對象庫是更好的聯合,可能你開發了一個工資管理系統,但你還需要一個財務管理系統,自己開發嗎?不!和有財務系統的公司簽訂合同創建集成的系統,雙方收益,小小得大。