熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

從Visual Basic 6.0到Visual Basic.NET

2013-11-13 09:58:58  來源: .NET編程 

  Microsoft Visual BasicNET 是 Microsoft Visual Basic 的後續版本它是基於 NET 框架重新設計的您可以用它來輕松地創建用於 Microsoft Windows 位 操作系統和 Web 的下一代應用程序使用 Visual BasicNET可視化開發 Web 應用程序Web 服務Windows 應用程序和服務器端組件將變得輕而易舉此外Visual BasicNET 使用了 Windows 應用程序的 XCOPY 部署方案使您不必再擔心 DLL 版本問題隨著 Visual BasicNET 的發布DLL 噩夢將成為過去

   

  在設計 Visual BasicNET 時我們著眼於世界各地 Visual Basic 開發者的要求Visual Basic 語言現在是真正的面向對象語言並支持實現繼承窗體設計器支持可視化繼承並包含窗體自動調整大小資源本地化和訪問選項支持等新特性現在的數據工具繼續支持 XML 數據並可以共同使用設計時數據綁定和斷開數據此外Visual BasicNET 是基於 NET 框架直接創建的因此可以使用所有的平台特性並能夠與其他 NET 語言協同工作

   

  在發布這些功能的同時我們對產品的幾個方面作了修改本文檔介紹了從 Visual Basic 到 Visual BasicNET 的一些變更並解釋了進行這些變更的原因本文還介紹 Visual BasicNET 升級向導的功能它是作為產品的一部分提供的工具可以幫助您將現有的應用程序升級為 Visual BasicNET 版本

   

  有關從 Visual Basic 升級到 Visual BasicNET 的其他信息請參閱白皮書《准備將 Visual Basic 應用程序升級到 Visual BasicNET》(英文)此白皮書介紹了升級過程並提供了盡可能順利升級的建設性意見

   

  語言

   

  Variant

  Visual Basic

   

  Variant 是一種特殊的通用數據類型可以包含除定長字符串之外的各類數據Object 變量用作指向對象的指針默認的數據類型為 Variant

   

  Visual BasicNET

   

  公共語言運行時 (CLR) 使用 Object 作為通用數據類型Visual BasicNET 沒有繼續使用 Variant 作為通用數據類型而是選擇采用 CLR 命名規則以避免在跨語言開發時造成混亂僅使用一種通用數據類型將簡化類型系統默認的數據類型為 Object

   

  升級向導

   

  將 Variant 數據類型變為 Object因此以下代碼

   

  Dim x As Variant

   

  升級後將變為Dim x As Object

   

  Integer 和 Long

   

  Visual Basic

   

  Long 變量存儲為帶有符號的 位數字而 Integer 變量存儲為 位數字

   

  Visual BasicNET

   

  Long 變量存儲為帶有符號的 位數字Integer 變量存儲為 位數字而 Short 變量存儲為 位數字 位系統中 位整數操作比 位和 位整數操作都要快這意味著 Integer 將是最有效和最基本的數字類型

   

  由於部分 NET 框架技術以現代的 位和 位技術為基礎因此根據新技術更新數據大小是明智之舉

   

  升級向導

   

  修改變量的類型因此以下代碼

  Dim x As IntegerDim y As Long

   

  升級後將變為

  Dim x As ShortDim y As Integer

   

  Currency

  Visual Basic

   

  Visual Basic 支持 Currency 數據類型您不能將變量聲明為 Decimal 類型(雖然變量可以具有子類型 Decimal)

   

  Currency 變量以整數格式存儲為 位數字 為標度以將數字表示為定點數其小數點左邊為 右邊為 這種表示形式可以表示 范圍內的數字

   

  Decimal 變量存儲為帶有符號的 位整數標度為 的不同乘冪 次冪的刻度因子指定了小數點右邊的數字位數其范圍為 當指數為 時(無小數位數)最大的可能值為 +/當指數為 最大值為 +/最小的非零值為 +/

   

  Visual BasicNET

   

  Currency 數據類型的精度不夠無法避免四捨五入的誤差因此創建了 Decimal 這種數據類型

   

  升級向導

   

  將 Currency 數據類型轉換為 Decimal因此以下代碼

  Dim x As Currency

   

  升級後將變為

  Dim x As Decimal

   

  Date

  Visual Basic

   

  Date 變量在內部以 Double 格式存儲能夠作為 Double 類型的變量操作

   

  Date 變量存儲為 IEEE 位浮點數表示從 日到 日的日期和從 :::: 的時間任何可識別的文字日期都可以指定為 Date 變量

   

  當其他數字類型轉換為 Date 時小數點左邊的值表示日期信息而小數點右邊的值表示時間信息午夜為 正午為 整個數值為負表示 日之前的日期

   

  Visual BasicNET

   

  Date 在內部存儲為 位整數因此無法直接作為 Double 進行操作NET 框架提供了 ToOADate 和 FromOADate 函數以進行 Double 和 Date 之間的轉換將日期表示為整數形式可以簡化並加速對日期的操作

   

  升級向導

   

  升級工具並非能夠檢測到所有使用變量將 Date 存儲為 Double 的情況但它一般會在將 Double 指定為 Date 的位置插入適當的 ToOADate 或 FromOADate 方法例如以下代碼

  Dim dbl As Double Dim dat As Date Dbl = dat

   

  升級後將變為

  Dim dbl As Double Dim dat As Date Dbl = datToOADate

   

  定長字符串

  Visual Basic

   

  除類模塊的 Public 變量之外其他變量均可以聲明為定長字符串

   

  Visual BasicNET

  CLR 第一版不支持定長字符串在後續版本中將添加這一支持功能

   

  升級向導

   

  在大多數情況下不會出現問題假設為定長字符串表現方式則以下代碼

  Dim MyFixedLengthString As String *

   

  升級後將變為

  Dim MyFixedLengthString As New VBFixedLengthString()

   

  有關該主題的全面說明請參閱白皮書《准備將 Visual Basic 應用程序升級到 Visual BasicNET》(英文)

   

  Type

  Visual Basic

   

  Type 語句用於定義由用戶定義的數據類型

   

  Visual BasicNET

   

  Type 和 UserDefined Type 這兩個名稱會引起混淆因為類枚舉和接口也是可以由用戶定義的類型Type 和 UserDefined Type 是從 QuickBasic 遺留下來的在 QuickBasic 中用戶可以定義的類型只有結構和記錄CLR 使用 Type 這一名稱廣義地包含所有數據類型

   

  因此在 Visual BasicNET 中 Type 語句將變為 Structure

   

  升級向導

   

  將 Type 語句變為 Structure因此以下代碼

  Type MyType MyVariable As Integer End Type

   

  升級後將變為

  Structure MyType Dim MyVariable As Short End Structure

   

  用戶定義類型存儲

  Visual Basic

   

  用戶定義的數據類型可以包含某種數據類型數組或先前定義的用戶定義類型的一個或多個元素在 Visual Basic 它們存儲在連續的內存塊中

   

  Visual BasicNET

   

  格式是最有效的它可能位於一段連續的內存也可能不結構可以被標記為封送處理屬性以確保能夠作為連續內存塊傳遞到 COM 組件

   

  升級向導

   

  在所有需要添加封送處理屬性的位置API 均標記有 TODO 注釋(屬性不是自動添加的只有將結構傳遞到 API 時才需要它們

   

  True

  Visual Basic

  True 的值為

   

  Visual BasicNET

  True 的值為

   

  鑒於語言的協同操作需要一種適用於所有語言的一致表示法

   

  升級向導

   

  如果將布爾值強制轉換為非布爾值代碼將標記有升級警告例如以下代碼

  Dim MyBoolean As BooleanDim MyInteger As Integer MyInteger = MyBoolean

   

  升級後將變為

  Dim MyBoolean As BooleanDim MyInteger As Short UPGRADE_WARNING: Boolean MyBoolean is being converted into a numeric MyInteger = MyBoolean

   

  Empty

  Visual Basic

   

  變量均初始化為 Empty當用於數值表達式時變量將自動轉換為零當用於字符串表達式時則自動轉換為空字符串

   

  Visual BasicNET

   

  對象變量均初始化為 Nothing當用於數值表達式時變量將自動轉換為零當用於字符串表達式時將自動轉換為空字符串使用 Nothing 代替特殊的 Empty 值可以降低語言的復雜性語言協同操作性也更強

   

  升級向導

   

  Null 和 Null 傳播

   

  Visual Basic

   

  Null 值為 Variant 的子類型表示變量不包含有效數據Null 值通過表達式和函數傳播如果表達式的任一部分為 Null則整個表達式為 Null將 Null 作為參數傳遞給大多數函數時這些函數也將返回 Null

   

  Visual BasicNET

   

  不支持 Null 傳播使用 ADONET 對數據進行編程的模型用於在檢索字段的值之前先檢查字段的值是否為 Null包含 null 的變量將作為 DBNull 類型的對象封送處理至 CLR

  Visual BasicNET 處理 Null 時更加直接字符串函數(例如 Left())總是返回字符串與您的預期一樣

   

  升級向導

   

  Null 值和 IsNull 函數標記有升級警告注釋例如以下代碼

  If x Is Null Then MsgBox Null

   

  升級後將變為

   UPGRADE_WARNING: Use of IsNull() detected If IsDBNull(x) Then MsgBox Null

   

  Def<Type>

  Visual Basic

  DefBoolDefByteDefIntDefLngDefCurDefSngDefDblDefDecDefDateDefStrDefObj 和 DefVar 語句用於在模塊級設置變量參數和過程返回類型(以指定字符開始)的默認數據類型

   

  Visual BasicNET

   

  避免使用隱式類型聲明提高了代碼的可讀性和可靠性

   

  升級向導

   

  將變量類型的顯式聲明插入代碼例如以下代碼

  DefStr az

  Sub MySub

  s = Hello

  End Sub

  升級後將變為

  Sub MySub

  Dim s As String

  s = Hello

  End Sub

   

  塊內的局部變量

  Visual Basic

   

  從包含聲明的行至過程結束的范圍內局部變量均可見

   

  Visual BasicNET

   

  Visual BasicNET 支持變量的塊范圍這意味著從包含聲明的行開始至出現聲明的塊結束局部變量均可見例如

   

  Sub Test(x As Integer)

  If x < Then

  Dim y As Integer = x

  

  Else

  

  End If

  End Sub

   

  以上示例中的變量 y 僅在聲明該變量的塊中可用更確切地說它僅在其聲明至 Else 語句之間可用如果需要在整個過程中使用變量則必須在 If/Else/End If 控制結構之外聲明該變量

   

  變量的塊范圍是許多結構語言共有的功能過程局部變量允許定義過程內部變量從而對結構化編程提供支持與此類似塊級別變量允許定義代碼塊內部變量從而對結構化分解提供支持

   

  升級向導

   

  如果變量在塊內聲明變量將自動移至模塊級范圍例如以下代碼

  If x = Then

  Dim y As Integer

  End If

   

  升級後將變為

  Dim y As Integer

  If x = Then

  End If

   

  新的自動重新實例化

  Visual Basic

   

  窗體的類變量聲明 Dim x As New <classname> 將導致編譯器每次引用 x 時生成代碼此代碼檢查 x 是否為 Nothing如果是 Nothing則創建類的新實例例如以下代碼

  Dim x As New MyClass

  

  Call xMyMethod()

   

  等同於

  Dim x As MyClass

  

  If x Is Nothing Then

  Set x = New MyClass

  End If

  Call xMyMethod()

   

  即使變量已經設置為 Nothing在下一次調用時該變量仍將重新實例化

   

  Visual BasicNET

   

  窗體的變量聲明 Dim x As New <classname> 等同於 Dim x As <classname> = New <classname>引用通過此語法聲明的變量不會生成特殊代碼

   

  Visual BasicNET 聲明 As New 比 Visual Basic 中的同一聲明更加有效大多數對這類變量的引用不需要額外的開銷而且Visual Basic 自動實例化行為對於發現它的許多編程人員來說非常古怪

   

  升級向導

   

  這極少會成為問題但是如果代碼嘗試使用已設置為 Nothing 的類將導致運行時異常該異常很容易檢測到然後可以方便地修改代碼以實例化類的新版本如下例所示

   

  Dim x As New MyClass

  x = Nothing

  x = New MyClass

   

  對象終結

   

  Visual Basic

   

  COM 引用計數機制用於垃圾回收對象實例如果對象不在循環中當對象不再使用引用計數會立即檢測到此情況並且運行終結代碼

   

  Visual BasicNET

   

  跟蹤垃圾回收器從存儲在堆棧變量模塊變量和共享變量中的可及引用開始將對象過一遍此跟蹤進程作為後台任務運行因此在指向對象的最後一個引用結束和添加新引用之間有一個不定的時間段

   

  在某些情況下客戶端確實需要能夠強制某一對象釋放資源CLR 規定這樣的對象應當實現 IDisposable 接口這就提供了 Dispose 方法當客戶端結束對具有 Dispose 方法的對象的使用時它可以顯式調用 Dispose 方法以釋放其資源例如包裝數據庫連接的對象應當公開 Dispose 方法

   

  跟蹤垃圾回收器能夠正確釋放引用循環中的對象此外跟蹤垃圾回收器的性能比引用計數要好得多

   

  升級向導

   

  在大多數情況下這一改變不會導致問題如果您的代碼中使用了資源句柄開放(連接或文件句柄)則必須顯式關閉此句柄此問題易於檢測並會導致運行時錯誤

   

  數組

   

  Visual Basic

   

  數組可以由任何整數數字的上下限限定如果在聲明中未指定下限將使用 Option Base 語句確定默認下限

   

  Visual BasicNET

   

  為了與其他語言協同操作所有數組的下限均必須為零這樣就不再需要 Option Base 語句

   

  升級向導

   

  ReDim

  Visual Basic

  Visual Basic 中的固定大小數組和不定大小數組有所區別固定大小數組通過 Dim 語句聲明在此語句包括此聲明中的數組界限動態數組在 Dim 語句中聲明不指定界限信息在使用動態數組之前需要通過 ReDim 語句重新標注動態數組在 Visual Basic ReDim 語句提供了在單個語句中為動態數組聲明和分配空間的快捷方法ReDim 語句是 Visual Basic 中唯一能夠同時聲明和初始化變量的語句

   

  Visual BasicNET

   

  ReDim 語句僅用於為數組分配或重新分配空間而不能用於重新分配數組這是因為 Visual BasicNET 中的所有數組均是動態的在 Visual BasicNET 中 Dim 語句既可用於聲明動態數組又可用於初始化動態數組 由於所有變量聲明均可聲明變量並指定變量的初始值使用 ReDim 同時聲明和初始化變量就變得多余和不必要了只需要 Dim 語句聲明變量使語言更加簡單一致性更高

   

  升級向導

   

  如果 ReDim() 用於聲明數組在代碼中會自動插入相應的聲明但是最好的方法是您自己先在數組中插入 Dim 語句因為使用 ReDim 聲明數組需要升級工具來推斷正確的聲明使用 ReDim 也產生了不便處理的代碼因為數組在兩處進行了同一聲明

   

  賦值

   

  Visual Basic

   

  賦值形式有兩種Let 賦值(默認)和 Set 賦值用 Set 語句為 cn 賦值

   

  Visual BasicNET

   

  僅有一種賦值形式x = y 意味著將變量或屬性 y 的值賦給變量或屬性 x對象類型變量的值是對對象實例的引用因此如果 x 和 y 是引用類型的變量將執行引用賦值這種單一形式的賦值減少了語言的復雜性並使代碼可讀性更強

   

  升級向導

   

  刪除 Set 和 Let 語句解析強類型對象的默認屬性並將屬性顯式添加到代碼中

   

  有關該主題的全面說明請參閱白皮書《准備將 Visual Basic 應用程序升級到 Visual BasicNET》(英文)

   

  AndOrXor 和 Not

  Visual Basic

   

  AndOrXor 和 Not 運算符可以執行邏輯運算或位運算(取決於表達式)

   

  Visual BasicNET

   

  AndOr 和 Xor 僅適用於布爾型對於 And 和 Or 運算符如果第一個運算數的值足以確定運算符的結果則運算符將簡化計算新的運算符 BitOrBitAnd 和 BitXor 均用於位邏輯運算Bitxxx 運算符不具有簡化作用

   

  升級向導

   

  如果 And/Or 語句是非布爾型或者包含函數方法或屬性此語句將升級為使用兼容性函數與 Visual Basic 中的表現形式相同如果 And/Or 語句是布爾型此語句將升級為使用本地 Visual BasicNet 語句

   

  有關該主題的全面說明請參閱白皮書《准備將 Visual Basic 應用程序升級到 Visual BasicNET》(英文)

   

  運算符優先級


From:http://tw.wingwit.com/Article/program/net/201311/12188.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.