Visual Basic。NET是Microsoft Visual Studio的主要組件之壹。NET套件。的。NET版本的Visual Basic增加了更多的功能,並發展成為壹種完全面向對象(就像C++)的編程語言。本文將介紹VB.NET的新功能,比較VB 6.0和VB的區別。NET,並解釋如何使用VB.NET編寫簡單的應用程序。
VB.NET是什麽?微軟推出了壹個全新的編程和操作系統Framework——.NET,它支持多種語言使用公共***開發應用程序。NET圖書館。這些應用程序運行在。NET框架。使用Visual Basic在。NET框架是VB.NET。
首先,讓我演示如何用VB編寫最簡單的控制臺程序。網名:妳好世界。
1.2妳好,世界!“妳好世界!”它是初學者學習Windows編程的代表性程序。我們的第壹個節目叫做“妳好,VB.NET世界”。程序在控制臺上輸出壹句話:“妳好,VB.NET世界!”,代碼如下:
代碼1.1:妳好VB.NET世界示例進口系統。
模塊模塊1
副總管()
系統。Console.WriteLine(“妳好,VB.NET世界)
末端接頭
結束模塊
1.3 VB.NET編輯器和編譯器您可以在任何文本編輯器(如記事本或VS.NET IDE)中編寫上述代碼,然後將其保存為HelloWorld.vb .編寫代碼後,在命令行或VS.NET IDE中編譯它。VB.NET編譯器vbc . exe【】【1】已包含在Microsoft。NET Framework SDK,可以從IDE或命令行調用它。要從命令行編譯HelloWorld.vb,請在命令行窗口中輸入。
vbc hello world . VB/out:hello world . exe/t:exe
編譯後,在當前目錄下創建HelloWorld.exe。在資源管理中,雙擊圖標或在命令行中執行它,程序就會正確運行。祝賀您加入VB.NET開發商的行列。
進口報表
如妳所知,大多數。NET類型在命名空間中定義。名稱空間是定義和管理類別的類別。看著。NET Framework類庫中,可以看到數百個命名空間。例如,系統命名空間包括諸如控制臺和對象之類的類型定義。如果您想使用Console類,您需要使用Imports命令導入系統名稱空間。如下所示:
Imports系統甚至可以顯式調用名稱空間,而無需使用import導入它。以下示例顯示了“Hello World!”沒有進口。程序:
代碼1.2:妳好VB.NET世界示例模塊模塊1。
副總管()
系統。Console.WriteLine(“妳好,VB.NET世界)
End SubEnd Module1.4解析“妳好VB.NET世界!”程序的第壹行是:
進口系統;系統命名空間定義控制臺類,該類用於讀取和寫入控制臺(命令行窗口)。然後定義壹個模塊:模塊Module1+0。
...endmodule所有VB程序都包含壹個Main()方法,它是應用程序的入口點。在示例程序中,我們調用Console。WriteLine()寫“妳好VB.NET世界!”到控制臺。:
副總管()
控制臺。WriteLine(“妳好,VB.NET世界)End SubWriteLine()方法屬於Console類,負責將帶有行結束符的字符串寫入控制臺。如前所述,控制臺類是在系統名稱空間中定義的,您可以通過直接引用來控制類成員。
Console類負責讀寫系統控制臺。Read和ReadLine方法用於控制臺輸入,WriteLine方法用於控制臺輸出。
表1.1由控制臺類定義的方法
方法使用示例
讀取單個字符int i = Console。read();
ReadLine讀取壹行字符串str = Console。ReadLine();
寫壹行控制臺。Write(“Write:1“);
WriteLine用行結束符寫入壹行。
控制臺。WriteLine(“用行測試輸出數據“);
1.5 VB.NET有什麽新特點?VB.NET比VB6.0更加穩定和完全面向對象。也許妳記得VB6.0不支持繼承、重載和接口,所以它不是真正面向對象的。VB.NET支持這些面向對象的特性。VB6.0有兩個薄弱環節——多線程和異常處理。在VB.NET中,開發多線程應用程序與使用C++/C#沒有什麽不同,也支持結構化異常處理。稍後我們將詳細解釋這些特性。
以下是VB的列表。網絡的特點-
面向對象編程語言。支持繼承、重載、接口、* * *共享成員和構造函數。支持所有CLS功能,如訪問控制。網絡課程,與他人互動。NET語言、元數據、公共* * *數據類型、委托等等。多線程支持。結構化異常處理。1.6命名空間和集合我們的第壹個VB.NET程序在前面已經討論過了。在這個程序中首先吸引人們註意的是名稱空間。在。NET參考文檔中,您會發現每個類都屬於壹個命名空間。那麽,名稱空間到底是什麽?
名稱空間是類和組件的邏輯組合,其目的是定義。按類別分類。微軟借用了C++類打包:命名空間的概念來描述這種組合。中的組件。NET框架被稱為程序集。全部。NET代碼在數百個庫文件(dll)中定義。命名空間組織程序集中定義的類。壹個命名空間可以包含多個程序集,壹個程序集也可以在多個命名空間中定義。命名空間樹的根節點是系統命名空間。在。NET庫中,每個類都定義在壹組相似的類中。比如系統。數據命名空間只包括與數據相關的類。同樣,系統。多線程只包括多線程類。
使用支持的語言創建新應用程序時。NET(如C#、VB.NET、C++。網等。),您會註意到每個應用程序都被定義為壹個名稱空間,所有類都屬於這個名稱空間。通過引用這個命名空間,其他應用程序可以訪問這些類。英寸NET中,代碼被編譯成中間語言(IL),IL代碼、元數據和其他資源文件存儲在assembly中。同壹程序集可以附加到壹個或多個Exe/DLL。全部。NET庫存儲在程序集中。
1.7 VB。NET:抽象、封裝、多態和繼承是完全面向對象編程語言的四個基本屬性。VB6.0不支持繼承,但VB.NET不支持。所以,像C++壹樣,VB.NET是壹種完全面向對象的編程語言。
類和ModuleVB.NET使用該類...End Class語句創建壹個類。每個VB.NET包括至少壹個模塊。模塊在Module…End模塊語句對中實現。應用程序的主模塊是主方法,它是應用程序的入口點。
與VB6.0類似,您可以使用Function/Sub關鍵字來定義方法。下面的示例演示如何創建類、添加方法以及從主程序調用方法:Imports System。
模塊模塊1
副總管()
Dim cls As TestClass = New TestClass
控制臺。WriteLine(cls。我的方法)
末端接頭
類別測試類別
字符串形式的函數MyMethod()
返回“測試方法”
結束功能
結束類
End ModuleProperty是類變量的公共描述。Property…End Property語句用於創建屬性。屬性的Get/Set方法分別用於獲取和設置屬性值。在下面的示例中,數據是TestClass的屬性。
進口系統
進口系統。安慰
模塊模塊1
副總管()
Dim cls As TestClass = New TestClass
WriteLine(cls。我的方法)
WriteLine(cls。數據)
cls。Data =“新數據“
WriteLine(cls。數據)
末端接頭
結束模塊
類別測試類別
private strData As String =“Some Data“
字符串形式的函數MyMethod()
返回“測試方法!”
結束功能
向類中添加數據屬性
字符串形式的公共屬性數據()
得到
返回strData
結束獲取
Set(字符串形式的ByVal值)
strData =值
結束集
結束屬性
重載VB.NET通過重載關鍵字支持方法重載。使用該關鍵字,您可以定義名稱相同但參數不同的方法。
類成員訪問域
除了原有的私有和公有,VB.NET引入了幾個新的關鍵詞。所有訪問域關鍵字的列表如下:
關鍵詞範圍
私立僅限於課堂。
Public可以從類外部訪問。
Friend僅限於類所屬的應用程序。
Protected只能由類及其派生類訪問。
受保護的Friend可以由類、應用程序和派生類訪問。
繼承繼承是面向對象編程語言中最常用的技術。繼承使您能夠重用類代碼和函數。
VB.NET支持繼承,但VB6.0不支持。繼承的優點是可以使用任何人編寫的類,從這些類中派生出自己的類,然後在自己的類中調用父類函數。在下面的例子中,類B是從類A派生的,我們將從類B調用類A的方法MethodA..
進口系統
進口系統。安慰
模塊模塊1
副總管()
Dim bObj As B =新B
WriteLine(bObj。MethodA()
末端接頭
結束模塊
定義的A類
公共A類
字符串形式的函數MethodA()
返回“調用方法A”
結束功能
結束類
類B,從類a繼承。所有成員(公共的和受保護的)
現在可以通過B訪問。
公共B類
繼承壹個
字符串形式的函數方法b()
返回“方法B被調用。”
結束功能
結束類
您可以從壹個類派生多個自定義類,也可以從多個類派生壹個自定義類。
* * *成員類的* *成員由該類的所有實體* * *共享。* * *享受成員可以是屬性、方法或字段/範圍。當您不想讓用戶完全控制自己的類時,共享成員非常有用。例如,您可以開發壹個類庫,允許用戶通過* * *成員使用它的壹些功能。
您可以通過類本身引用* * *成員,而無需通過類的實體。示例:模塊Module1
副總管()
WriteLine(A . MethodA())
末端接頭
結束模塊
定義的A類
公共A類
字符串形式的共享函數MethodA()
返回“調用方法A”
結束功能
結束類
多線程VB語言的弱點之壹是缺乏編寫自由線程程序的能力。在。NET框架,所有語言* * *都享有CRL(公共運行時庫),也就是說,妳可以用VB.NET、C#或其他語言編寫相同的程序。網絡語言。
系統。線程命名空間定義了線程類。我們只需要引入系統。使用線程類的線程命名空間。
系統。Threading.Thread類提供線程對象,可用於創建或銷毀線程。
創建線程使用Thread類的實體創建壹個新線程,然後開始用該線程執行該線程。啟動方法。線程構造函數接受壹個參數,該參數指示要在線程中執行的過程。在下面的示例中,我想在O Thread 1(Thread類的壹個實體)的第二個線程中執行SecondThread過程:
oThread1 =新線程(第二個線程的地址)
第二個線程過程如下所示:
Public Sub SecondThread()
將I設為整數
對於i = 1至10
控制臺。WriteLine(I。ToString())
然後
末端接頭
然後,調用Thread。Start()啟動線程:
oThread1開始()
以下代碼創建了兩個第二線程:
進口系統
進口系統。穿線
模塊模塊1
公共線程1作為線程
將oThread2作為線程公開
副總管()
oThread1 =新線程(第二個線程的地址)
oThread2 =新線程(第三線程的地址)
oThread1開始()
其他線程2。開始()
末端接頭
Public Sub SecondThread()
將I設為整數
對於i = 1至10
控制臺。WriteLine(I。ToString())
然後
末端接頭
公共子線程()
將I設為整數
對於i = 1至10
控制臺。WriteLine(“A“+I。ToString())
然後
末端接頭
結束模塊
銷毀線程調用Abort方法來銷毀(中止)線程。在調用Abort之前,請確保使用IsAlive來判斷線程是否處於活動狀態。
如果oThread1。那我還活著
oThread1中止()
如果…就會結束
掛起線程可以使用Sleep方法來掛起線程執行。Sleep方法接受壹個以毫秒為單位的參數,指示線程應該暫停多長時間。
以下示例將線程暫停1秒:
其他線程2。sleep(1000)您還可以使用Suspend和Resume方法來暫停和繼續線程執行。
設置線程優先級Thread類的Priority屬性用於設置線程優先級。該屬性可以設置為正常、高於正常、低於正常、最高和最低。比如:
其他線程2。優先級=線程優先級。最高線程和單元使用ApartmentState屬性設置線程的單元類型,可以是STA、MTA或Unknown【】【2】:
奧斯瑞德。公寓州=公寓州。mtamts意味著可以使用多線程模式,而STA只能由單線程執行。
公共枚舉公寓狀態
{
STA = 0,
MTA = 1,
未知= 2,
}
1.8結構化異常處理異常處理也稱為錯誤處理。作為壹名VB程序員,您必須熟悉VB6.0的錯誤處理語句,例如On Error Goto和On Error Resume Next。這種類型的錯誤處理稱為非結構化異常處理。在VB.NET,微軟引入了結構化異常處理機制。VB.NET支持試捕..最後是類似C++的控件。嘗試嘗試..捕捉..最後有以下結構:嘗試。
可能導致異常的代碼。
捕捉
發生異常時處理異常的代碼。
最後
清理現場
結束嘗試
Try語句塊用於引發異常。如果發生異常,將在Catch語句塊中進行處理。Finally語句塊是可選的,在需要釋放資源時特別有用。
1.9 VB6.0和VB.NET的區別不僅僅是上面提到的語言演變,還有壹些語法變化。所有這些語言和語法的變化都可以在MSDN找到,本文只是簡單介紹壹下。
數據類型的變化VB.NET的壹些數據類型得到了改進。以下是變化對照表。
數據類型VB 6.0 VB.NET
整數16位大小32位大小
長32位大小64位大小
Currency用於存儲大型浮點數,並由支持更高精度的decimal代替。
Variant可以存儲任何類型的數據而不是對象類型,也可以存儲任何類型的數據,但結果更好。
日期日期類型存儲為雙精度。引入DateTime類型是為了以不同格式存儲日期。
在VB.NET,Short的數據類型是16位。Short、Integer和Long都相當於CLR的系統。Int16,系統Int32和系統。Int64類型。變量聲明的變化在VB6.0中,變量聲明有很多限制。其中之壹是不能在同壹行中聲明多個變量。如果必須在壹行中聲明多個變量,則必須指明每個變量的類型,否則將默認為Variant類型。
Dima1,a2asInteger dima3 asInteger,a4 asinteger第壹行的a1為Variant類型,a2為integer類型。第二行中的兩個變量都是整數類型。VB.NET支持多個變量的對等聲明,例如:
Dim a1,a2,a3作為整數變量的初始化是另壹個問題。在VB6.0中不能同時聲明和初始化變量,但是VB.NET支持這個特性。
dim name as string =“mahesh“system。console . write(name)也可以用於聲明常量:Const DT_COUNT As Integer = 23 New關鍵字。在VB.NET,New關鍵字用於創建對象。由於數據類型是對象,因此New關鍵字用於創建數據類型對象。
dim I as integer = new integer()I = 10系統。console . writeline(I . tostring())代碼塊級支持。像C++壹樣,VB.NET支持代碼塊級別的範圍檢查。語句塊中聲明的變量僅在語句塊內有效。
對於I = 1至10 dim P as longsystem。控制臺。下壹個系統。控制臺。writeline(P . tostring())將在VB.NET中得到壹個編譯錯誤,因為P在For外部是不可訪問的..下壹個語句塊。在VB6.0中,此代碼可以通過。
改進的類型安全性
在VB6.0中,當您聲明對外部過程的引用時,可以將任何類型的參數指定為any。Any關鍵字禁止類型檢查,並允許傳入和返回任何數據類型。
VB.NET不支持Any關鍵字。您必須指定每個參數和返回值的數據類型。陣列VB.NET對陣列進行了明顯的更改。
數組範圍。在VB.NET,妳需要特別註意數組的範圍。VB6.0數組的默認下限為0,因此數組中的元素數和數組的上限加1。以下數組邊界的範圍從A(0)到A(10),* *有11個元素:
dim A(10)作為Single可以使用Option Base將下限值更改為1。在VB.NET中,像C++壹樣,數組的下限為0,並且不支持Option Base。註意:MSDN文檔指出數組只能包含與其大小相等的元素數量。例如,Dim A(10)As Integer只能包含10個元素(從A(0)到A(9)),但在編譯以下代碼時,我發現它運行良好。該數組似乎包含11個元素。
dim A(10)為整數A(0)= 12 A(2)= 24 A(10)= 23系統。console . WriteLine(A(0))。ToString())系統。console . WriteLine(A(10)。tostring())系統。console . writeline(Ubound(a)。tostring())系統。console . writeline(lbound(a)。tostring())lbound和ubound分別返回0和10。ReDim和固定數組。在VB6.0中可以指定固定長度的數組。
將數組(0到6)設為整數
這裏的ArrWeekDays數組的長度是固定的,並且不能通過ReDim語句更改長度。VB.NET不支持固定長度數組,因此ReDim總是有效的。
數組有兩種聲明方式:dimarr weeks(6)as integer dimarr weeks()as integer = { 1,2,3,4,5,6} redim語句。在VB6.0中,ReDim用於初始化動態數組。在VB.NET妳不能用它來做陳述。ReDim只能用於更改數組長度,但不能更改數組維數。
ObjectVB6.0中的Variant vs Variant數據類型可以存儲任何類型的變量,而VB.NET中的Object也具有相同的能力。
算術運算符VB.NET支持類似於C++的快捷方式。下表顯示了正常操作和快捷操作之間的差異。快捷鍵也可以用於*、/、|、&;運算符,如。
運算符常規語法快捷鍵加法A = A+5 A +=5減法A = A–5A-+5固定長度字符串
在VB6.0中,可以在聲明字符串時指定字符串的長度。VB.NET不支持固定長度的字符串。
布爾運算符VB6.0中的And、Or或Xor語句是按位運算符。在VB.NET,它們是布爾運算符。執行這些操作將返回true或false。VB.NET引入了新的運算符來完成位運算。
運算符描述BitAnd bitor bitxor bitxor bitwise xor bitwise Not bitwise Not結構和自定義類型在VB6.0中,使用Type…End類型語句塊創建結構或自定義類型。例如:
標準記錄類型
整數形式的StdId
字符串結束類型的標準名稱
VB.NET引入了壹種新語法:結構。不再支持Type…End類型。結構…結束結構與C++相同。您可以指定結構中每個元素的可訪問域,例如Public、Protected、Friend、Protected Friend、Private等。例如:
結構標準記錄
整數形式的公共標準Id字符串形式的公共標準名稱
StructureVB.NET的私有STD內部as字符串結束結構可以像類壹樣擁有方法和屬性。在VB6.0中,New和Nothing關鍵字用於聲明對象並初始化它。VB.NET不支持對象的隱式創建。如前所述,即使是數據類型也是對象。您可以通過以下兩種方式創建數據類型或對象:dim I as integer dim I as integer = new integer()//如果I = nothing則執行某些操作如果VB6.0不支持Set語句來分配對象,則結束。示例:Set myObj = new MyObjectSet a = b在VB.NET,您不需要使用Set來分配對象。例如:myObj = new myObj()a = b過程語法變化VB.NET的過程語法發生了許多變化。比如類似C++的過程調用方法,默認類型為ByVal,可選關鍵字,return語句等等。過程調用方法VB6.0類似於C++,允許調用不帶括號的過程(sub)。但是,當使用call語句調用function或sub時,請確保使用括號。例如:dim I as integer Call evaluate data(2,I)evaluate data 2,I在VB.NET,所有方法調用都需要括號,並且Call語句是可選的。ByVal是默認的參數類型。在VB6.0中,ByRef是調用函數或sub時的默認類型。這意味著所有更改都將反映在傳入的變量中。VB.NET改變了這種方式。現在,默認的參數類型是ByVal(按值)。Optional關鍵字VB 6.0 Optional關鍵字可用於讓用戶決定傳入默認值,然後調用IsMissing函數來確定參數是否有效。然而,在value中,每個可選參數必須聲明其默認值,而不調用IsMissing函數。例如:sub my方法(可選byvali I as integer = 3)
返回語句VB。NET的Return語句類似於C++。使用Return語句將控制從過程返回給調用方。在VB6.0中,Return語句與GoSub語句壹起使用。VB.NET不再支持GoSub聲明。過程控制的變化下面是VB。NET對進程控制語句的修改:1。不再支持GoSub。2.Call、Function和Sub語句都可以在調用過程中使用。3.在...GoSub等等...不再支持GoTo語句。您可以改用Select Case語句。4.同時...wend語句現在更改為While…End While語句。不再支持Wend關鍵字。概述Visual Basic。NET是。NET版本的Visual Basic,它從根本上改變了!通過這篇文章,妳知道VB6.0和VB6.0的區別很大。可以說,它們基本上是兩種不同的語言,因為它們的核心發生了變化。VB6.0基於COM,而VB.NET基於。NET框架。由於這種變化,班級的結構也發生了根本性的變化。