Compartir a través de


Cambios en el lenguaje de Visual Basic

ASP.NET no admite Visual Basic Scripting Edition (VBScript), pero es compatible con Visual Basic .NET, que es muy similar a VBScript. Sin embargo, la mayor parte de las páginas ASP existentes que contienen VBScript se tendrán que volver a escribir en cierta medida para poderse ejecutar en ASP.NET.

Entre los cambios de Visual Basic específicos que pueden afectar a las páginas ASP existentes donde se incluye código VBScript se encuentran los relativos a la sintaxis de Visual Basic y al modelo de subprocesos. En las secciones siguientes explican los principales cambios con los que habrá que lidiar cuando se conviertan aplicaciones VBScript ASP a aplicaciones ASP.NET mediante Visual Basic .NET.

Sintaxis de Visual Basic

En la lista siguiente se describen los cambios específicos de Visual Basic .NET que pueden hacer necesario modificar las aplicaciones de Visual Basic o VBScript existentes.

  • Ya no existe el tipo de datos Variant. Se ha reemplazado por el tipo Object. Los tipos Object se deben convertir explícitamente a otros tipos de datos primitivos.

  • Ahora se deben colocar paréntesis alrededor de la lista de parámetros en todas las llamadas a métodos, incluso en el caso de los que no aceptan parámetros. Por ejemplo:

    If Flag = False Then   DisplayMessage()End If
    
  • De forma predeterminada, los argumentos se pasan por valor, no por referencia como en las anteriores versiones de Visual Basic. Si desea pasar argumentos por referencia, debe utilizar la palabra clave ByRef delante del argumento, como en el ejemplo siguiente:

    Call MyFunction(argbyvalue, ByRef argbyref)
    
  • Set y Let ya no se admiten. Los objetos se pueden asignar con una simple operación de asignación:

    Object1 = Object2
    

    Para establecer una propiedad predeterminada de un objeto, debe hacer referencia explícitamente a la propiedad. Por ejemplo:

    Object1.Name = Object2.Name
    
  • La mayoría de los objetos ya no tienen propiedades predeterminadas supuestas. Se debe hacer referencia explícitamente a todas las propiedades que no están indizadas. En las versiones anteriores de Visual Basic, si deseaba tener acceso a la propiedad predeterminada de un objeto se podía especificar el nombre de la propiedad o no. Por ejemplo, si deseaba tener acceso a la propiedad Text de un control TextBox podía utilizar el siguiente código:

    Dim str As String = TextBox1
    

    Porque la propiedad predeterminada del control TextBox era Text. Al utilizar Visual Basic .NET, el código anterior se debe modificar de la siguiente forma:

    Dim str As String = TextBox1.Text
    

    Si se admitieran propiedades predeterminadas en Visual Basic .NET, una expresión como

    Object1 = Object2
    

    sería ambigua, ya que no quedaría claro si Object2 se refiere a un objeto en su totalidad o sólo a la propiedad predeterminada de dicho objeto.

    Otro ejemplo de este cambio es que se debe hacer referencia explícitamente a la propiedad Value del objeto Field al recuperar campos de Recordset (RS en el código siguiente):

    Response.Write (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)
    
  • El tipo de datos Integer ahora es de 32 bits; el tipo de datos Long es de 64 bits.

  • Los tipos de datos siempre se deben convertir explícitamente en otros tipos de datos. Por ejemplo, convierta siempre los valores numéricos a String si espera una cadena:

    Response.Write("The count is " & CStr(count))
    
  • Las variables creadas en la misma instrucción Dim serán del mismo tipo. Por ejemplo, en Visual Basic .NET, la instrucción Dim Dim i, j, k As Integer crea cada uno de los tres objetos (i, j y k) como Integer. En las versiones anteriores de Visual Basic se crearían las variables i y j como Variants y k como Integer.

  • La sintaxis de las propiedades de clase ha cambiado y ya no incluye Property Let, Property Get ni Property Set. La nueva sintaxis de las propiedades es similar a la de C#.

       Public Property ThisProperty As String
          Get
             ThisProperty = InternalValue
          End Get
          Set
             InternalValue = value
          End Set
       End Property
    
  • Al concatenar cadenas, el operador & siempre debe encontrarse entre espacios en blanco. VBScript permitía escribir a&b&c; en Visual Basic . NET esto debe escribirse como a & b & c para evitar un error de sintaxis.

  • Todas las instrucciones If deben construirse en varias líneas. Con VBScript era posible escribir una instrucción If de una sola línea, como If x Then y. En Visual Basic .NET, esto debe escribirse de la siguiente forma:

       If x Then
          y
       End if
    
  • Option Explicit está activada de manera predeterminada, de modo que todas las variables deben declararse para que se puedan utilizar.

Subprocesamiento

ASP.NET utiliza el modelo de subproceso MTA (Multithreaded Apartment, de apartamento multiproceso) en lugar de STA (Single-Threaded Apartment, de un único proceso). Los componentes COM utilizados en las aplicaciones de ASP.NET también deben utilizar el modelo MTA para lograr el mejor rendimiento. Para obtener información sobre cómo utilizar componentes STA en un entorno MTA, vea Compatibilidad del componente COM.

Si utiliza ADO.NET desde aplicaciones de ASP.NET, los componentes de ADO.NET deben configurarse como de subprocesamiento libre (mediante el modelo de subprocesamiento Both). No hay que hacer nada para cambiar el modelo de subproceso; los programas de instalación de .NET Framework y Visual Studio .NET cambian automáticamente el modelo de subproceso de ADO a Both cuando registran Aspnet_isapi.dll.

Puede configurar ADO.NET para que utilice el modelo de subprocesamiento libre si importa los datos siguientes del Registro. Para modificar el Registro, copie estos datos a un archivo REG (como Adofre.reg) e impórtelo mediante el programa Regedit.exe (por ejemplo, Regedit /s Adofre.reg).

La siguiente información del Registro se incluye en el archivo Adofre15.reg en los sistemas Windows 2000 y Windows Server 2003. El archivo por lotes Makfre15.bat actualiza el Registro con la información de Adofre15.reg. Ambos archivos se encuentran en Archivos de programa\Archivos comunes\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"

Si no tiene previsto utilizar ADO.NET desde aplicaciones de ASP.NET, puede utilizar el modelo de subprocesamiento de apartamentos para mejorar el rendimiento de ADO.NET con otras aplicaciones, como las creadas con Visual Basic versión 6. Puede configurar el subproceso de apartamentos si importa los siguientes datos del Registro. Para modificar el Registro, copie estos datos a un archivo REG (como Adoapt.reg) e impórtelo mediante el programa Regedit.exe.

La siguiente información del Registro se incluye en el archivo Adoapt15.reg en los sistemas Windows 2000 y Windows Server 2003. El archivo por lotes Makapt15.bat actualiza el Registro con la información de Adoapt15.reg. Ambos archivos se encuentran en Archivos de programa\Archivos comunes\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"

Vea también

Programación en Visual Basic | Especificación del lenguaje de Visual Basic .NET | Migrar páginas ASP a ASP.NET