共用方式為


Visual Basic 語言變更

ASP.NET 不支援 Visual Basic 指令碼版 (VBScript),但卻支援 Visual Basic .NET,後者十分類似 VBScript。但是,大部份包含 VBScript 的現有 ASP 網頁,仍必須作某種程序的重寫才能在 ASP.NET 之下執行。

可能影響包含 VBScript 的現有 ASP 網頁的特定 Visual Basic 變更,包括 Visual Basic 語法變更和執行緒模型中的變更。以下章節討論當您使用 Visual Basic .NET 將 VBScript ASP 應用程式轉換成 ASP.NET 應用程式時,需要處理的主要變更。

Visual Basic 語法

下列清單說明 Visual Basic .NET 中可能需要變更現有 Visual Basic 或 VBScript 應用程式的特定變更。

  • 資料型別 Variant 已不存在。已由型別 Object 所取代。Object 型別必須明確地轉型為其他基本的資料型別。

  • 所有方法呼叫中的參數清單現在都需要有括弧,即使沒有參數的方法也一樣。例如:

    If Flag = False Then   DisplayMessage()End If
    
  • 在預設的情況下,引數依數值來傳遞,而不是像舊版的 Visual Basic 一樣依參考來傳遞。如果您希望依參考來傳遞引數,必須在引數前使用 ByRef 關鍵字,如以下範例所示:

    Call MyFunction(argbyvalue, ByRef argbyref)
    
  • 不再支援 SetLet。物件可藉由單純的設定作業來加以指派:

    Object1 = Object2
    

    若要設定物件的預設屬性,現在您必須明確地參考屬性。例如:

  • Object1.Name = Object2.NameMost 物件不再具有假設的預設屬性。所有的非索引屬性必須明確地加以參考。在舊版的 Visual Basic 中,如果您希望存取物件的預設屬性,則指定屬性的名稱是選擇性 (Optional) 的。例如,如果您希望存取 TextBox 控制項的 Text 屬性,您可以使用下列程式碼:

    Dim str As String = TextBox1
    

    由於 TextBox 控制項的預設屬性是 Text 屬性。但若使用 Visual Basic .NET,上述程式碼必須修改為如下所示:

    Dim str As String = TextBox1.Text
    

    如果在 Visual Basic .NET 中不允許使用預設屬性,像是

    Object1 = Object2
    

    的運算式會變得模稜兩可,因為不清楚 Object2 是指整個物件還是只是物件的預設屬性。

    在另一個範例中,從 Recordset 中擷取欄位時,您必須明確參考 Field 物件的 Value 屬性 (以下範例中為 RS):

    Response.Write ( Server.HtmlEncode(RS("au_fname").Value))
    Indexed default properties are supported if the class contains a definition for an indexed property. The following expression is valid because the indexer makes it clear that an indexed property, not the object itself, is being referenced:
    MyProperty = Object2(6)
    
  • Integer 資料型別現在是 32 位元;Long 資料型別是 64 位元。

  • 資料型別一定會明確地轉型為其他資料型別。例如,若預期為字串 (String) 時,一定會將數值轉型為 String

    Response.Write("The count is " & CStr(count))
    
  • 在相同 Dim 陳述式中所建立的變數將具有相同型別。例如,在 Visual Basic .NET 中,Dim 陳述式 Dim i, j, k As Integer 將三個物件 (ijk) 都建立為 Integer。舊版 Visual Basic 會將 ij 建立為 Variants 而將 k 建立為 Integer

  • 類別 (Class) 屬性語法已變更,不再包括 Property LetProperty GetProperty Set。新的屬性語法類似 C# 中的語法。

       Public Property ThisProperty As String
          Get
             ThisProperty = InternalValue
          End Get
          Set
             InternalValue = value
          End Set
       End Property
    
  • 在串連字串時,& 運算子前後一定要加上空格。VBScript 允許您寫成 a&b&c; 在 Visual Basic .NET 中,這必須寫成 & b & c 以避免語法錯誤。

  • 所有 If 陳述式都必須建構為多行的結構。使用 VBScript 時,可以寫成單行的 If 陳述式,例如 If x Then y。但在 Visual Basic .NET 中,必須寫成如下所示:

       If x Then
          y
       End if
    
  • Option Explicit 的預設為 On,因此所有變數在使用前都必須先宣告。

執行緒處理

ASP.NET 採用多執行緒 Apartment Model (Multithreaded Apartment Model,MTA) 執行緒模型,而不是單一執行緒 Apartment Model (STA)。ASP.NET 應用程式所使用的COM 元件,為得到最佳效能,也應使用 MTA 模型。如需在 MTA 環境中使用 STA 元件的詳細資訊,請參閱 COM 元件相容性

如果您使用 ASP.NET 應用程式的 ADO.NET,ADO.NET 元件應設定為無限制執行緒 (使用 Both 執行緒模型)。變更執行緒模型不需要任何動作;.NET Framework 和 Visual Studio .NET 安裝程式在註冊 Aspnet_isapi.dll 時,會自動將 ADO 執行緒模型變更為 Both

您可以藉由匯入下列登錄資料,將 ADO.NET 設定為使用無限制執行緒模型。若要修改登錄,應將這個資料複製到 REG 檔案 (例如 Adofre.reg),並利用 Regedit.exe 程式匯入它。

下列登錄資訊包含在 Windows 2000 和 Windows Server 2003 系統的 Adofre15.reg 檔中。批次 (Batch) 檔 Makfre15.bat 利用 Adofre15.reg 中的資訊更新登錄。兩個檔案都位於 Program Files\Common Files\System\ado\ 路徑下。

REGEDIT4
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{00000507-0000-0010-8000-00AA006D2EA4}\InprocServer32]
"ThreadingModel"="Both"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{00000514-0000-0010-8000-00AA006D2EA4}\InprocServer32]
"ThreadingModel"="Both"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{0000050B-0000-0010-8000-00AA006D2EA4}\InprocServer32]
"ThreadingModel"="Both"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{00000535-0000-0010-8000-00AA006D2EA4}\InprocServer32]
"ThreadingModel"="Both"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{00000541-0000-0010-8000-00AA006D2EA4}\InprocServer32]
"ThreadingModel"="Both"

如果您沒有計劃使用 ASP.NET 應用程式的 ADO.NET,可以使用 apartment 執行緒模型搭配以像是 Visual Basic 版本 6 建立的舊版應用程式,以達到較佳的 ADO.NET 效能。您可以匯入以下登錄資料來設定 apartment 執行緒。若要修改登錄,應將這個資料複製到 REG 檔案 (例如 Adoapt.reg),並利用 Regedit.exe 程式匯入。

下列登錄資訊包含在 Windows 2000 和 Windows Server 2003 系統的 Adoapt15.reg 檔中。Makapt15.bat 批次檔利用 Adoapt15.reg 中的資訊更新登錄。兩個檔案都位於 \Program Files\Common Files\System\ado\ 路徑下。

REGEDIT4
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{00000507-0000-0010-8000-00AA006D2EA4}\InprocServer32]
"ThreadingModel"="Apartment"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{00000514-0000-0010-8000-00AA006D2EA4}\InprocServer32]
"ThreadingModel"="Apartment"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{0000050B-0000-0010-8000-00AA006D2EA4}\InprocServer32]
"ThreadingModel"="Apartment"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{00000535-0000-0010-8000-00AA006D2EA4}\InprocServer32]
"ThreadingModel"="Apartment"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{00000541-0000-0010-8000-00AA006D2EA4}\InprocServer32]
"ThreadingModel"="Apartment"

請參閱

Visual Basic 程式設計 | Visual Basic .NET 語言規格 | 將 ASP 網頁轉換成 ASP.NET