欢迎光临
我们一直在努力

Visual Basic 6/VBScript 與Visual Basic.NET 的比較(中)-.NET教程,VB.Net语言

建站超值云服务器,限时71元/月
變數範圍(variable scope)
visual basic.net 讓 local 變數支援 block 範圍,也就是在迴圈或 if 等等區塊內宣告的變數在外部是看不到的,所以若程式碼撰寫如下
imports system

namespace mynamespace

Visual Basic 6/VBScript 與Visual Basic.NET 的比較(中)-.NET教程,VB.Net语言module mymodule
Visual Basic 6/VBScript 與Visual Basic.NET 的比較(中)-.NET教程,VB.Net语言sub main()
Visual Basic 6/VBScript 與Visual Basic.NET 的比較(中)-.NET教程,VB.Net语言dim j as integer
Visual Basic 6/VBScript 與Visual Basic.NET 的比較(中)-.NET教程,VB.Net语言 for j=1 to 10
Visual Basic 6/VBScript 與Visual Basic.NET 的比較(中)-.NET教程,VB.Net语言if true then
Visual Basic 6/VBScript 與Visual Basic.NET 的比較(中)-.NET教程,VB.Net语言 dim i as integer
Visual Basic 6/VBScript 與Visual Basic.NET 的比較(中)-.NET教程,VB.Net语言 i=i+1
Visual Basic 6/VBScript 與Visual Basic.NET 的比較(中)-.NET教程,VB.Net语言 console.writeline("在內部的 i= " & cstr(i))
Visual Basic 6/VBScript 與Visual Basic.NET 的比較(中)-.NET教程,VB.Net语言 end if
Visual Basic 6/VBScript 與Visual Basic.NET 的比較(中)-.NET教程,VB.Net语言console.writeline("可否使用在內部的 i= " & cstr(i))
Visual Basic 6/VBScript 與Visual Basic.NET 的比較(中)-.NET教程,VB.Net语言 next j
Visual Basic 6/VBScript 與Visual Basic.NET 的比較(中)-.NET教程,VB.Net语言end sub

end module

end namespace

在 if 區塊外使用變數 i 會導致編譯錯誤,如下圖
Visual Basic 6/VBScript 與Visual Basic.NET 的比較(中)-.NET教程,VB.Net语言
若拿掉該行,便可以正確執行。

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

Visual Basic 6/VBScript 與Visual Basic.NET 的比較(中)-.NET教程,VB.Net语言

結構化例外處理(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
Visual Basic 6/VBScript 與Visual Basic.NET 的比較(中)-.NET教程,VB.Net语言dim strtest, strings as string
Visual Basic 6/VBScript 與Visual Basic.NET 的比較(中)-.NET教程,VB.Net语言dim stream as streamreader = file.opentext(filename) 開啟檔案

Visual Basic 6/VBScript 與Visual Basic.NET 的比較(中)-.NET教程,VB.Net语言try
Visual Basic 6/VBScript 與Visual Basic.NET 的比較(中)-.NET教程,VB.Net语言while true 迴圈一直執行到 endofstreamexception 錯誤發生
Visual Basic 6/VBScript 與Visual Basic.NET 的比較(中)-.NET教程,VB.Net语言 strtest = stream.readline()
Visual Basic 6/VBScript 與Visual Basic.NET 的比較(中)-.NET教程,VB.Net语言 if strtest = "" then
Visual Basic 6/VBScript 與Visual Basic.NET 的比較(中)-.NET教程,VB.Net语言throw new endofstreamexception
Visual Basic 6/VBScript 與Visual Basic.NET 的比較(中)-.NET教程,VB.Net语言end if
Visual Basic 6/VBScript 與Visual Basic.NET 的比較(中)-.NET教程,VB.Net语言strings = strings + strtest
Visual Basic 6/VBScript 與Visual Basic.NET 的比較(中)-.NET教程,VB.Net语言end while
catch eofexcep as endofstreamexception
不需要做任何事,已經達到檔案結尾
catch ioexcep as ioexception
有一些錯誤發生了,回報錯誤的發生
Visual Basic 6/VBScript 與Visual Basic.NET 的比較(中)-.NET教程,VB.Net语言msgbox(ioexcep.message)
Visual Basic 6/VBScript 與Visual Basic.NET 的比較(中)-.NET教程,VB.Net语言strings = nothing
finally
Visual Basic 6/VBScript 與Visual Basic.NET 的比較(中)-.NET教程,VB.Net语言stream.close() 關閉檔案
Visual Basic 6/VBScript 與Visual Basic.NET 的比較(中)-.NET教程,VB.Net语言end try
Visual Basic 6/VBScript 與Visual Basic.NET 的比較(中)-.NET教程,VB.Net语言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 = "初始內容"
Visual Basic 6/VBScript 與Visual Basic.NET 的比較(中)-.NET教程,VB.Net语言_ 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) byte
cchar(value) char
cdate(value) date
cdec(value) decimal
cdbl(value) double
cint(value) integer
clng(value) long
cobj(value) object
cshort(value) short
csng(value) single
cstr(value) string

使用者自訂資料結構(structure)
在 visual basic.net 使用關鍵字 structure 來定義使用者自訂的變數結構(user-defined type udt),且不支援 vb6 使用 type 關鍵字。
程式碼範例如下
structure abc
Visual Basic 6/VBScript 與Visual Basic.NET 的比較(中)-.NET教程,VB.Net语言public username as string
Visual Basic 6/VBScript 與Visual Basic.NET 的比較(中)-.NET教程,VB.Net语言public userid as integer
Visual Basic 6/VBScript 與Visual Basic.NET 的比較(中)-.NET教程,VB.Net语言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
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)的其他語言使用。
赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » Visual Basic 6/VBScript 與Visual Basic.NET 的比較(中)-.NET教程,VB.Net语言
分享到: 更多 (0)

相关推荐

  • 暂无文章