欢迎光临
我们一直在努力

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

建站超值云服务器,限时71元/月
因為未來微軟 .net 平台的執行環境與現今大大的不同,未來 class 可以跨語言地繼承,也就是 vb 可以繼承 c# 的 class 等等。原始程式碼編譯成 managed code,平台提供執行時期將 il 編譯成執行碼等等。在再讓 vb 必須要脫胎換骨。所以 visual basic.net 將會有絕大的改版,與以往的六個版本截然不同。

visual basic.net 與以往的版本實在差別太多,在這裡無法一一詳述。僅列舉明顯且重用的部分。

< visual basic 6 與 visual basic.net 差異的部分 >
以下先介紹 vb6/visual basic.net 都有的部分,但 visual basic.net 改變使用方式或關鍵字更新。內容有
不再使用 set 和 let
不再使用 set 和 let 關鍵字,除非在 class 檔案中設定屬性。因為在 visual basic.net 中不再使用預設(default)屬性和方法,所以不需要靠他們來辨別,你在使用物件的方法與屬性時,若要設定變數值,一定要指明清楚。也就是原先在 vb6 若要設定變數 obj 內容為 objthis,必須要

set obj=objthis

而接收預設屬性則可以

att=objthis 以及 att=objthis.defaultatt 兩種寫法

所以若 objthis 物件有一個預設屬性叫 defaultatt,若不寫 set 會不清楚到底要存取 objthis 物件的參照還是 objthis.defaultatt 這個預設屬性。但到了 visual basic.net,若你要讀取 defaultatt,因為沒有預設屬性的使用方式,所以只有(且一定要)以 objthis.defaultatt 這種寫法來讀取 defaultatt 屬性。
所以當你使用下列程式碼時

obj=objthis

那一定是要 objthis 這個物件參照,而不會模擬兩可。而這種寫法讓 visual basic.net 的語法與 javascript 和 c# 的語法更為接近。

在 visual basic.net 中 class 的屬性撰寫
在 vb 6 要撰寫一個物件的屬性會利用以下的程式碼,其中 property get 是用來讓使用者讀取屬性,而 property set/let 則是用來設定屬性,至於是要使用 set 還是 let 則要看賦予的屬性是物件還是一般的變數型別。

private m_myproperty as variant

public property get myproperty() as variant
Visual Basic 6/VBScript 與Visual Basic.NET 的比較(上)-.NET教程,VB.Net语言 if isobject(m_myproperty)
Visual Basic 6/VBScript 與Visual Basic.NET 的比較(上)-.NET教程,VB.Net语言then set myproperty = m_myproperty
Visual Basic 6/VBScript 與Visual Basic.NET 的比較(上)-.NET教程,VB.Net语言 else
Visual Basic 6/VBScript 與Visual Basic.NET 的比較(上)-.NET教程,VB.Net语言 myproperty = m_myproperty
Visual Basic 6/VBScript 與Visual Basic.NET 的比較(上)-.NET教程,VB.Net语言 end if
end property

public property set myproperty(byval vnewvalue as variant)
Visual Basic 6/VBScript 與Visual Basic.NET 的比較(上)-.NET教程,VB.Net语言 set m_myproperty = vnewvalue
end property

public property let myproperty(byval vnewvalue as variant)
Visual Basic 6/VBScript 與Visual Basic.NET 的比較(上)-.NET教程,VB.Net语言 m_myproperty = vnewvalue
end property

但在 visual basic.net 的程式碼要改成

private m_myproperty as string
public property myproperty() as string
Visual Basic 6/VBScript 與Visual Basic.NET 的比較(上)-.NET教程,VB.Net语言get
Visual Basic 6/VBScript 與Visual Basic.NET 的比較(上)-.NET教程,VB.Net语言 myproperty = m_myproperty
Visual Basic 6/VBScript 與Visual Basic.NET 的比較(上)-.NET教程,VB.Net语言 end get

Visual Basic 6/VBScript 與Visual Basic.NET 的比較(上)-.NET教程,VB.Net语言 set
Visual Basic 6/VBScript 與Visual Basic.NET 的比較(上)-.NET教程,VB.Net语言 m_myproperty = value
Visual Basic 6/VBScript 與Visual Basic.NET 的比較(上)-.NET教程,VB.Net语言 end set
end property

這個語法也是與 c# 的語法更為相似。

另外在 visual basic.net 你必須要明確的利用 readonly 或 writeonly 關鍵字來設定屬性是否為唯讀或唯寫,所以程式碼為

public readonly property myproperty() as string
Visual Basic 6/VBScript 與Visual Basic.NET 的比較(上)-.NET教程,VB.Net语言get
Visual Basic 6/VBScript 與Visual Basic.NET 的比較(上)-.NET教程,VB.Net语言 myproperty = m_myproperty
Visual Basic 6/VBScript 與Visual Basic.NET 的比較(上)-.NET教程,VB.Net语言 end get
end property

或是

public writeonly property myproperty() as string
Visual Basic 6/VBScript 與Visual Basic.NET 的比較(上)-.NET教程,VB.Net语言 set
Visual Basic 6/VBScript 與Visual Basic.NET 的比較(上)-.NET教程,VB.Net语言 m_myproperty = value
Visual Basic 6/VBScript 與Visual Basic.NET 的比較(上)-.NET教程,VB.Net语言 end se
t end property

subroutines 和 functions
visual basic.net 在呼叫與使用 subroutine 和 function 上也有許多改變

■ 方法呼叫的語法改變 —
所有的方法、subroutine 和 function 的呼叫都需要加上小括號,在以往若呼叫 function 但不需要 function 的回傳值﹔或 function 不需要傳入參數,可以使用不加小括號的方式,或呼叫 subroutine 不使用小括號等等是可以的,但在 visual basic.net 都不再允許。
所以在 vb 6 的

dattime=now 呼叫系統的 now() 函數

dosomething "par1",int2,"par3" 呼叫副函數 dosomething,傳入三個參數

等方式要改成

dattime=now()

dosomething("par1",int2,"par3")

所以在 asp+ 要注意

response.write "某些文字"

也要改成

response.write("某些文字")

■ 參數傳遞預設以 byval —
在 vb6 參數傳遞若不設定,預設是以 byref 也就是傳變數位址給副函數的方式,但在 visual basic.net 改成預設以 byval 將變數的值傳遞給副函數。
但要注意的是對 classes 和 interfaces 以及 array 和 string 的傳遞預設仍然是採用 byref

■ 使用 return 語法 —
visual basic.net 不支援 vb6 為了向前相容(自 basic 以來就存在 j )而使用的 gosub 語法。現在 return 語法專門用來在 function 或 sub 內還回控制權到呼叫者端。

完整的資料型態範圍

在 vbscript 只支援 variant 資料型別,而在 visual basic.net 所有的東西都是物件(object),包含 intrinsic 資料型別。而 variant 型別只是一個特殊型態的物件。

variant 型別在使用上一般比較沒有效率,但可能在某些地方用起來比較方便,例如從資料庫承接可能會傳回 null 的欄位,程式碼如右

dim rec as recordset
set rec = new recordset
rec.open "select region from northwind.dbo.customers where customerid=alfki", "provider=sqloledb;data souce=(local);initail catalog=northiwnd;user id=sa;"
dim res as variant
res = rec.fields(0)
if isnull(res) then
Visual Basic 6/VBScript 與Visual Basic.NET 的比較(上)-.NET教程,VB.Net语言msgbox "內容是 null"
else
Visual Basic 6/VBScript 與Visual Basic.NET 的比較(上)-.NET教程,VB.Net语言 msgbox res
end if
在 visual basic.net 的 intrinsic 資料型別有
型態 資料型態名稱 大小 預設值
數字 byte 1 byte(8 bits) 0
short 2 bytes(16 bits) 0
integer 4 bytes(32 bits) 0
long 8 bytes(64 bits) 0
single 4 bytes(32 bits) 0.0
double 8 bytes(64 bits) 0.0
decimal 12 bytes(96 bits) 0.0
unicode 文字 string ""
char 2 bytes(16 bits) ""
其他型別 boolean false
date #01/01/0001 12:00:00am#
注意,不再支援 currency 型別,可以使用 decimal 型別取代

宣告變數、常數和陣列

在 visual basic.net 有增加一些在宣告變數、常數和陣列方面的語法,在宣告的同時可以賦予值–宣告的語句與執行的語法相似
dim x as integer=24
dim y as integer= x*24

const my_number=42
const my_number as integer=42
const my_string = "hello world"
const my_string as string = "hello world"

注意,與 vb6 不相容的是在同一個宣告的語句中只能宣告一種型態,所以不能有下列的語法。

dim x as integer, y as string

也因此

dim x,y as integer

會宣告 x 和 y 兩個變數都是整數型別。 dim 關鍵字也可以宣告初始化過的陣列

   dim myarray(20) as integer
dim myarray(5) as integer = (1,2,3,4,5)
dim myarray(3) as string = ("bill", "fred", "mary")

陣列一定要透過 dim 宣告,若以空的括號,內不定義數字,則該陣列可以在之後重新定義大小。redim 可以用來重新定義陣列的大小,但不能改變陣列的維度。

   dim myarray() as integer
redim myarray(20)

dim myarray(,,) <—透過逗號來定義陣列的維度
redim myarray(20,10,5)

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » Visual Basic 6/VBScript 與Visual Basic.NET 的比較(上)-.NET教程,VB.Net语言
分享到: 更多 (0)

相关推荐

  • 暂无文章