VB.net 是否該被看作VB的新版本或者是另一個完全不同的語言尚在爭議中。雖然並非顯而易見,但隻要某個方法被棄用,它就會可會被自動轉換,這說明了該語言的句法並沒有出現很多突破性的變化,隻是增加了對新功能的支援,比如結構化意外處理機制和短迴圈運算式(structured exception handling and short circuited expressions)。有一種變化會讓舊使用者迷惑:Integer和Long資料型別在長度上分別倍增。16位元的 integer 在VB.NET中被認為是Short,而Integer和Long分別是32位元和64位元。同樣,Windows Forms GUI編輯器和VB Form 編輯器在外觀和功能上非常相似。
出現巨大變化的是語意,從執行於基於COM的deterministic, reference-counted的引擎之上的編程環境,轉變為全面物件導向的基於.NET Framework的語言。.NET Framework包括了CLR(使用通用垃圾收集機制和JIT編譯引擎的虛擬機器)和大量的類別庫。VB開發者進入VB.NET要面對新增的大量類別庫的問題,雖然這在VS 2005的My 功能中已有所闡述。
上述變化表明了許多在執行及維護相關最佳化事宜下面的假定,一些VB6函式和庫不再存在而其他的仍然可用,但是比不上.NET語言中內建的可替換的函式和庫來得高效。即使它們可被編譯,但大多從VB6轉換而來的應用將需要一定程度上的重構(refactoring),以全面利用新語言的優點。在有關句法、應用偵錯、部署和術語等方面的變化,有大量的文件可以參考。
[編輯]比較樣例
[編輯]移除活動窗口
兩個例子都移除活動窗口,它們顯示了VB和VB.Net在句法上的不同。
VB:
Private Sub cmdClose_Click()
Unload Me
End Sub
VB.NET:
Private Sub cmdClose_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdClose.Click
Me.Close()
End Sub
[編輯]爭議
許多資深的VB程式設計師抱怨VB.NET,因為VB.NET 2002丟掉了許多不再發行的VB6中使用的大量語言constructs和使用者介面功能,並且對保留下來的東西也改變了語意。例如,在VB.NET參數預設是以值方式傳遞的,而不是以參照方式。VB.NET 2002被半嘲諷半認真地稱為Visual Fred或VBDOTNOT。作為對2005-03-08微軟拒絕為VB6再提供維護與支援的回應,當月月底出現了反對者的請願[2]。
VB.NET的支持者們認為新語言在很多方面比舊版本更為強大,比如它以相比早期版本更為自然、緊密和完全的方式地加入了現代物件導向的編程範式。反對者們有不同意見,雖然VB6對物件模型支援有缺點,但是二次開發升級到VB.NET 的成本比升級後的收益要高得多。而開發軟體發行網際網路版本的獨立程式設計師也對VB.NET的RunTime尺寸過大不滿。
相對編譯成機器碼的語言,編譯成MSIL的語言包括VB.NET比較容易被反編譯。
微軟提供了VB到VB.NET的自動轉換器,雖幾經改進,但仍無法轉換全部代碼,幾乎所有非小型程式都需要人工修改以完成編譯。為了執行最佳化,大多程式需要大量工作去重構。
主要是進行演算的VB程式自然會更容易升遷,但是採用了以下功能,如資料庫支援、圖形、unmanaged operations,或者在安裝啟用明細方面都很麻煩。不幸的是,這些恰好是許多商業應用的核心。
另外,Win98及其以上的系統就內建了VB6的執行時(RunTime)庫,而VB.NET需要安裝大得多的.NET Framework。除了 Windows Vista, Windows XP Media Center Edition, Windows XP Tablet PC Edition、Windows Server 2003、Windows Server 2008、Windows 7、Windows Server 2008 R2有內建.NET Framework,其他版本需要另外安裝,這對使用者和程式設計師都不方便。且.NET Framework 3.5版僅支援Windows XP、Vista以後的Windows版本。
針對開發者的不滿,微軟主要做了如下努力:使新的開發更容易啟動,而把已開發的VB6代碼升級到VB.NET[3]。例子主要包括:完成VB6中的常見任務如預覽列印;整合VB6和VB.NET解決方案(dubbed VB Fusion),從VB6 代碼轉換到 VB.NET。
[編輯]語法介紹
[編輯]Select Case
VB.Net 支援如下的 Select 語句。
Dim J, K As Boolean
Dim check1 As String = String.Empty
J = True
Select Case True
Case J
check1 = "a"
Case K
check1 = "b"
End Select
[編輯]跨平台和開源的開發
目前和C#相比,針對VB.NET開發的開源工具發展得比較慢。MONO開發平台提供了一個VB.NET特性庫(VB.NET-specific libraries)並以推出了一個編譯器,還有一個Windows Forms GUI 庫在開發中。
[編輯]沿革
^ Option Strict can be used to switch between safe and unsafe type checking.
^ http://classicvb.org/petition/ petition
^ http://msdn.microsoft.com/VBRun/ VBRun website
[編輯]外部連結
[編輯]官方網站
(英文)Microsoft's VB.NET官方網站
(英文)Visual Basic 2005 Express Edition官方網站
(英文)VBRun 網站 - VB6的Microsoft官方網路資源
(正體中文)Visual Studio Express 首頁
(正體中文)Visual Studio Express Visual BASIC 下載頁面
[編輯]教程
Startvbdotnet.com:免費VB.NET教程
使用My開發
透過My名稱空間存取.NET Framework 和項目
[編輯]其他
SharpDevelop - VB.NET的一個免費IDE
VB.NET的MONO應用
Doing Objects in VB.NET and C#,免費電子書
VB.NET Knowledge Base - VB.NET知識庫 / 程式設計俱樂部