簡介
Visual Basic .NET通常縮寫為VB.NET,在某些特定情況下也直接簡稱VB,比如在.NET這個大話題下或者與其他.NET語言一起討論的時候。
VisualBasic .NET屬Basic系語言,其語法特點是以極具親和力的英文單詞為基礎標識,以及與自然語言極其相近的邏輯表達,有時候你會覺得寫VB.NET代碼就好像在寫英文句子一樣,從這個角度來說,VB.NET似乎是最高級的一門程式語言,當然在Basic系語言中VB.NET也確實是迄今為止最強大的一門程式語言。
VisualBasic .NET的套用範圍包括Windows桌面、Web以及當下突然覺醒的正在奮力追趕的第三大移動平台Windows Phone。
由於改動太大,導致VB.NET對VB的向後兼容性不好,在業界引起不小的爭議。
VB.NET是"...中間解釋性語言“,這種說法極不準確,甚至完全錯誤。可能原編輯者是指的編譯器會先將源碼翻譯成MSIL(Microsoft Intermediate Language)中間語言這回事,但這和”解釋性語言“有很大差別。
1 目前版本
2005年9月以來,存在三種不同版本的Visual Basic .NET.
1 Visual Basic .NET:是隨vc#和ASP.NET一起在2002年發布的最初始的VB.net版本。C#被大力宣傳為微軟對付JAVA的王牌,受到媒體極力關注。然而VB.NET(有時被稱為VB7)影響面不廣,這導致VB社區之外很少人關注它。那些試用過此版VB.NET的人在層層幕布下發現一個強大卻艱深的語言,而且還有不少弱點,比如它比VB6來有一個大了十倍的進行時(RunTime),記憶體footprint也大大增加。
2 Visual Basic .NET 2003:是和.NET Framework 1.1一起發布的。新功能包括對.NET Compact Framework的支持和更好的VB升遷嚮導。並改進了運行狀況,IDE穩定性(尤其是後台編譯器),以及運行時RunTime穩定性。另外,VB.NET 2003還有一個學院版Visual Studio .NET 2003 Academic Edition (VS03AE),它是分發給各國某些學者免費使用的版本。
3 Visual Basic 2005:VB2005是VB.Net的重大轉變,微軟決意在其軟體名稱中去掉了.NET部份。在VB2005中,微軟增加了許多新功能,以引用VB對於初學者來說的一些優點:
A, Edit and Continue - 也許是從VB那裡丟掉的最大的功能,允許代碼的編輯和執行立即的執行恢復。
B, Design-time expression evaluation
C, My偽命名空間,提供了訪問.NET Framework特定域的不需大量編碼的簡單方式;還能動態產生類(顯然的是My.Forms);提供了改進的VB到VB.NET轉換嚮導;Using 語法,簡化了需要部署pattern to free resources的對象的使用;My編碼,可隱藏由VB.NET IDE寫的模板代碼;數據源綁定,簡化了資料庫C/S開發
上述功能(尤其是My)增強了VB.Net成為快速開發套用平台的可能,並與C#進一步區別開來。參見:
使用My開發
通過My命名空間訪問.NET Framework 和項目
Visual Basic 2005 通過增加新功能而填補了和其它所謂更強大的.NET語言的差距。
A, 增加了.NET 2.0語言功能包括:generics和Partial類(在一個檔案里定義一個類的某部份然後再添加更多的定義,這個方法在整合用戶編碼和系統自動生成編碼時尤其有用)。
B,XML注釋,可以被NDoc等工具處理而自動生成文檔
C, operator overloading
D, 支持在其它語言中已經廣泛使用的unsigned integer數據類型。
E, 支持在許多C衍生程式語言已提供的複合操作符如:"+=", "-="
4, IsNot專利:If Not X Is Y表達式被轉換成If X IsNot Y。當微軟為IsNot申請專利時招致了惡名(尤其來自Real公司)。
5, Visual Basic 2005 Express:作為VS產品線上的一部份,VB2005 Express是專為業餘愛好者和新手定製的免費的VS Express系列的一員。Express版本目的定位在幫助人們學習一種語言,所以他們有和標準版一致的用戶界面,只是少了一些高級功能。另外,VS Express版包括了VB6.0轉換器,提供了從VB老版本升級的可行方法。
2 和VB的關係
VB.net 是否該被看作VB的新版本或者是另一個完全不同的語言尚在爭議中。雖然並非顯而易見,但只要某個方法被棄用,它就會可會被自動轉換,這說明了該語言的句法並沒有出現很多突破性的變化,只是增加了對新功能的支持,比如結構化意外處理機制和短循環表達式(structured exception handling and short circuited expressions)。有一種變化會讓舊用戶迷惑:Integer和Long數據類型在長度上分別倍增。16位的 integer 在VB.NET中被認為是Short,而Integer和Long分別是32位和64位。同樣,WindowsFormsGUI編輯器和VB Form 編輯器在外觀和功能上非常相似。
出現巨大變化的是語意,從運行於基於COM的deterministic, reference-counted的引擎之上的編程環境,轉變為全面面向對象的基於.NET Framework的語言。.NET Framework包括了CLR(使用通用垃圾收集機制和JIT編譯引擎的虛擬機)和大量的類庫。VB開發者進入VB.NET要面對新增的大量類庫的問題,雖然這在VS 2005的My 功能中已有所闡述。
上述變化表明了許多在運行及維護相關最佳化事宜下面的假定,一些VB6函式和庫不再存在而其它的仍然可用,但是比不上.NET語言中自帶的可替換的函式和庫來得高效。即使它們可被編譯,但大多從VB6轉換而來的套用將需要一定程度上的重構(refactoring),以全面利用新語言的優點。在有關句法、套用調試、部署和術語等方面的變化,有大量的文檔可以參考。
1, 比較樣例:
兩個例子都彈出"Hello,World"並帶OK按鈕的信息框,它們顯示了VB和VB.Net在句法上的相似。
VB:
Private Sub Command1_Click()
MsgBox "Hello, World"
End Sub
VB.NET:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
MessageBox.Show("Hello, World")
End Sub
注意,VB.NET中的所有過程調用都必須加圓括弧,而VB6中只有調用函式或者VB6中使用Call來調用過程時
才需要加圓括弧,
另外,Command1和Button1並非必須,只是VB和VB.NET系統自動默認的控制項名。
兩個例子都卸載活動視窗,它們顯示了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
2, 爭議:許多資深的VB程式設計師抱怨VB.NET,因為VB.NET 2002丟掉了許多不再發行的VB6中使用的大量語言constructs和用戶界面功能,並且對保留下來的東西也改變了語意。例如,在VB.NET參數默認是以值方式傳遞的,而不是以引用方式。VB.NET 2002被半嘲諷半認真地稱為Visual Fred或VBDOTNOT。作為對2005-03-08微軟拒絕為VB6再提供維護與支持的回應,當月月底出現了反對者的請願(petition)
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 EditionandWindows Server 2003有自帶.NET Framework,其它版本需要另外安裝,這對用戶和程式設計師都不方便。
針對開發者的不滿,微軟主要做了如下努力:使新的開發更容易啟動,而把已開發的VB6代碼升級到VB.NET。他們的最新成果可以從這裡看到:http://msdn.microsoft.com/VBRun/, 那裡文章和源碼例子主要包括:完成VB6中的常見任務如列印預覽;整合VB6和VB.NET解決方案(dubbed VB Fusion),從VB6 代碼轉換到 VB.NET。
3 跨平台和開源的開發
目前和C#相比,針對VB.NET開發的開源工具發展得比較慢,雖然MONO開發平台提供了一個VB.NET特性庫(VB.NET-specific libraries)並著手研發一個編譯器和Windows Forms GUI 庫.
4 VB革命
VB1.0於1991年發布。這個連線程式語言和用戶界面的進步被稱為Tripod(有些時候叫做Ruby),最初的設計是由阿蘭·庫珀(Alan Cooper)完成的
4.1 時間線
* 1991年4月,Visual Basic 1.0 Windows版本發布
* 1992年9月,Visual Basic 1.0DOS版本發布。
* 1992年11月,VB2.0發布。它對於上一個版本的界面和速度都有所改善。
* 1993年夏天,VB3.0發布,分為標準版和專業版。其中包含一個數據引擎,可以直接讀取Access資料庫。
* 1995年8月,VB4.0發布了32位版本和16位的版本。其中包含了對類的支持。
* 1997年2月,VB5.0發布。程式設計師可以用32位的版本導入由4.0版本創建的16位程式,並且能順利編譯。同時還包含了對用戶自建控制項的支持。
* 1998年夏天,VB6.0發布。
* 2001年,Visual Basic.NET和.NET Framework發布。由於其使用了新的核心和特性,所以很多VB的程式設計師都要改寫程式。
* 2003年,Visual Basic.NET 2003和.NET Framework 1.1發布。
* 2004年,微軟發布了Visual Studio 2005的測試版本(代號Whidbey)。包含了.NET Framework2.0的測試版本。
* 2005年,微軟宣布將不會再對非.NET版本的VB進行支持。VB社群立即作出反應表示關心這個訊息,一些老用戶還遞交了希望能夠繼續對VB進行技術支持的請願書。微軟目前還不願意改變他們的決定。
* 2005年11月7日,Visual Studio2005正式發布。
5 加減乘除的程式
5.1 使用指定的值下執行指定運算
例子1:程式中只利用一個按紐及清單進行指定的值下執行指定運算 例子中:增設以下的圖形工具
圖形工具 預設名稱 更改名稱 屬性 顥示文字
---------------- ---------------------
按紐 buton1 btn1 text 計算器
顥示清單 lstbox1 lst1 text
---------------------------------------
設定名稱 設定屬性
----------------
N1 double
N2 double
N3 double
answerdouble
設定宣告屬性 指出不同的值代替數字N1,N2,N3 及answer
Private Sub btn1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn1.Click
Dim N1, N2, N3, answer As Double
N1= 4000
N2= 9
N3= 5
answer = (N1/ (N2- N3))
Lst1.Items.Add(answer)
end sub
解釋:
第一列 - 為btn1按紐對系統VB的宣告(VB.NET程式中已提供的)
第二列 - 為對代數N1,N2,N3 及answer 進行的多重宣告(這例子指派代數為Double數字
一定要使用數字若有小數會同時顥示小數)
值得一提的是使用( , )來宣實是一種懶的做法,最正確的是
Dim N1 as double
Dim N2 as double
Dim N3 as double
Dim answer as double
一列一列地宣告一次
但是小程式可以這樣做,當程式過大時會建議用懶的做法
第三列 - 當N1 是 4000
第四列 - 當N2 是 9
第五列 - 當N3 是 5
第六列 - 同時 answer = (N1/ (N2- N3))的數學運算
第七列 - 因此清單上會顥示運算答案
第八列 - 程式結束(這個按紐btn1)
以上一最簡單的羅緝運算,也是VISUAL BASIC 發展的關鍵 最後以上的宣告方法也可以通用於VB版本中
5.2 輪入指定的值下執行指定運算
例子2:在表單上先輪入一個或以上的值數值再進行運算。 方法:1.與上例相同增加以上述圖形工具 2.增設以下的圖形工具
圖形工具 預設名稱 更改名稱 屬性 顥示文字
----------------------------------------
文字盒 textbox1 txt1 text 0
文字盒 textbox2 txt2 text 0
文字盒 textbox3 txt3 text 0
----------------------------------------
設定與上例的相同宣告屬性
設定名稱 設定屬性
------------------
N1 double
N2 double
N3 double
answerdouble
-----------------
注意:只顥示由第三列至第七列的改變
注意:例子註解將使用( ' )取代,此符號旨可使用於Visual Basice的版本中作為註解,程式將不理會內函的內容。
N1= txt1.text '指示txt1的內容被n1所暫代
N2= txt2.text '指示txt2的內容被n2所暫代
N3= txt3.text '指示txt3的內容被n3所暫代
answer = (N1/ (N2- N3)) '相同的除數及淢數
Lst1.Items.Add(answer) '計算後將顥示在清單上
注意1:(txt1, txt2, txt3)後的.text是指把被顥示的內函的值文字或數字(但不包函符*號或特殊字)的設定。
注意2:(當使用者不想使用清單作顥示時,而想用文字盒作為替代,那麽我們進行以下的改動
假設我們使用例1進行修改時
步驟1.增設以下圖形工具 -
圖形工具 預設名稱 更改名稱 屬性 顥示文字
----------------------------------------
文字盒 textbox4 txt4 text 0
步驟2刪除 - 把設計版面中的清單中(lst1)中清除 步驟3刪除 - 把程式碼中第六行的Lst1.Items.Add(answer)清除. 步驟4更改程式碼 - 在被清除的同一行中加入:txt1.text = answer
6 設定指定的文字及顯示在清單上
7 Format String
8 For Loop
9 if Then Else
10 宣告類別
Double浮點數String字串 integer整數long長整數
11 Data Base