Visual Basic .NET Visual Basic.NET是基于微軟.NET Framework之上的面向?qū)ο蟮闹虚g解釋性語(yǔ)言,可以看作是Visual Basic在.Net Framework平臺(tái)上的升級(jí)版本,增強(qiáng)了對(duì)面向?qū)ο蟮闹С?。但由于改?dòng)太大,導(dǎo)致VB.net對(duì)VB的向后兼容性不好,在業(yè)界引起不小的爭(zhēng)議。 大多的VB.Net程序員使用Visual Studio .Net作為IDE(integrated development environment). SharpDevelop是另一種可用的開(kāi)源的IDE。VB.Net需要在.Net Framework平臺(tái)上才能執(zhí)行。 VB.NET的主頁(yè) 1 目前版本 2005年9月以來(lái),存在三種不同版本的Visual Basic .NET. 1 Visual Basic .NET:是隨vc#和ASP.NET一起在2002年發(fā)布的最初始的VB.net版本。C#被大力宣傳為微軟對(duì)付JAVA的王牌,受到媒體極力關(guān)注。然而VB.NET(有時(shí)被稱為VB7)影響面不廣,這導(dǎo)致VB社區(qū)之外很少人關(guān)注它。那些試用過(guò)此版VB.NET的人在層層幕布下發(fā)現(xiàn)一個(gè)強(qiáng)大卻艱深的語(yǔ)言,而且還有不少弱點(diǎn),比如它比VB6來(lái)有一個(gè)大了十倍的進(jìn)行時(shí)(RunTime),內(nèi)存footprint也大大增加。 2 Visual Basic .NET 2003:是和.NET Framework 1.1一起發(fā)布的。新功能包括對(duì).NET Compact Framework的支持和更好的VB升遷向?qū)?。并改進(jìn)了運(yùn)行狀況,IDE穩(wěn)定性(尤其是后臺(tái)編譯器),以及運(yùn)行時(shí)RunTime穩(wěn)定性。另外,VB.NET 2003還有一個(gè)學(xué)院版Visual Studio .NET 2003 Academic Edition (VS03AE),它是分發(fā)給各國(guó)某些學(xué)者免費(fèi)使用的版本。 3 Visual Basic 2005:VB2005是VB.Net的重大轉(zhuǎn)變,微軟決意在其軟件名稱中去掉了.NET部份。在VB2005中,微軟增加了許多新功能,以引用VB對(duì)于初學(xué)者來(lái)說(shuō)的一些優(yōu)點(diǎn): A, Edit and Continue - 也許是從VB那里丟掉的最大的功能,允許代碼的編輯和執(zhí)行立即的執(zhí)行恢復(fù)。 B, Design-time expression evaluation C, My偽命名空間,提供了訪問(wèn).NET Framework特定域的不需大量編碼的簡(jiǎn)單方式;還能動(dòng)態(tài)產(chǎn)生類(顯然的是My.Forms);提供了改進(jìn)的VB到VB.NET轉(zhuǎn)換向?qū)?;Using 語(yǔ)法,簡(jiǎn)化了需要部署pattern to free resources的對(duì)象的使用;My編碼,可隱藏由VB.NET IDE寫(xiě)的模板代碼;數(shù)據(jù)源綁定,簡(jiǎn)化了數(shù)據(jù)庫(kù)C/S開(kāi)發(fā) 上述功能(尤其是My)增強(qiáng)了VB.Net成為快速開(kāi)發(fā)應(yīng)用平臺(tái)的可能,并與C#進(jìn)一步區(qū)別開(kāi)來(lái)。參見(jiàn): 使用My開(kāi)發(fā) 通過(guò)My命名空間訪問(wèn).NET Framework 和項(xiàng)目 Visual Basic 2005 通過(guò)增加新功能而填補(bǔ)了和其它所謂更強(qiáng)大的.NET語(yǔ)言的差距。 A, 增加了.NET 2.0語(yǔ)言功能包括:generics和Partial類(在一個(gè)文件里定義一個(gè)類的某部份然后再添加更多的定義,這個(gè)方法在整合用戶編碼和系統(tǒng)自動(dòng)生成編碼時(shí)尤其有用)。 B, XML注釋,可以被NDoc等工具處理而自動(dòng)生成文檔 C, operator overloading D, 支持在其它語(yǔ)言中已經(jīng)廣泛使用的unsigned integer數(shù)據(jù)類型。 E, 支持在許多C衍生編程語(yǔ)言已提供的復(fù)合操作符如:"+=", "-=" 4, IsNot專利:If Not X Is Y表達(dá)式被轉(zhuǎn)換成If X IsNot Y。當(dāng)微軟為IsNot申請(qǐng)專利時(shí)招致了惡名(尤其來(lái)自Real公司)。 5, Visual Basic 2005 Express:作為VS產(chǎn)品線上的一部份,VB2005 Express是專為業(yè)余愛(ài)好者和新手定制的免費(fèi)的VS Express系列的一員。Express版本目的定位在幫助人們學(xué)習(xí)一種語(yǔ)言,所以他們有和標(biāo)準(zhǔn)版一致的用戶界面,只是少了一些高級(jí)功能。另外,VS 查看更多答案
目前創(chuàng)新互聯(lián)已為近千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)站空間、網(wǎng)站改版維護(hù)、企業(yè)網(wǎng)站設(shè)計(jì)、夾江網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。
記得采納啊
VB.NET是基于.NET框架的完全對(duì)向?qū)ο蟮木幊陶Z(yǔ)言,而vb 6.0只是半面向?qū)ο蟮恼Z(yǔ)言,使用vb.net可以編制出功能更加強(qiáng)大的windows程序?,F(xiàn)在,我們把vb.net和vb 6.0做一下比較,看看vb.net對(duì)比vb 6.0有著什么樣的特性和優(yōu)點(diǎn)。 1.在vb 6.0中,創(chuàng)建對(duì)象的時(shí)候,需要等這個(gè)對(duì)象創(chuàng)建完畢后,再另外調(diào)用一個(gè)獨(dú)立的方法對(duì)其進(jìn)行初始化。在vb.net中, 可以利用構(gòu)造函數(shù)為對(duì)象賦初值,這樣就不需要進(jìn)行煩瑣的調(diào)用賦初值了。構(gòu)造函數(shù)的使用,簡(jiǎn)化了編碼的過(guò)程和出錯(cuò)的機(jī)會(huì)。 2.vb.net編寫(xiě)線程的能力比vb 6.0有很大的增強(qiáng)。 3.在vb 6.0中,需要首先聲明一個(gè)變量,然后才能對(duì)其賦值,這樣就需要寫(xiě)兩行代碼。在vb.net中,可以 使用初始化函數(shù)將這兩個(gè)步驟合并在一行代碼中完成,這個(gè)似乎微小的改進(jìn),提供了更少、更簡(jiǎn)單、更易于維護(hù)的代碼。 4.vb.net基于.NET框架,開(kāi)發(fā)者可以快速的可視化開(kāi)發(fā)網(wǎng)絡(luò)應(yīng)用程序、網(wǎng)絡(luò)服務(wù)、Windows應(yīng)用程序和服務(wù)器端組件。 5.因?yàn)関b.net是基于.NET框架的,可以與其它.NET語(yǔ)言協(xié)同工作。 6.在vb.net中,通過(guò)Web窗體及ADO.NET,開(kāi)發(fā)者可以快速開(kāi)發(fā)可擴(kuò)展的Web站點(diǎn)。 如果你能進(jìn)一步學(xué)習(xí)vb.net,你會(huì)發(fā)現(xiàn)更多的新特性和優(yōu)點(diǎn)
Me.Close是關(guān)閉窗體,如果程序只有一個(gè)主窗體,就直接關(guān)閉程序了
Me.Dispose用來(lái)釋放組件,通常不需要手工調(diào)用它
End是強(qiáng)制關(guān)閉程序,而不理程序現(xiàn)在的狀態(tài),只有萬(wàn)不得已的情況下,才使用這個(gè)命令。
正常都會(huì)調(diào)用Me.Close,然后Me.Close就會(huì)自動(dòng)調(diào)用Me.Dispose。
所以Me.Close是資源釋放最徹底的方式。
而End是資源釋放最不徹底的方式。
1. 什么是類和對(duì)象?
答:類包含某一類對(duì)象的數(shù)據(jù)和過(guò)程。對(duì)象是類的實(shí)例。
2. 為什么采用類和對(duì)象進(jìn)行程序設(shè)計(jì)?
答:以便按照對(duì)象定義類,提高程序代碼的可重用性,避免重復(fù)勞動(dòng)。
3. 在同一個(gè)類中,應(yīng)當(dāng)包括哪些對(duì)象的屬性和方法?
答:同一類對(duì)象的數(shù)據(jù)和過(guò)程。
4. VB程序設(shè)計(jì)主要包括哪兩個(gè)方面的內(nèi)容?
答:Windows應(yīng)用程序界面和代碼。
5. 什么是事件驅(qū)動(dòng)?
答:根據(jù)事件轉(zhuǎn)去執(zhí)行相應(yīng)的事件處理過(guò)程。
1. 控件是窗體上的 對(duì)象 。
2. Visual Basic具有 BASIC程序語(yǔ)言簡(jiǎn)單易學(xué)的 優(yōu)點(diǎn),新增了 可視化和面向面向?qū)ο蟪绦蛟O(shè)計(jì)的 熱點(diǎn),是 Windows編程人員廣泛使用的編程 工具。
3. 對(duì)象的 屬性 是在其類中定義的數(shù)據(jù)。
4. 對(duì)象的 方法 是在其類中定義的過(guò)程。
5. 對(duì)象本身的動(dòng)作或功能稱為 方法 ,外界施加于某對(duì)象的動(dòng)作或操作稱為 事件 。
1.面向過(guò)程
是指從功能的角度分析問(wèn)題,將待解決的問(wèn)題空間分解成若干個(gè)功能模塊,每個(gè)功能模塊描述一個(gè)操作的具體過(guò)程。
2.面向過(guò)程程序設(shè)計(jì)
主要是根據(jù)事務(wù)本身的邏輯過(guò)程進(jìn)行編程的一種方法。
3.面向?qū)ο蟪绦蛟O(shè)計(jì)
是一種計(jì)算機(jī)編程架構(gòu),是由單個(gè)能夠起到子程序作用的單元或?qū)ο蠼M合而成。即按照對(duì)象編寫(xiě)程序。
4.事件驅(qū)動(dòng)程序設(shè)計(jì)
是一種電腦程式設(shè)計(jì)模型。這種模型的程式執(zhí)行流程是由使用者的動(dòng)作或者是由其他程式的訊息來(lái)決定的。
5.函數(shù)
是一種特定的運(yùn)算,在程序中使用一個(gè)函數(shù)時(shí),只要給出函數(shù)名并給出一個(gè)或多個(gè)參數(shù),就能得到它的函數(shù)值
6.過(guò)程
是程序中可以執(zhí)行的一段代碼,過(guò)程包含在一個(gè)聲明語(yǔ)句和一個(gè)結(jié)束語(yǔ)句之間
7.類
是所有具有共同特征的事物的抽象,是一個(gè)抽象的概念(類是一組具有相同屬性特征的對(duì)象的抽象描述,是面向?qū)ο蟪绦蛟O(shè)計(jì)的又一個(gè)核心概念或者類是對(duì)一組對(duì)象共同具有的屬性和行為的抽象,具有封裝和隱藏性、還具有繼承性)。
8.對(duì)象
是一個(gè)屬性集合及其操作的封裝體(對(duì)象是用來(lái)描述現(xiàn)實(shí)世界中客體的部件,是面向?qū)ο筌浖到y(tǒng)在運(yùn)行時(shí)刻的基本單位)。
類是對(duì)象的抽象,對(duì)象是類的實(shí)例。
9.事件
窗體或控件識(shí)別的動(dòng)作
10.事件驅(qū)動(dòng)
根據(jù)事件轉(zhuǎn)去執(zhí)行相應(yīng)的事件處理過(guò)程。
11.屬性
是一個(gè)對(duì)象的特性,不同的對(duì)象有不同的屬性
12.算法
指解決某個(gè)問(wèn)題的嚴(yán)格方法,描述有始有終的計(jì)算過(guò)程。
5.屬性窗口中屬性值被設(shè)置的方式有哪幾種?
6種:輸入 選取 瀏覽 賦值 默認(rèn) 拖動(dòng)
1.程序代碼是由一行一行的 語(yǔ)句 所組成。
3.在程序代碼中可將一個(gè)語(yǔ)句分成兩段的特殊符號(hào)為( _ )。
5.數(shù)值變量如果沒(méi)有設(shè)置初值,則內(nèi)定值為 0 。
7.如果有一個(gè)變量,可能會(huì)存放數(shù)值數(shù)據(jù)或字符串?dāng)?shù)據(jù),此時(shí)可以聲明該變量為 對(duì)象變量。
9. Integer數(shù)據(jù)類型占 4 bytes的內(nèi)存空間,可以表示的數(shù)值范圍為 -2,147,483,648~2,147,483,647 的整數(shù)
3.VB.NET程序語(yǔ)言數(shù)據(jù)類型的種類有哪些?
(1)數(shù)值型
①整形數(shù):短整形(Short)、整形(Integer)、長(zhǎng)整型(Long)
②字節(jié)型(Byte)
③實(shí)型數(shù):?jiǎn)尉刃停⊿ingle)、雙精度型(Double)
④貨幣型(Decimal)
(2)字符型(Char)和字符串型(String)
(3)邏輯型/布爾型(Boolean)
(4)日期型(Date)
(5)對(duì)象型(Object)[即可變型(Variant)]
1.局部變量、全局變量、跨模塊變量分別在何處聲明?其生存期分別是多少?
局部變量在程序內(nèi)聲明。生存期為從所在的程序運(yùn)行開(kāi)始到程序結(jié)束。
全局變量在窗體內(nèi)所有程序的外邊聲明。生存期為由該變量聲明開(kāi)始,一直到程序退出運(yùn)行為止。
跨模塊變量在一般模塊的聲明區(qū)用Public來(lái)聲明。生存期為從一個(gè)Windows應(yīng)用程序項(xiàng)目文件開(kāi)始運(yùn)行到結(jié)束。
3.什么是靜態(tài)變量?
靜態(tài)變量是在離開(kāi)程序時(shí)能夠繼續(xù)保留目前的值,待下回進(jìn)入該程序時(shí)能夠繼續(xù)保留的變量值的局部變量,用Static關(guān)鍵字聲明。
(一)問(wèn)答題
1.請(qǐng)簡(jiǎn)單說(shuō)明在程序中使用程序的好處。
(1)程序可以重復(fù)使用,以方便維護(hù)與程序調(diào)試。
(2)程序可以讓其他工程或項(xiàng)目使用。
(3)程序的邏輯簡(jiǎn)單、明確,可以讓程序變得簡(jiǎn)單且可讀性高。
(4)程序具有模塊化的功能,因此可以將一個(gè)大的應(yīng)用程序分成數(shù)個(gè)小的且不同功能的程序,讓不同的程序設(shè)計(jì)師分別編寫(xiě)?yīng)毩⒉煌δ艿某绦?,并以團(tuán)隊(duì)開(kāi)發(fā),加快應(yīng)用程序開(kāi)發(fā)的時(shí)間。
3.試比較傳值調(diào)用與傳址調(diào)用的差異。
(1)聲明方式不同:
傳值——在程序中的虛自變量之前加上ByVal
傳址——在程序中的虛自變量之前加上ByRef
(2)占用內(nèi)存不同
傳值——調(diào)用程序的實(shí)自變量與被調(diào)用程序的虛自變量占用不同內(nèi)存
傳址——調(diào)用程序的實(shí)自變量與被調(diào)用程序的虛自變量占用同一地址的內(nèi)存,也就是說(shuō),在做參數(shù)傳遞時(shí),調(diào)用程序中的實(shí)自變量是將自己本身的內(nèi)存地址傳給被調(diào)用程序的虛自變量
(3)虛自變量更改結(jié)果不同
傳值——使用傳值調(diào)用可以防止變量被程序修改
傳址——被調(diào)用程序可以通過(guò)虛自變量將值傳回給調(diào)用程序
5.什么是程序多載?
程序多載是使用不同的自變量串行或數(shù)據(jù)類型來(lái)加以區(qū)分相同名稱的程序。
vb.net是完全面向?qū)ο蟮恼Z(yǔ)言,支持面向?qū)ο蟮乃膫€(gè)基本屬性:抽象,繼承,多態(tài),封裝,但vb是面向過(guò)程的語(yǔ)言,它只支持部分面向?qū)ο蟮膬?nèi)容像多態(tài),接口等。從 VB 7.0 之后的版本俗稱 VB.NET,來(lái)源于微軟的.NET戰(zhàn)略,到現(xiàn)在為止有三個(gè)版本
VB 7.0 即VB 2002,對(duì)應(yīng).NET Framework 1.0的版本
VB 7.1 即VB 2003,對(duì)應(yīng).NET Framework 1.1的版本
VB 8.0 即VB 2005,對(duì)應(yīng).NET Framework 2.0的版本
除了語(yǔ)法和使用習(xí)慣的繼承,VB 6.0之前的版本和VB 7.0之后的版本完全沒(méi)有聯(lián)系,幾乎沒(méi)有相同之處,兩種不同體系的語(yǔ)言
VB.NET和VB6.0有什么區(qū)別
Visual Basic .NET是Microsoft Visual Studio .NET套件中主要組成部分之一。.NET版本的Visual Basic增加了更多特性,而且演化為完全面向?qū)ο螅ň拖馛++)的編程語(yǔ)言。本文將介紹VB.NET的新特性,并比較VB6.0/VB.NET之間的區(qū)別,闡述如何利用VB.NET編寫(xiě)簡(jiǎn)單的應(yīng)用程序。
1.1 什么是 VB.NET? Microsoft推出全新的編程和操作系統(tǒng)Framework——.NET,支持多種語(yǔ)言利用公共.NET庫(kù)開(kāi)發(fā)應(yīng)用程序,這些應(yīng)用程序在.NET Framework上運(yùn)行。使用Visual Basic在.NET Framework上編程,這就是VB.NET。
首先,讓我演示在VB.NET中寫(xiě)最簡(jiǎn)單的控制臺(tái)程序:Hello World。
1.2 Hello, World!“Hello World!”是初學(xué)者學(xué)習(xí)Windows編程的代表性程序。我們的第一個(gè)程序就叫做“Hello VB.NET World!”。該程序在控制臺(tái)輸出一句話:“Hello VB.NET World!”,代碼如下所示:
代碼 1.1: Hello VB.NET World例子Imports System
Module Module1
Sub Main()
System.Console.WriteLine("Hello VB.NET World!")
End Sub
End Module
1.3 VB.NET 編輯器和編譯器你可以在記事本或VS.NET IDE等任意文本編輯器中撰寫(xiě)上述代碼,然后保存為HelloWorld.vb。 代碼編寫(xiě)完成之后,要么在命令行、要么在VS.NET IDE中編譯它。在Microsoft .NET Framework SDK中已經(jīng)包括VB.NET編譯器vbc.exe[][1],從IDE或是命令行都可以調(diào)用。要從命令行編譯HelloWorld.vb,請(qǐng)?jiān)诿钚写翱谳斎?/p>
vbc HelloWorld.vb /out:HelloWorld.exe /t:exe
編譯結(jié)束后,HelloWorld.exe被創(chuàng)建到當(dāng)前目錄下。在資源管理其中雙擊圖標(biāo)或在命令行執(zhí)行,程序正確地運(yùn)行了。祝賀你進(jìn)入VB.NET開(kāi)發(fā)者的行列。
Imports 語(yǔ)句
如你所知,大部分的.NET類型都在名字空間(namespace)中定義。Namespace是定義和管理類別的范疇。察看.NET Framework Class Library,可以看到數(shù)以百計(jì)的namespace。例如,System namespace就包括了Console、Object等類型定義。如果想使用Console類,需要用Imports指令導(dǎo)入System namespace。如下所示:
Imports System甚至可以明確地調(diào)用namespace而無(wú)需用Import導(dǎo)入。下面的例子展示了不用Import的“Hello World!”程序:
代碼1.2: Hello VB.NET World例子Module Module1
Sub Main()
System.Console.WriteLine("Hello VB.NET World!")
End SubEnd Module1.4 解析 "Hello VB.NET World!"程序第一行是:
Imports System; System namespace定義了Console類,該類用于讀寫(xiě)控制臺(tái)(命令行窗口)。然后你定義了一個(gè)module:Module Module1
…End Module所有的VB程序都包括一個(gè)Main()方法,即應(yīng)用程序入口點(diǎn)。在例子程序中,我們調(diào)用Console.WriteLine()向控制臺(tái)寫(xiě)入“Hello VB.NET World!”:
Sub Main()
Console.WriteLine(“Hello VB.NET World!”) End SubWriteLine()方法歸屬于Console類,它負(fù)責(zé)向控制臺(tái)寫(xiě)一個(gè)帶有行結(jié)束符的字符串。如前所述,Console類定義于System namespace,你通過(guò)直接引用來(lái)控制類成員。
Console類負(fù)責(zé)讀寫(xiě)系統(tǒng)控制臺(tái)。讀控制臺(tái)輸入用Read和ReadLine方法,向控制臺(tái)輸出用WriteLine方法。
表1.1 Console類定義的方法
方法 用途 例子
Read 讀入單個(gè)字符 int i = Console.Read();
ReadLine 讀入一行 string str = Console.ReadLine();
Write 寫(xiě)一行 Console.Write("Write: 1");
WriteLine 寫(xiě)一行,并帶上行結(jié)束符
Console.WriteLine("Test Output Data with Line");
1.5 VB.NET有什么新特點(diǎn)? VB.NET比 VB6.0更加穩(wěn)定,而且完全面向?qū)ο?。也許你還記得,VB6.0不支持繼承、重載和接口,所以不是真正面向?qū)ο蟮摹6鳹B.NET則支持這些面向?qū)ο筇匦?。VB6.0有兩個(gè)薄弱環(huán)節(jié)——多線程和異常處理。在VB.NET中,開(kāi)發(fā)多線程應(yīng)用和使用C++/C#別無(wú)二致,結(jié)構(gòu)化異常處理也得到支持。稍后我們會(huì)詳細(xì)解釋這些特性。
下面是VB.NET的特性列表——
·面向?qū)ο蟮木幊陶Z(yǔ)言。支持繼承、重載、接口、共享成員和構(gòu)造器。·支持所有的CLS特性,如存取控制.NET類、與其它.NET語(yǔ)言交互、元數(shù)據(jù)、公共數(shù)據(jù)類型、委托等等。·多線程支持?!そY(jié)構(gòu)化異常處理。 1.6 名字空間與集合 前面討論了我們的第一個(gè)VB.NET程序。該程序中首先引人注意的是名字空間(namespace)。在.NET參考文檔中,你會(huì)發(fā)現(xiàn)每個(gè)類都?xì)w屬于某個(gè)namespace。那么,namespace到底是什么?
一個(gè)namespace是類和組件的邏輯組合,其目的在于將.NET class按類別定義。微軟借用了C++ class packaging概念:namespace來(lái)描述這種組合。.NET Framework中的組件被稱為集合(assembly)。全部.NET代碼在數(shù)百個(gè)庫(kù)文件(DLL)中定義。Namespace把a(bǔ)ssembly中定義的類組織起來(lái)。一個(gè)namespace可以包括多個(gè)assembly,一個(gè)assembly也可以在多個(gè)namespace中定義。 namespace樹(shù)的根節(jié)點(diǎn)是System namespace。在.NET Library中,每個(gè)class都在一組相似的類別中定義。例如,System.Data namespace只包括數(shù)據(jù)相關(guān)類。同樣,System.Multithreading只包括多線程類。
在使用.NET支持的語(yǔ)言(如C#、VB.NET、C++.NET等)創(chuàng)建新應(yīng)用程序時(shí),你會(huì)注意到每個(gè)應(yīng)用程序都被定義為一個(gè)namespace,而所有的class都?xì)w屬于這個(gè)namespace。通過(guò)引用這個(gè)namespace,其它應(yīng)用程序就能存取這些class。 在.NET中,代碼被編譯為中間語(yǔ)言(Intermediate Language,IL),assembly中存儲(chǔ)了IL代碼、元數(shù)據(jù)和其它資源文件。同一個(gè)assembly可以附屬于一個(gè)或多個(gè)Exe/DLL。所有的.NET庫(kù)都存儲(chǔ)在assembly中。
1.7 VB.NET: 完全面向?qū)ο蟮木幊陶Z(yǔ)言抽象、封裝、多態(tài)、繼承是面向?qū)ο笳Z(yǔ)言的四個(gè)基本屬性。VB6.0不支持繼承,而VB.NET則不然。所以,和C++一樣,VB.NET也是完全面向?qū)ο蟮木幊陶Z(yǔ)言。
Class 和 ModuleVB.NET用Class...End Class語(yǔ)句對(duì)創(chuàng)建class。每個(gè)VB.NET至少包括一個(gè)Module(模塊)。Module在Module…End Module語(yǔ)句對(duì)中實(shí)現(xiàn)。應(yīng)用程序的主要模塊是Main方法,亦即應(yīng)用程序入口點(diǎn)。
和VB6.0相似的地方是,都可以使用Function/Sub關(guān)鍵字定義方法。下面的例子顯示了如何創(chuàng)建class、添加方法,并從主程序調(diào)用方法: Imports System
Module Module1
Sub Main()
Dim cls As TestClass = New TestClass
Console.WriteLine(cls.MyMethod)
End Sub
Class TestClass
Function MyMethod() As String
Return "Test Method"
End Function
End Class
End ModuleProperty屬性(Property)是類變量的公共描述。Property…End Property語(yǔ)句用以創(chuàng)建property。屬性的Get/Set方法分別用于取得和設(shè)置屬性值。下面的例子中,Data是TestClass的屬性。
Imports System
Imports System.Console
Module Module1
Sub Main()
Dim cls As TestClass = New TestClass
WriteLine(cls.MyMethod)
WriteLine(cls.Data)
cls.Data = "New Data"
WriteLine(cls.Data)
End Sub
End Module
Class TestClass
Private strData As String = "Some Data"
Function MyMethod() As String
Return "Test Method!"
End Function
' Adding Data property to the class
Public Property Data() As String
Get
Return strData
End Get
Set(ByVal Value As String)
strData = Value
End Set
End Property
重載VB.NET通過(guò)overload關(guān)鍵字支持方法重載。使用這個(gè)關(guān)鍵字,你可以定義同名但不同參數(shù)的方法。
類成員訪問(wèn)域
除了原有的Private和Public,VB.NET引入了幾個(gè)新關(guān)鍵字。全部訪問(wèn)域關(guān)鍵字列表如下:
關(guān)鍵字 作用域
Private 限于class內(nèi)部
Public 可以從class外訪問(wèn)
Friend 限于class所屬的應(yīng)用程序內(nèi)
Protected 只能被class和其派生類訪問(wèn)
Protected Friend 能被class、應(yīng)用程序和派生類訪問(wèn)
繼承繼承是面向?qū)ο缶幊陶Z(yǔ)言中最常用的技術(shù)。繼承讓你能夠重用類代碼和功能。
VB.NET支持繼承,而VB6.0則不支持。繼承的好處在于你能使用任何人編寫(xiě)的類,從這些類派生自己的類,然后在自己的類中調(diào)用父類功能。在下面的例子中,Class B派生自Class A,我們將從Class B中調(diào)用Class A的方法MethodA。
Imports System
Imports System.Console
Module Module1
Sub Main()
Dim bObj As B = New B
WriteLine(bObj.MethodA())
End Sub
End Module
' Class A defined
Public Class A
Function MethodA() As String
Return "Method A is called."
End Function
End Class
'Class B, inherited from Class A. All members (Public and Protected)
' can be access via B now.
Public Class B
Inherits A
Function MethodB() As String
Return "Method B is called."
End Function
End Class
可以從一個(gè)class中派生多個(gè)自定義class,也可以從多個(gè)class派生一個(gè)自定義class。
共享的成員類的共享成員被類的所有實(shí)體共享。共享成員可能是屬性、方法或字段/值域。在你不想讓用戶全面控制自己的類時(shí),共享成員相當(dāng)有用。例如,你可以開(kāi)發(fā)一個(gè)類庫(kù),讓用戶通過(guò)共享成員使用其中的部分功能。
可以通過(guò)class本身引用共享成員,而無(wú)需通過(guò)類的實(shí)體。例如:Module Module1
Sub Main()
WriteLine(A.MethodA())
End Sub
End Module
' Class A defined
Public Class A
Shared Function MethodA() As String
Return "Method A is called."
End Function
End Class
多線程VB語(yǔ)言的一大弱點(diǎn)就是缺乏編寫(xiě)自由線程(free-threaded)程序的能力。在.NET Framework中,所有語(yǔ)言共享CRL(Common Runtime Library,公共運(yùn)行庫(kù)),也就是說(shuō),你可以用VB.NET、C#或其它.NET語(yǔ)言編寫(xiě)同樣的程序。
System.Threading namespace定義了線程類。我們只需要引入System.Threading namespace,即可使用線程類。
System.Threading.Thread類提供線程對(duì)象,可以使用Thread類創(chuàng)建或破壞線程。
創(chuàng)建線程使用Thread類的實(shí)體創(chuàng)建一個(gè)新線程,然后用Thread.Start方法開(kāi)始執(zhí)行線程。線程構(gòu)造器接受一個(gè)參數(shù),該參數(shù)指明你要在線程中執(zhí)行的procedure。在下例中,我想在oThread1(Thread類的一個(gè)實(shí)體)的第二線程中執(zhí)行SecondThread過(guò)程:
oThread1 = New Thread(AddressOf SecondThread)
SecondThread procedure looks like below:
Public Sub SecondThread()
Dim i As Integer
For i = 1 To 10
Console.WriteLine(i.ToString())
Next
End Sub
然后,調(diào)用Thread.Start()開(kāi)始線程:
oThread1.Start()
下面的代碼創(chuàng)建兩個(gè)第二線程:
Imports System
Imports System.Threading
Module Module1
Public oThread1 As Thread
Public oThread2 As Thread
Sub Main()
oThread1 = New Thread(AddressOf SecondThread)
oThread2 = New Thread(AddressOf ThirdThread)
oThread1.Start()
oThread2.Start()
End Sub
Public Sub SecondThread()
Dim i As Integer
For i = 1 To 10
Console.WriteLine(i.ToString())
Next
End Sub
Public Sub ThirdThread()
Dim i As Integer
For i = 1 To 10
Console.WriteLine("A" + i.ToString())
Next
End Sub
End Module
破壞線程 調(diào)用Abort方法來(lái)破壞(中止)一個(gè)線程。在調(diào)用Abort之前,確保用IsAlive判斷線程處于活動(dòng)狀態(tài)。
If oThread1.IsAlive Then
oThread1.Abort()
End If
暫停線程可以使用Sleep方法來(lái)暫停線程執(zhí)行。Sleep方法接受一個(gè)以毫秒為單位的參數(shù),指明線程應(yīng)當(dāng)暫停多長(zhǎng)時(shí)間。
下面的例子讓線程暫停1秒鐘:
oThread2.Sleep(1000)你也可以使用Suspend和Resume方法來(lái)掛起和繼續(xù)線程執(zhí)行。
設(shè)定線程優(yōu)先級(jí)Thread類的Priority屬性用于設(shè)定線程優(yōu)先級(jí)。該屬性可以設(shè)置為Normal,AboveNormal,BelowNormal,Highest和Lowest。如:
oThread2.Priority = ThreadPriority.Highest線程與Apartment使用ApartmentState屬性設(shè)置線程的apartment類型,該屬性值可以為STA,MTA或是Unknown[][2]:
oThread.ApartmentState = ApartmentState.MTAMTS意味著可以使用多線程模式,而STA則只能是單線程執(zhí)行。
Public Enum ApartmentState
{
STA = 0,
MTA = 1,
Unknown = 2,
}
1.8 結(jié)構(gòu)化異常處理異常處理也被稱之為錯(cuò)誤處理。作為VB程序員,你一定對(duì)On Error Goto和On Error Resume Next這些VB6.0錯(cuò)誤處理語(yǔ)句耳熟能詳。這種類型的錯(cuò)誤處理被稱為非結(jié)構(gòu)化異常處理(Unstructured Exception Handling)。而在VB.NET中,Microsoft推出了結(jié)構(gòu)化異常處理機(jī)制。VB.NET支持類似C++的TryCatch..Finally控制。Try..Catch..Finally結(jié)構(gòu)如下: Try
' 可能導(dǎo)致異常的代碼
Catch
' 當(dāng)異常發(fā)生時(shí)處理異常的代碼
Finally
' 清理現(xiàn)場(chǎng)
End Try
Try語(yǔ)句塊用以拋出異常。如果異常發(fā)生,在Catch語(yǔ)句塊中處理。Finally語(yǔ)句塊是可選的,在需要釋放資源時(shí)特別有用。
1.9 VB6.0與VB.NET的不同之處除了上面談到的語(yǔ)言進(jìn)化,還有一些語(yǔ)法上的變化。所有這些語(yǔ)言和語(yǔ)法的變化在MSDN中均可查到,本文只作簡(jiǎn)單介紹。
數(shù)據(jù)類型(Data Type)的改變VB.NET中有些數(shù)據(jù)類型得到改進(jìn)。下面是變化對(duì)照表。
數(shù)據(jù)類型 VB6.0 VB.NET
Integer 16 bit size 32 bit size
Long 32 bit size 64 bit size
Currency 用于存儲(chǔ)大浮點(diǎn)數(shù) 被decimal替代,支持更高精度
Variant 可以存儲(chǔ)任意類型數(shù)據(jù) 被Object類型替代,也可以存儲(chǔ)任意類型數(shù)據(jù),但結(jié)果更好
Date Date類型被存儲(chǔ)為double 引入DateTime類型,用于存儲(chǔ)不同格式的日期
在VB.NET中,Short數(shù)據(jù)類型是16 bit的。Short,Integer和Long都等同于CLR的System.Int16、System.Int32和System.Int64類型。 變量聲明的變化在VB6.0中,變量聲明有許多限制。其中之一就是不能同行聲明多個(gè)變量。如果一定要在一行中聲明多個(gè)變量,就一定得指明每個(gè)變量的類型,否則將被默認(rèn)為Variant類型。
Dim a1, a2 As Integer Dim a3 As Integer, a4 As Integer 第一行中的a1是Variant類型,a2是Integer類型。第二行中兩個(gè)變量都是Integer類型。VB.NET支持同行聲明多個(gè)變量,舉例如下:
Dim a1, a2, a3 As Integer 變量初始化是另一個(gè)問(wèn)題。在VB6.0中不能同時(shí)聲明和初始化變量,而VB.NET則支持這個(gè)特性。
Dim name As String = "Mahesh"System.Console.Write(name) 聲明常量也可以照此辦理:Const DT_COUNT As Integer = 23 New關(guān)鍵字。在VB.NET中,New關(guān)鍵字用于創(chuàng)建對(duì)象。由于數(shù)據(jù)類型是對(duì)象,所以New關(guān)鍵字用以創(chuàng)建一個(gè)數(shù)據(jù)類型對(duì)象。
Dim i As Integer = New Integer()i = 10System.Console.WriteLine(i.ToString()) 代碼塊級(jí)別支持。像C++一樣,VB.NET支持代碼塊級(jí)別的作用域檢查。在語(yǔ)句塊中聲明的變量只在塊內(nèi)有效。
For i = 1 To 10Dim p As LongSystem.Console.WriteLine(i.ToString())NextSystem.Console.WriteLine(p.ToString()) 這段代碼在VB.NET中會(huì)得到一個(gè)編譯錯(cuò)誤,因?yàn)閜在For..Next語(yǔ)句塊之外不可訪問(wèn)。在VB6.0中這段代碼可以通過(guò)。
改進(jìn)了的類型安全
在VB6.0中,當(dāng)你聲明一個(gè)對(duì)外部過(guò)程的引用時(shí),可以指定任意類型的參數(shù)為As Any。Any關(guān)鍵字禁止了類型檢查,允許任意數(shù)據(jù)類型傳入和返回。
VB.NET不支持Any關(guān)鍵字。你必須指定每個(gè)參數(shù)和返回值的數(shù)據(jù)類型。數(shù)組VB.NET對(duì)數(shù)組作了明顯的改動(dòng)。
數(shù)組范圍。在VB.NET中,你需要格外留意數(shù)組范圍問(wèn)題。VB6.0默認(rèn)數(shù)組下界為0,故數(shù)組中的元素?cái)?shù)量等與數(shù)組上界值加一。下面的數(shù)組界限從A(0)到A(10),共有11個(gè)元素:
Dim A(10) As Single可以使用Option Base改變下界值為1。在VB.NET中,數(shù)組和C++一樣,下界值為0,不支持Option Base。注意:MSDN文檔指出數(shù)組只能包括與其尺寸相等的元素?cái)?shù)量,例如:Dim A(10) As Integer 只能包括10個(gè)元素(從A(0)到A(9)),但在編譯下面這段代碼時(shí)我發(fā)現(xiàn)它運(yùn)行良好,看起來(lái)數(shù)組中容納了11個(gè)元素。
Dim A(10) As Integer A(0) = 12 A(2) = 24 A(10) = 23 System.Console.WriteLine(A(0).ToString()) System.Console.WriteLine(A(10).ToString())System.Console.WriteLine(UBound(A).ToString()) System.Console.WriteLine(LBound(A).ToString()) Lbound和Ubound分別返回 0與10。ReDim和Fixed Array。你可以在VB6.0中指定固定長(zhǎng)度的數(shù)組。
Dim ArrWeekDays(0 To 6) As Integer
這里的ArrWeekDays數(shù)組是固定長(zhǎng)度的,不能用ReDim語(yǔ)句改變長(zhǎng)度。VB.NET不支持固定長(zhǎng)度數(shù)組,所以ReDim總是有效。
可以用下面兩種方式聲明數(shù)組: Dim ArrWeekDays(6) As IntegerDim ArrWeekDays() As Integer = {1, 2, 3, 4, 5, 6} ReDim語(yǔ)句。在VB6.0中,ReDim用于初始化動(dòng)態(tài)數(shù)組。在VB.NET中你不能把它當(dāng)作聲明用。ReDim只能用于改變數(shù)組長(zhǎng)度,不過(guò)不能改變數(shù)組維度。
Variant對(duì)陣ObjectVB6.0中的Variant數(shù)據(jù)類型能存儲(chǔ)任意類型變量,VB.NET中Object具備相同能力。
算術(shù)操作符VB.NET支持類似C++的快捷方式。下面的表格顯示了常規(guī)操作與快捷操作的不同之處。快捷方式也可用于*、/、|、等操作符。
操作符 常規(guī)語(yǔ)法 快捷方式加法 A = A+5 A +=5 減法 A = A – 5 A -+ 5固定長(zhǎng)度字符串
在VB6.0中,可以在聲明字符串時(shí)指定其長(zhǎng)度。VB.NET不支持固定長(zhǎng)度字符串。
布爾操作符VB6.0中的And、Or或是Xor語(yǔ)句是按位操作符。而在VB.NET中,它們是布爾操作符。執(zhí)行這些操作將返回true或false。VB.NET引入新操作符來(lái)完成按位操作。
操作符 描述 BitAnd 按位AndBitOr 按位OrBitXor 按位XorBitNot 按位Not結(jié)構(gòu)與自定義類型在VB6.0中,你使用Type…End Type語(yǔ)句塊創(chuàng)建結(jié)構(gòu)或自定義類型。例如:
Type StdRec
StdId As Integer
StdName As String End Type
VB.NET引入新的語(yǔ)法:Structure。Type…End Type不再被支持。Structure…End Structure與C++用法相同??梢灾付ńY(jié)構(gòu)中每個(gè)元素的可訪問(wèn)域,如Public、Protected、Friend、Protected Friend、Private等。例如:
Structure StdRec
Public StdId As Integer Public StdName As String
Private StdInternal As String End StructureVB.NET中的Structures就像類一樣,也可以擁有方法和屬性。New和Nothing關(guān)鍵字VB6.0中,AS New和Nothing關(guān)鍵字用于聲明一個(gè)對(duì)象并初始化它。 VB.NET不支持隱式創(chuàng)建對(duì)象。如前所言,甚至連數(shù)據(jù)類型都是對(duì)象。你可以采用以下兩種方法創(chuàng)建數(shù)據(jù)類型或?qū)ο螅?Dim i As Integer Dim i As Integer = New Integer() // Do something if i = Nothing Then End If 不支持Set語(yǔ)句VB6.0使用Set語(yǔ)句指派對(duì)象。例如:Set myObj = new MyObjectSet a = b在VB.NET中,不需要使用Set指派對(duì)象。例如:myObj = new MyObj()a = b過(guò)程(procedure)語(yǔ)法的變化在VB.NET中過(guò)程語(yǔ)法有了很多變化。例如類似C++的過(guò)程調(diào)用方式、ByVal(傳值)為默認(rèn)類型、Optional關(guān)鍵字、return語(yǔ)句等等。類似C++的過(guò)程調(diào)用方式 VB6.0允許不用加圓括號(hào)調(diào)用過(guò)程(sub)。不過(guò),用Call語(yǔ)句調(diào)用函數(shù)或sub時(shí),一定要使用圓括號(hào)。例如:Dim I as IntegerCall EvaluateData(2, i) EvaluateData 2, i 在VB.NET中,所有的方法調(diào)用都需要圓括號(hào),而Call語(yǔ)句則是可選的。 ByVal是默認(rèn)參數(shù)類型在VB6.0中,在調(diào)用函數(shù)或sub時(shí)ByRef(傳址)是默認(rèn)類型。那意味著所有改變將反映到傳入的變量。VB.NET改變了這種方式?,F(xiàn)在,默認(rèn)的參數(shù)類型是ByVal(傳值)。 Optional關(guān)鍵字VB6.0使用Optional關(guān)鍵字可用來(lái)讓用戶決定傳入一個(gè)默認(rèn)值,之后在調(diào)用IsMissing函數(shù)判斷參數(shù)是否有效。 而在VB.NET中,每個(gè)可選參數(shù)必須聲明其默認(rèn)值,無(wú)需調(diào)用IsMissing函數(shù)。例如:Sub MyMethod(Optional ByVal i As Integer = 3)
Return語(yǔ)句VB.NET的Return語(yǔ)句與C++相似。使用Return語(yǔ)句把控制權(quán)從過(guò)程返還給調(diào)用者。在VB6.0中,Return語(yǔ)句與GoSub語(yǔ)句一起使用。VB.NET不再支持GoSub語(yǔ)句。流程控制的改變下面是VB.NET對(duì)流程控制語(yǔ)句的修改:1. GoSub不再受到支持。2. Call、Function和Sub語(yǔ)句均可用于調(diào)用過(guò)程。3. On ... GoSub和On ... GoTo語(yǔ)句不再受支持??梢允褂肧elect Case語(yǔ)句來(lái)替代。4. While ... Wend語(yǔ)句現(xiàn)在改為While…End While語(yǔ)句。不再支持Wend關(guān)鍵字。小結(jié) Visual Basic .NET是.NET版本的Visual Basic,已經(jīng)從根本發(fā)生了變化!通過(guò)本文你了解到VB6.0和VB.NET的區(qū)別是很大的,可以說(shuō)根本就是兩種不同的語(yǔ)言,因?yàn)樗鼈兊膬?nèi)核發(fā)生了變化,VB6.0是基于COM而vb.net是基于.net框架的,因?yàn)檫@個(gè)變化,所以在構(gòu)造類時(shí)也發(fā)生了根本性的變化。
網(wǎng)站標(biāo)題:vb.net維護(hù)方式的簡(jiǎn)單介紹
瀏覽路徑:http://jinyejixie.com/article28/hsipjp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、面包屑導(dǎo)航、網(wǎng)站設(shè)計(jì)、品牌網(wǎng)站制作、響應(yīng)式網(wǎng)站、網(wǎng)站導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)