Sprachänderungen in Visual Basic

ASP.NET unterstützt zwar nicht Visual Basic Scripting Edition (VBScript), Visual Basic .NET, das VBScript sehr ähnlich ist, wird jedoch unterstützt. Die meisten ASP-Seiten, die VBScript enthalten, müssen jedoch teilweise neu geschrieben werden, um unter ASP.NET ausgeführt werden zu können.

Zu den Visual Basic-Änderungen, die sich möglicherweise auf vorhandene ASP-Seiten mit VBScript auswirken, gehören Änderungen an der Visual Basic-Syntax sowie Änderungen im Threadingmodell. In den folgenden Abschnitten werden die wichtigsten Änderungen behandelt, mit denen Sie sich bei der Konvertierung einer VBScript-ASP-Anwendung in eine ASP.NET-Anwendung mit Visual Basic .NET befassen müssen.

Visual Basic-Syntax

Die folgende Liste enthält spezifische Änderungen in Visual Basic .NET, für die möglicherweise Änderungen der vorhandenen Visual Basic- bzw. VBScript-Anwendungen erforderlich sind.

  • Der Datentyp Variant ist nicht mehr vorhanden. Er wurde durch den Typ Object ersetzt. Der Typ Object muss explizit in andere primitive Datentypen umgewandelt werden.

  • Parameterlisten müssen jetzt in allen Methodenaufrufen in Klammern eingeschlossen werden, selbst bei Methoden, die keine Parameter annehmen. Beispiel:

    If Flag = False Then   DisplayMessage()End If
    
  • Argumente werden standardmäßig durch einen Wert und nicht, wie in vorherigen Versionen von Visual Basic, anhand von Verweisen übergeben. Wenn die Argumente anhand von Verweisen übergeben werden sollen, müssen Sie das ByRef-Schlüsselwort vor dem Argument einfügen (siehe folgendes Beispiel):

    Call MyFunction(argbyvalue, ByRef argbyref)
    
  • Set und Let werden nicht mehr unterstützt. Objekte können durch einfache Zuweisungsoperationen zugewiesen werden:

    Object1 = Object2
    

    Sie müssen jetzt zum Festlegen einer Standardeigenschaft eines Objekts explizit auf die Eigenschaft verweisen.
    Beispiel: Object1.Name = Object2.Name

  • Die meisten Objekte besitzen keine Standardeigenschaften mehr. Auf alle nicht indizierten Eigenschaften muss explizit verwiesen werden. In vorherigen Versionen von Visual Basic war die Angabe des Namens der Standardeigenschaft beim Zugreifen auf die Standardeigenschaft eines Objekts optional. Wenn Sie beispielsweise auf die Text-Eigenschaft eines TextBox-Steuerelements zugreifen wollten, konnten Sie den folgenden Code verwenden:

    Dim str As String = TextBox1
    

    Dies war möglich, da die Text-Eigenschaft die Standardeigenschaft des TextBox-Steuerelements war. Bei Verwendung von Visual Basic .NET muss der oben genannte Code folgendermaßen geändert werden:

    Dim str As String = TextBox1.Text
    

    Wenn in Visual Basic .NET Standardeigenschaften zulässig wären, wäre ein Ausdruck wie

    Object1 = Object2
    

    zweideutig, da nicht auszumachen ist, ob sich Object2 auf das gesamte Objekt oder nur die Standardeigenschaft des Objekts bezieht.

    Ein weiteres Beispiel: Sie müssen explizit auf die Value-Eigenschaft des Field-Objekts verweisen, wenn Sie Felder aus einem Recordset (im folgenden Beispiel RS) abrufen:

    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)
    
  • Der Datentyp Integer umfasst jetzt 32 Bit und der Datentyp Long 64 Bit.

  • Datentypen müssen immer explizit in andere Datentypen umgewandelt werden. Beispielsweise müssen numerische Werte immer in String umgewandelt werden, wenn eine Zeichenfolge erwartet wird:

    Response.Write("The count is " & CStr(count))
    
  • Variablen, die innerhalb derselben Dim-Anweisung erstellt werden, sind vom selben Typ. Beispielsweise erstellt in Visual Basic .NET die Dim-Anweisung Dim i, j, k As Integer alle drei Objekte (i, j und k) als Integer. In vorherigen Versionen von Visual Basic wurden i und j als Variants und k als Integer erstellt.

  • Die Klasseneigenschaftensyntax wurde geändert und enthält nun nicht mehr Property Let, Property Get und Property Set. Die neue Eigenschaftensyntax ähnelt der Eigenschaftensyntax in C#.

       Public Property ThisProperty As String
          Get
             ThisProperty = InternalValue
          End Get
          Set
             InternalValue = value
          End Set
       End Property
    
  • Der &-Operator muss beim Verketten von Zeichenfolgen immer in Leerräume eingeschlossen werden. In VBScript konnten Sie a&b&c schreiben, in Visual Basic . NET muss dies als a & b & c geschrieben werden, damit kein Syntaxfehler auftritt.

  • Alle If-Anweisungen müssen auf mehreren Zeilen erstellt werden. In VBScript konnten einzeilige If-Anweisungen geschrieben werden (z. B. If x Then y). In Visual Basic .NET muss dies folgendermaßen geschrieben werden:

       If x Then
          y
       End if
    
  • Die Option Explicit ist standardmäßig aktiviert, d. h., alle Variablen müssen deklariert werden, bevor sie verwendet werden können.

Threading

ASP.NET verwendet das MTA-Threadingmodell (Multithreadapartment-Threadingmodell) und kein Singlethreadapartment-Modell. Wenn COM-Komponenten, die in ASP.NET-Anwendungen verwendet werden, auch das MTA-Modell verwenden, wird eine bessere Leistung erzielt. Weitere Informationen zum Verwenden von STA-Komponenten in einer MTA-Umgebung finden Sie unter COM-Komponentenkompatibilität.

Wenn Sie ADO.NET aus ASP.NET-Anwendungen verwenden, sollten die ADO.NET-Komponenten Freethreading verwenden (mit Hilfe des Both-Threadingmodells). Zum Ändern des Threadingmodells ist keine Aktion erforderlich. Die Setupprogramme von .NET Framework und Visual Studio .NET ändern das ADO-Threadingmodell beim Registrieren der Datei Aspnet_isapi.dll automatisch in Both.

Sie können ADO.NET so konfigurieren, dass das Freethreadmodell verwendet wird, indem die folgenden Registrierungsdaten importiert werden. Kopieren Sie zum Ändern der Registrierung diese Daten in eine REG-Datei (z. B. Adofre.reg), und importieren Sie sie mit Hilfe des Programms Regedit.exe (z. B. Regedit /s Adofre.reg).

Die folgenden Registrierungsinformationen sind in Windows 2000- und Windows Server 2003-Systemen in der Datei Adofre15.reg enthalten. Die Batchdatei Makfre15.bat aktualisiert die Registrierung anhand der Informationen in der Datei Adofre15.reg. Beide Dateien befinden sich unter Programme\Gemeinsame Dateien\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"

Wenn Sie nicht vorhaben, ADO.NET aus ASP.NET-Anwendungen zu verwenden, können Sie das Apartmentthreading-Modell verwenden, um eine bessere ADO.NET-Leistung mit älteren Anwendungen zu erzielen, z. B. Anwendungen, die mit Visual Basic, Version 6, erstellt wurden. Sie können das Apartmentthreading konfigurieren, indem Sie die folgenden Registrierungsdaten importieren. Kopieren Sie zum Ändern der Registrierung diese Daten in eine REG-Datei (z. B. Adoapt.reg), und importieren Sie sie mit Hilfe des Programms Regedit.exe.

Die folgenden Registrierungsinformationen sind in Windows 2000- und Windows Server 2003-Systemen in der Datei Adoapt15.reg enthalten. Die Batchdatei Makapt15.bat aktualisiert die Registrierung anhand der Informationen in der Datei Adoapt15.reg. Beide Dateien befinden sich unter Programme\Gemeinsame Dateien\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"

Siehe auch

Visual Basic-Programmierung | Visual Basic .NET-Programmiersprachenspezifikation | Migrieren von ASP-Seiten zu ASP.NET