vbscript|visual因為未來微軟 .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
- Class 的屬性撰寫
- Subroutines 和 Functions
- 完整的資料型態範圍
- 宣告變數、常數和陣列
- 變數範圍(Variable Scope)
- 結構化例外處理(Structured Exception Handling)
- 使用正確的資料型別
- 使用者自訂資料結構(Structure)
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





End Property
Public Property Set myProperty(ByVal vNewValue As Variant)

End Property
Public Property Let myProperty(ByVal vNewValue As Variant)

End Property
但在 Visual Basic.NET 的程式碼要改成
Private m_myProperty As String
Public Property myProperty() As String






End Property
這個語法也是與 C# 的語法更為相似。
另外在 Visual Basic.NET 你必須要明確的利用 ReadOnly 或 WriteOnly 關鍵字來設定屬性是否為唯讀或唯寫,所以程式碼為
Public ReadOnly Property myProperty() As String



End Property
或是
Public WriteOnly Property myProperty() As String



t End Property
Subroutines 和 FunctionsVisual 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

Else

End If 在 Visual Basic.NET 的 Intrinsic 資料型別有型態 資料型態名稱大小預設值 數字Byte1 byte(8 bits) 0 Short2 bytes(16 bits) 0 Integer4 bytes(32 bits) 0 Long8 bytes(64 bits) 0 Single4 bytes(32 bits) 0.0 Double8 bytes(64 bits) 0.0 Decimal12 bytes(96 bits) 0.0Unicode 文字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)