繁体中文
设为首页
加入收藏
当前位置:.Net技术首页 >> Asp.Net开发 >> Visual Basic 6/VBScript 與Visual Basic.NET 的比較(中)

Visual Basic 6/VBScript 與Visual Basic.NET 的比較(中)

2007-04-15 08:00:00  作者:  来源:互联网  浏览次数:0  文字大小:【】【】【
简介:變數範圍(Variable Scope) Visual Basic.NET 讓 Local 變數支援 block 範圍,也就是在迴圈或 If 等等區塊內宣告的變數在外部是看不到的,所以若程式碼撰寫如下 Imports System Namespace MyNamespace Module MyM...
关键字:Visual Basic VBScript NET

變數範圍(Variable Scope)

Visual Basic.NET 讓 Local 變數支援 block 範圍,也就是在迴圈或 If 等等區塊內宣告的變數在外部是看不到的,所以若程式碼撰寫如下

Imports System

Namespace MyNamespace

Module MyModule

Sub Main()

Dim j as integer

For j=1 to 10

If True Then

Dim i As Integer

i=i+1

Console.WriteLine("在內部的 i= " & cstr(i))

End If

Console.WriteLine("可否使用在內部的 i= " & cstr(i))

Next j

End Sub

End Module

End Namespace

在 If 區塊外使用變數 i 會導致編譯錯誤,如下圖 若拿掉該行,便可以正確執行。

但要注意的是,雖然在區塊之外看不見變數,但變數的生命週期(lifetime)並未結束。也就是說若你重新進入該區塊,你仍然可以使用該變數。所以上述的程式碼經編譯後的執行結果如下

結構化例外處理(Structured Exception Handling)

Visual Basic.NET 支援結構化例外處理,使用其他語言如 C++ 早已經使用的語法 Try...Catch...Finally 以受保護的程式區塊(protected blocks)搭配過濾(filter)的使用﹔來做例外處理。 使用原先 On Error... 這種非結構化的例外處理效率較差,並較難維護程式碼。

■ Try...Catch...Finally 的程式碼結構如下 --

Try '開始結構化例外處理,在這一段裡面的程式碼可能會產生例外狀況 Catch [選擇性的過濾] '如果在 Try 程式段之中有例外發生,就會執行這裡面的程式碼 [其他的 Catch 區塊] Finally'在離開 Try 區塊之前一定會執行的程式碼 End Try

在 Try 的區塊中放有例外處理需要監控的程式碼。如果在這一個區段中執行的任何程式碼發生錯誤,執行權會傳送到 Catch 區塊中的第一行程式碼。在 Catch 區塊中可以放置處理一般例外(錯誤)的程式碼。你可以定義多個 Catch 區塊,並定義在不同的狀況下執行不同的 Catch 區塊。在 Finally 區塊可以放置結尾的程式碼,如關閉檔案,釋放物件等等。

■ 使用 Try...Catch...Finally --使用 Try...Catch...Finally 區塊可以包住可能會發生錯誤的程式碼,你可以利用巢狀(nest)的方式在例外處理中再包例外處理,在每一個區塊中宣告的變數屬於該區塊的區域變數。

程式範例如下

Function GetStringsFromFile(ByVal FileName As String) As String

Dim strTest, Strings As String

Dim Stream As StreamReader = File.OpenText(FileName) '開啟檔案

Try

While True '迴圈一直執行到 EndOfStreamException 錯誤發生

strTest = Stream.readline()

If strTest = "" Then

Throw New EndOfStreamException

End If

Strings = Strings + strTest

End While

Catch EOFExcep As EndOfStreamException

' 不需要做任何事,已經達到檔案結尾

Catch IOExcep As IOException

' 有一些錯誤發生了,回報錯誤的發生

MsgBox(IOExcep.Message)

Strings = Nothing

Finally

Stream.Close() ' 關閉檔案

End Try

Return Strings

End Function

使用正確的資料型別

在定義 subroutines 和 functions 時,可以利用 VB 提供的資料型別來定義參數,以及 function 回傳的型別

Sub DoSomething(ByVal strValue1 As String, ByVal intCount As Integer, ByRef strValue2 As String = "初始內容")

Function DoSomething(ByVal strValue1 As String, ByVal intCount As Integer, ByRef strValue2 As String = "初始內容") As String

你可以利用 Optional 關鍵字來定義可以選擇性輸入的參數,但因為 Visual Basic.NET 不再支援 IsMissing 關鍵字,所以一定要給預設值。

Function DoSomething(ByVal strValue1 As String, ByVal intCount As Integer, ByRef strValue2 As String = "初始內容"

_ Optional ByVal strType = "預設內容" As String) As String

■ 整數和長整數資料型別改變 --整數(Integer)現在是 32 bits 而不是以往的 16 bits,長整數(long) 現在是 64 bits 而不是 32 bits。這讓 VB 與其他的語言更容易合作,尤其是在呼叫 API 的時候。呼叫 API 往往要注意 bits 的長度,所以你特別要注意現在 VB 對資料型別定義的改變。

■ 轉變(Cast)到正確的資料型別 -- Visual Basic.NET 要求使用正確的資料型別,所以當你在轉換資料型別時要使用適當的函數,列表如下

函數名稱傳回的資料型別 CBool(value) Boolean CByte(value)ByteCChar(value) Char CDate(value)DateCDec(value) DecimalCDbl(value) Double CInt(value)IntegerCLng(value) LongCObj(value)ObjectCShort(value) Short CSng(value)SingleCStr(value)String

使用者自訂資料結構(Structure)

在 Visual Basic.NET 使用關鍵字 Structure 來定義使用者自訂的變數結構(User-defined type UDT),且不支援 VB6 使用 Type 關鍵字。

程式碼範例如下

Structure abc

Public UserName As String

Public UserId As Integer

Dim UserAge As Integer

End Structure

...

Dim emp As abc

emp.UserAge = 30

emp.UserName = "胡百敬"

emp.UserId = 12345

在結構中的成員必須要定義存取範圍如 Public、Private 或是 Protected。你也可以使用 Dim 語句,它的預設值是 Public 存取。

< Visual Basic.NET 新增而 VB6 沒有的部分 >以下介紹純粹是 Visual Basic.NET 新增的功能,在 Visual Basic 以往的版本沒有這些功能。內容有

Assemblies 新的簡易設定(assignment)語法 繼承(Inheritance) Free Threading 建構子(Constructor)和解構子(Destructor) Delegate

Assemblies

Assembly 組成.NET 平台的應用程式。它是在 .NET 執行環境上安裝、散佈應用程式的單元,並以 .exe 或是動態連結程式庫(.dll)的方式存在。你在 Visual Basic.NET 中使用 assemblies 的內容,並加入對 assemblies 的參照,就好像在之前版本的 VB 中使用 Type library 一樣。讓 assembly 與之前的 .exe 或 .dll 檔案不同的是它會包含所有執行程式的資訊,包括 type library 以及程式會用到的相關元件等等。

在 assembly 之內包含一份 assembly manifest,有點像一個 assembly 內所有內容的清單列表,包含的資訊如下:assembly 的身分,如他的名稱、版本等等用來描述組成 assembly 的所有檔案列表,包含你為你某個 assembly(.exe 或 .dll) 建立的其他 assembly,以及圖形(bitmap) 或 Readme 檔案等等。

一個 assembly 的參照(reference),也就是所有相依的外部檔案列表 -- DLLs 或是其他你的應用程式需要的檔案,但不是你建立的。Assembly 參照同時包含了對公共的(global)或是私有的(private)物件的參照。公共的物件存在公共的 assembly 快取中,也就是其他的應用程式也可以存取得到的地方,有點像 System32 目錄。Microsoft.VisualBasic 就是一個會存在於公共 assembly 快取區的範例。私有的物件必須存在於你應用程式安裝相同的目錄或是它的子目錄。

因為 Assemblies 自我描述的資訊已經足夠,所以利用 Visaul Basic.NET 所做的應用程式不再需要 Regisry 的資訊。這可以減少 DLL 的衝突,讓你的應用程式在安裝執行時更為穩定。在大多數的狀況下,安裝 .NET 應用程式只要複製檔案到目標電腦內就可以了。

■ 使用 Assemblies -- 要使用 Assemblies 你必須要先加入對它的參照,接著利用 Imports 語法來選擇要使用的物件的命名空間(namespace)。一但參照與 imports 完成,你的應用程式就可以使用同一命名空間之下所有的 classes、屬性、方法以及其他成員。一個單一的 assembly 可以包含多個命名空間,以及每一個命名空間之下都可以有多個項目。

在 Visual Studio.NET 之內,你只要編譯應用程式就可以建立 assembly。利用 Visual Basic.NET 你同時可以建製 .exe 或 .dll 檔案,並讓支援共通語言定義(Common Language Specification)的其他語言使用。

责任编辑:admin
相关文章