Documentos de Académico
Documentos de Profesional
Documentos de Cultura
En este tema se enumeran los nombres de las características clave de cada versión de Visual Basic con
descripciones detalladas de las características nuevas y mejoradas de las versiones más recientes del lenguaje.
Versión actual
Visual Basic 16.0/Visual Studio 2019, versión 16.0
Para las nuevas características, vea Visual Basic 16.0.
Versiones anteriores
Visual Basic 15.8/Visual Studio 2017, versión 15.8
Para consultar las nuevas características, vea Visual Basic 15.8.
Visual Basic 15.5/Visual Studio 2017, versión 15.5
Para consultar las nuevas características, vea Visual Basic 15.5.
Visual Basic 15.3/Visual Studio 2017, versión 15.3
Para consultar las nuevas características, vea Visual Basic 15.3.
Visual Basic 2017/Visual Studio 2017
Para consultar las nuevas características, vea Visual Basic 2017.
Visual Basic/Visual Studio 2015
Para consultar las nuevas características, vea Visual Basic 14.
Visual Basic/Visual Studio 2013
Vistas previas de tecnología de .NET Compiler Platform ("Roslyn")
Visual Basic/Visual Studio 2012
palabras clave Async y await , iteradores, atributos de información de autor de llamada
Visual Basic, Visual Studio 2010
Propiedades autoimplementadas, inicializadores de colección, continuación de línea implícita, dinámica,
covarianza/contravarianza genérica, acceso de espacio de nombres global
Visual Basic/Visual Studio 2008
Language Integrated Query (LINQ), literales XML, inferencia de tipo de variable local, inicializadores de objeto, tipos
anónimos, métodos de extensión, inferencia de tipo de variable local var , expresiones lambda, operador if ,
métodos parciales, tipos de valor que aceptan valores null
Visual Basic/Visual Studio 2005
El tipo My y los tipos del asistente (acceso a la aplicación, equipo, sistema de archivos, red)
Visual Basic/Visual Studio .NET 2003
Operadores de desplazamiento de bits, declaración de variable de bucle
Visual Basic/Visual Studio .NET 2002
La primera versión de Visual Basic .NET
Esta nueva combinación de palabras clave define un miembro al que pueden acceder todos los miembros de su
clase contenedora y los tipos derivados de dicha clase, pero solo si también se encuentran en el ensamblado
contenedor. Dado que las estructuras no se pueden heredar, Private Protected solo se pueden aplicar a los
miembros de una clase.
Separador hexadecimal/binario/octal inicial
En Visual Basic 2017 se ha agregado compatibilidad con el carácter de subrayado ( _ ) como separador de dígitos.
A partir de Visual Basic 15.5 puede usar el carácter de subrayado como separador inicial entre el prefijo y los
dígitos hexadecimales, binarios u octales. En el ejemplo siguiente se usa un separador de dígitos inicial para definir
3,271,948,384 como número hexadecimal:
Para usar el carácter de subrayado como separador inicial, debe agregar el elemento siguiente al archivo del
proyecto de Visual Basic (*.vbproj):
<PropertyGroup>
<LangVersion>15.5</LangVersion>
</PropertyGroup>
Imports System.Globalization
Después, puede llamar al método y controlar la tupla devuelta con código como el siguiente.
Para obtener más información, vea la sección "Asignaciones literales" de los tipos de datos Byte, Integer, Long,
Short, SByte, UInteger, ULong y UShort.
Compatibilidad con los valores devueltos de referencia de C#
A partir de C# 7.0, C# admite los valores devueltos de referencia. Es decir, cuando el método de llamada recibe un
valor devuelto mediante referencia, puede cambiar el valor de esta. Visual Basic no le permite crear métodos con
valores devueltos de referencia, pero le permite consumirlos y modificarlos.
Por ejemplo, la siguiente clase Sentence escrita en C# incluye un método FindNext que busca la siguiente palabra
de una frase que comienza por una subcadena especificada. La cadena se devuelve como un valor devuelto de
referencia, y una variable Boolean que se ha pasado mediante referencia al método indica si la búsqueda se ha
realizado correctamente. Esto significa que, aparte de leer el valor devuelto, el autor de la llamada también puede
modificarlo, y esa modificación se refleja en la clase Sentence .
using System;
return stringToReturn.Trim();
}
}
En su forma más sencilla, puede modificar la palabra que se ha encontrado en la frase con código como el que se
muestra a continuación. Tenga en cuenta que no está asignando un valor al método, sino a la expresión que
devuelve el método, que es el valor devuelto de referencia.
En cambio, un problema con este código es que si no se detecta una coincidencia, el método devuelve la primera
palabra. Como el ejemplo no examina el valor del argumento Boolean para determinar si se detecta una
coincidencia, modifica la primera palabra si no hay ninguna. En el ejemplo siguiente se corrige esto reemplazando
la primera palabra por ella misma si no existe ninguna coincidencia.
Una solución mejor es usar un método del asistente en el que el valor devuelto de referencia se pase mediante una
referencia. El método del asistente puede después modificar el argumento que se ha pasado por referencia. En el
siguiente ejemplo se realiza esto.
Module Example
Public Sub Main()
Dim sentence As New Sentence("A time to see the world is now.")
Dim found = False
Dim returns = RefHelper(sentence.FindNext("A", found), "A good", found)
Console.WriteLine(sentence.GetSentence())
End Sub
Visual Basic 14
NameOf
Puede obtener el nombre de cadena no calificado de un tipo o miembro para usarlo en un mensaje de error sin
codificar de forma rígida una cadena. Esto permite que el código siga siendo correcto al refactorizarlo. Esta
característica también es útil para enlazar los vínculos MVC del controlador de vista de modelos y desencadenar
eventos de propiedad cambiada.
Interpolación de cadenas
Puede usar expresiones de interpolación de cadenas para construir cadenas. Una expresión de cadena interpolada
es similar a una cadena de plantilla que contiene expresiones. Una cadena interpolada es más fácil de entender con
respecto a los argumentos que el formato compuesto.
Acceso a miembros condicionales NULL e indexación
Puede probar si hay valores null de forma sintáctica ligera antes de realizar una operación de acceso a miembros (
?. ) o índice ( ?[] ). Estos operadores ayudan a escribir menos código para controlar las comprobaciones de null,
especialmente para descender en estructuras de datos. Si la referencia de objeto u operando izquierdo es null, la
operación devuelve null.
Literales de cadena multilínea
Los literales de cadena pueden contener secuencias de nueva línea. Ya no necesita la antigua solución alternativa
que consistía en usar <xml><![CDATA[...text with newlines...]]></xml>.Value
Comentarios
Puede colocar comentarios después de las continuaciones de línea implícita, dentro de expresiones de inicializador
y entre los términos de la expresión LINQ.
Resolución de nombres completos más inteligente
Dado código como Threading.Thread.Sleep(1000) , Visual Basic solía buscar el espacio de nombres "Threading",
detectaba ambigüedad entre System.Threading y System.Windows.Threading y, a continuación, notificaba un error.
Ahora, Visual Basic considera juntos ambos espacios de nombres posibles. Si aparece la lista de finalización, el
editor de Visual Studio muestra los miembros de ambos tipos en la lista de finalización.
Literales de fecha con el año en primer lugar
Puede tener literales de fecha en el formato aaaa-mm-dd, #2015-03-17 16:10 PM# .
Propiedades de interfaz de solo lectura
Puede implementar propiedades de interfaz de solo lectura mediante una propiedad de lectura y escritura. La
interfaz garantiza una funcionalidad mínima y no impide que una clase de implementación pueda establecer la
propiedad.
TypeOf <expr> IsNot <type>
Para mejorar la legibilidad del código, ahora puede usar TypeOf con IsNot .
#Disable Warning <ID> y #Enable Warning <ID>
Puede deshabilitar y habilitar advertencias específicas para las regiones dentro de un archivo de origen.
Mejoras de comentarios de documento XML
Al escribir comentarios de documento, obtiene compatibilidad inteligente de editor y compilación para validar
nombres de parámetro, controlar adecuadamente crefs (genéricos, operadores, etc.), colorear y refactorizar.
Definiciones de módulo parcial e interfaz
Además de clases y structs, puede declarar módulos parciales e interfaces.
Directivas #Region dentro de cuerpos de método
Puede colocar delimitadores #Region... #End Region en cualquier parte de un archivo, dentro de funciones e incluso
abarcando los cuerpos de función.
Las definiciones de invalidaciones son implícitamente sobrecargas
Si agrega el modificador Overrides a una definición, el compilador agrega implícitamente Overloads , de modo
que pueda escribir menos código en los casos comunes.
CObj permitido en argumentos de atributos
El compilador solía producir un error advirtiendo de que CObj(...) no era una constante cuando se usaba en
construcciones de atributo.
Declaración y consumo de métodos ambiguos desde otras interfaces
Anteriormente, en el código siguiente producía errores que impedían declarar IMock o llamar a GetDetails (si
estos se habían declarado en C#):
Interface ICustomer
Sub GetDetails(x As Integer)
End Interface
Interface ITime
Sub GetDetails(x As String)
End Interface
Ahora el compilador usa las reglas de resolución de sobrecarga normales para elegir el GetDetails más apropiado
que se va a llamar, y se pueden declarar relaciones de interfaz en Visual Basic como las que se muestran en el
ejemplo.
Vea también
Novedades de Visual Studio 2017
Novedades de Visual Studio 2019
Introducción a Visual Basic
18/03/2020 • 2 minutes to read • Edit Online
Esta sección de la documentación sirve como introducción al desarrollo de aplicaciones con Visual Basic.
Información adicional
Novedades de Visual Basic Se enumeran las características nuevas de cada versión de Visual Basic .NET.
Recursos adicionales para programadores de Visual Basic Se proporciona una lista de sitios web y grupos de
noticias que ayudan a encontrar respuestas a problemas comunes.
Vea también
Obtener Visual Basic Ofrece vínculos de descarga para las versiones de Visual Studio que son compatibles
con Visual Basic, incluidas las versiones gratuitas.
Programación orientada a objetos Proporciona vínculos a páginas que presentan la programación orientada
a objetos y describen cómo crear sus propios objetos y cómo utilizar objetos para simplificar la escritura del
código.
Ejemplos Proporciona vínculos al código de ejemplo de Visual Basic.
Tutoriales Proporciona una lista de páginas de Ayuda donde se explican aspectos del lenguaje Visual Basic.
Opciones de comentarios para Visual Studio Se explica cómo recibir asistencia y proporcionar información
al servicio técnico.
Visual Studio Proporciona vínculos a la documentación de Visual Studio.
C# Proporciona los vínculos a la documentación sobre desarrollo de aplicaciones con Visual C#.
Visual C++ Proporciona vínculos a la documentación de Visual C++.
Desarrollo de Office y SharePoint Proporciona información sobre cómo usar Microsoft Office y Visual Studio
como parte de una aplicación empresarial.
Recursos adicionales
18/03/2020 • 2 minutes to read • Edit Online
En los siguientes sitios web encontrará orientación y respuestas a algunos problemas comunes.
Recursos de Microsoft
En la Web
URL DESC RIP T IO N
Diseño del lenguaje Visual Basic .NET Repositorio oficial en GitHub para el diseño del lenguaje Visual
Basic .NET.
Blog del equipo de Microsoft Visual Basic Permite acceder al blog del equipo de Visual Basic.
Ejemplos de código
URL DESC RIP T IO N
Ejemplos de documentación de Visual Basic Contiene los ejemplos que se usan en la documentación de
Visual Basic y de .NET.
Foros
URL DESC RIP T IO N
Vídeos y webcasts
URL DESC RIP T IO N
Compatibilidad
URL DESC RIP T IO N
Soporte técnico de Microsoft Proporciona acceso a los artículos de Knowledge Base (KB), a
descargas y actualizaciones, a difusiones web sobre soporte
técnico y a otros servicios.
Recursos de terceros
URL DESC RIP T IO N
Vea también
Introducción a Visual Basic
Hable con nosotros
Desarrollo de aplicaciones con Visual Basic
18/03/2020 • 2 minutes to read • Edit Online
En esta sección
Programación en Visual Basic
Abarca una gran variedad de temas relacionados con la programación.
Desarrollo con la función My
Versa sobre una nueva característica llamada My , que proporciona acceso a información y a instancias de objetos
predeterminados relacionados con una aplicación y su entorno de ejecución.
Obtener acceso a datos en aplicaciones de Visual Basic
Contiene ayuda sobre cómo acceder a los datos de Visual Basic.
Crear y usar componentes en Visual Basic
Se define el término componente y se habla de cómo y cuándo crear componentes.
Fundamentos de las aplicaciones de Windows Forms
Proporciona información sobre cómo crear aplicaciones de Windows Forms usando Visual Studio.
Personalizar proyectos y ampliar My
Describe cómo personalizar plantillas de proyecto para proporcionar objetos de My adicionales.
Secciones relacionadas
Guía de programación en Visual Basic
Se explican los elementos básicos de la programación con Visual Basic.
Referencia del lenguaje Visual Basic
Contiene documentación de referencia del lenguaje Visual Basic.
Programar en Visual Basic
18/03/2020 • 2 minutes to read • Edit Online
En esta sección se describen las tareas de programación sobre las que necesitará obtener información adicional a
medida que crea la aplicación de Visual Basic.
En esta sección
Acceso a los recursos del equipo
Contiene documentación sobre cómo utilizar el objeto My.Computer para acceder a información sobre el equipo en
el que se ejecuta una aplicación y cómo controlar el equipo.
Registrar información de la aplicación
Contiene documentación sobre cómo registrar información de la aplicación mediante los objetos
My.Application.Log y My.Log y cómo ampliar las capacidades de registro de la aplicación.
Vea también
Características del lenguaje Visual Basic
Conceptos de programación
Colecciones
Desarrollo de aplicaciones con Visual Basic
Acceso a los recursos del equipo (Visual Basic)
18/03/2020 • 2 minutes to read • Edit Online
El objeto My.Computer es uno de los tres objetos centrales de My que proporcionan acceso a información y
funciones de uso frecuente. My.Computer proporciona los métodos, propiedades y eventos para obtener acceso al
equipo donde se ejecuta la aplicación. Entre sus objetos se incluyen:
Audio
Portapapeles (ClipboardProxy)
Clock
FileSystem
Info
Keyboard
Mouse
Network
Ports
Registro (RegistryProxy)
En esta sección
Reproducir sonidos
Muestra las tareas asociadas a My.Computer.Audio , como reproducir un sonido en segundo plano.
Almacenar y leer datos en el Portapapeles
Muestra las tareas asociadas a My.Computer.Clipboard , como leer datos del Portapapeles o escribir datos en él.
Obtener información acerca del equipo
Muestra las tareas asociadas a My.Computer.Info , como determinar el nombre completo o las direcciones IP de un
equipo.
Acceso al teclado
Muestra las tareas asociadas a My.Computer.Keyboard , como determinar si BLOQ MAYÚS está activado.
Acceso al mouse
Muestra las tareas asociadas a My.Computer.Mouse , como determinar si un mouse está presente.
Realizar operaciones de red
Muestra las tareas asociadas a My.Computer.Network , como cargar o descargar archivos.
Acceso a los puertos del equipo
Muestra las tareas asociadas a My.Computer.Ports , como mostrar los puertos serie disponibles o enviar cadenas a
los puertos serie.
Leer y escribir en el Registro
Muestra las tareas asociadas a My.Computer.Registry , como leer datos de las claves del Registro o escribir datos en
ellas.
Registrar información de la aplicación (Visual Basic)
18/03/2020 • 2 minutes to read • Edit Online
Esta sección contiene temas que explican cómo registrar información sobre su aplicación usando el objeto
My.Application.Log o My.Log y cómo ampliar las capacidades de registro de la aplicación.
El objeto Log proporciona métodos para escribir información en los agentes de escucha de registro de la
aplicación y la propiedad avanzada Log del objeto TraceSource proporciona información de configuración
detallada. El archivo de configuración de la aplicación configura el objeto Log .
El objeto solo está disponible para las aplicaciones ASP.NET. Para las aplicaciones cliente, use
My.Log
My.Application.Log . Para obtener más información, consulta Log.
Tareas
PA RA VEA
Escribir información de seguimiento en los registros de la Registrar mensajes cuando se inicia o se cierra la aplicación
aplicación cuando se inicia y se cierra la aplicación.
Configurar My.Application.Log para que escriba Escribir información de eventos en un archivo de texto
información en un archivo de texto.
Configurar My.Application.Log para escribir información en Cómo: Escribir el registro de eventos de una aplicación
un registro de eventos.
Cambiar la ubicación dónde My.Application.Log escribe Tutorial: Cambiar el lugar donde My.Application.Log escribe
información. información
Determinar dónde My.Application.Log escribe información. Tutorial: Determinar el lugar en el que My.Application.Log
escribe la información
Crear un agente de escucha de registro personalizado para Tutorial: Crear agentes de escucha de registro personalizados
My.Application.Log .
Vea también
Microsoft.VisualBasic.Logging.Log
Trabajar con registros de aplicaciones
Solución de problemas: Agentes de escucha de registro
Acceso a los datos de usuario (Visual Basic)
18/03/2020 • 2 minutes to read • Edit Online
Esta sección contiene temas que tratan del objeto My.User y de las tareas que se pueden realizar con él.
El objeto My.User proporciona acceso a información sobre los usuarios que han iniciado la sesión devolviendo un
objeto que implementa la interfaz IPrincipal.
Tareas
PA RA VEA
Vea también
User
Acceso a los formularios de aplicaciones (Visual Basic)
18/03/2020 • 2 minutes to read • Edit Online
El objeto My.Forms proporciona una manera fácil de tener acceso a una instancia de cada Windows Form
declarado en el proyecto de la aplicación. También puede usar propiedades del objeto My.Application para tener
acceso a la pantalla de presentación y el formulario principal de la aplicación y para obtener una lista de los
formularios abiertos de la aplicación.
Tareas
En la siguiente tabla se incluyen ejemplos que muestran cómo acceder a los formularios de una aplicación.
PA RA VEA
Vea también
OpenForms
SplashScreen
My.Forms (objeto)
Acceso a los servicios Web de aplicaciones (Visual
Basic)
18/03/2020 • 2 minutes to read • Edit Online
El objeto My.WebServices proporciona una instancia de cada servicio Web al que hace referencia el proyecto
actual. Cada una de las instancias se crea a petición. Puede tener acceso a estos servicios Web a través de las
propiedades del objeto My.WebServices . El nombre de la propiedad es igual que el nombre del servicio Web al
que tiene acceso la propiedad. Cualquier clase que hereda de SoapHttpClientProtocol es un servicio web.
Tareas
La tabla siguiente muestra las posibles maneras de tener acceso a los servicios Web a los que hace referencia una
aplicación.
PA RA VEA
Llamar de manera asincrónica a un servicio Web y controlar Llamar a un servicio web de forma asincrónica
un evento cuando finaliza
Vea también
My.WebServices (objeto)
Cómo: Llamar a un servicio Web de forma
asincrónica (Visual Basic)
18/03/2020 • 3 minutes to read • Edit Online
En este ejemplo se adjunta un controlador a un evento de controlador asincrónico de servicios web para poder
recuperar el resultado de una llamada de método asincrónico. En este ejemplo se ha usado el servicio web
DemoTemperatureService de http://www.xmethods.net .
Cuando se hace referencia a un servicio web en el proyecto en el entorno de desarrollo integrado (IDE) de Visual
Studio, dicho servicio se agrega al objeto My.WebServices y el IDE genera una clase de proxy de cliente para
obtener acceso al servicio web especificado.
La clase de proxy permite llamar sincrónicamente a los métodos de servicio web, mientras la aplicación espera a
que la función finalice. El proxy crea además otros miembros para ayudar a llamar al método asincrónicamente.
Por cada función de servicio web, NombreDeFunciónDeServicioWeb, el proxy crea una subrutina
NombreDeFunciónDeServicioWeb Async , un evento NombreDeFunciónDeServicioWeb Completed y una clase
NombreDeFunciónDeServicioWeb CompletedEventArgs . En este ejemplo se muestra cómo usar los miembros
asincrónicos para acceder a la función getTemp del servicio web DemoTemperatureService.
NOTE
Este código no funciona en aplicaciones web, ya que ASP.NET no admite el objeto My.WebServices .
http://www.xmethods.net/sd/2001/DemoTemperatureService.wsdl
NOTE
La instrucción Handles no se puede usar para asociar un controlador de eventos con los eventos del objeto
My.WebServices .
4. Agregue un método para agregar el controlador de eventos al evento getTempCompleted (en caso necesario)
y para llamar al método getTempAsync :
Llame al método getTemp para llamar al método web CallGetTempAsync asincrónicamente. Cuando el
método web finalice, su valor devuelto se pasa al controlador de eventos getTempCompletedHandler .
Vea también
Acceso a los servicios web de la aplicación
My.WebServices (objeto)
Acceso a la configuración de la aplicación (Visual
Basic)
18/03/2020 • 2 minutes to read • Edit Online
Esta sección contiene temas en los que se describe el objeto My.Settings y las tareas que le permite realizar.
My.Settings
Las propiedades del objeto My.Settings proporcionan acceso a la configuración de la aplicación. Para agregar o
quitar la configuración, use el panel Configuración del Diseñador de proyectos .
Los métodos del objeto My.Settings permiten guardar la configuración actual de usuario o revertirla a los últimos
valores guardados.
Tareas
En la siguiente tabla se incluyen ejemplos que muestran cómo acceder a los formularios de una aplicación.
PA RA VEA
Actualizar el valor de una configuración de usuario Cómo: Cambiar la configuración del usuario en Visual Basic
Mostrar configuración de aplicación y usuario en una Cómo: Crear cuadrículas de propiedades para la configuración
cuadrícula de propiedades del usuario en Visual Basic
Guardar los valores de configuración de usuario actualizados Cómo: Conservar la configuración del usuario en Visual Basic
Determinar los valores de la configuración de usuario Cómo: Leer la configuración de la aplicación en Visual Basic
Vea también
Administrar la configuración de la aplicación (.NET)
My.Settings (objeto)
2 minutes to read
Desarrollo con My (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Visual Basic ofrece nuevas características para el desarrollo rápido de aplicaciones que mejoran la productividad y
la facilidad de uso con la máxima eficacia. Una de estas funciones, My , proporciona acceso a información y a las
instancias de objetos predeterminados relacionados con la aplicación y su entorno de ejecución. Esta información
está organizada en un formato que se descubre mediante IntelliSense y se define lógicamente según su uso.
Los miembros de nivel superior de My se exponen como objetos. Cada objeto se comporta de forma similar a un
espacio de nombres o una clase con miembros Shared y expone un conjunto de miembros relacionados.
Esta tabla muestra los objetos My de nivel superior y sus relaciones entre sí.
Esta sección
Realizacion de tareas con My.Application, My.Computer y My.User
Describe los tres objetos principales My , a saber, My.Application , My.Computer y My.User , que proporcionan
acceso a información y funcionalidades.
Instancias de objeto predeterminadas proporcionadas por My.Forms y My.WebServices
Describe los objetos My.Forms y My.WebServices , que proporcionan acceso a formularios, orígenes de datos y
servicios web XML utilizados por la aplicación.
Desarrollo rápido de aplicaciones con My.Resources y My.Settings
Describe los objetos My.Resources y My.Settings , que proporcionan acceso a la configuración y los recursos de
una aplicación.
Información general sobre el modelo de aplicaciones de Visual Basic
Describe el modelo de inicio y cierre de la aplicación Visual Basic.
Cómo My depende del tipo de proyecto
Proporciona información detallada sobre las características My disponibles en diferentes tipos de proyectos.
Vea también
ApplicationBase
Computer
User
My.Forms (objeto)
My.WebServices (objeto)
Cómo My depende del tipo de proyecto
Realizar tareas con My.Application, My.Computer y
My.User (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Los tres objetos de My central que proporcionan acceso a la información y a la funcionalidad de uso común son
My.Application (ApplicationBase), My.Computer (Computer) y My.User (User). Puede usar estos objetos para tener
acceso a la información relacionada con la aplicación actual, el equipo en el que está instalada la aplicación o el
usuario actual de la aplicación, respectivamente.
' Displays a message box that shows the full command line for the
' application.
Dim args As String = ""
For Each arg As String In My.Application.CommandLineArgs
args &= arg & " "
Next
MsgBox(args)
Además de recuperar información, los miembros expuestos a través de estos tres objetos también permiten
ejecutar métodos relacionados con ese objeto. Por ejemplo, puede tener acceso a diversos métodos para manipular
archivos o actualizar el registro a través de My.Computer .
La e/s de archivos es mucho más sencilla y más rápida con My , que incluye una variedad de métodos y
propiedades para manipular archivos, directorios y unidades. El objeto TextFieldParser permite leer archivos
estructurados de gran tamaño que tienen campos delimitados o de ancho fijo. En este ejemplo se abre el reader
TextFieldParser y se usa para leer de C:\TestFolder1\test1.txt .
Dim reader =
My.Computer.FileSystem.OpenTextFieldParser("C:\TestFolder1\test1.txt")
reader.TextFieldType = Microsoft.VisualBasic.FileIO.FieldType.Delimited
reader.Delimiters = New String() {","}
Dim currentRow As String()
While Not reader.EndOfData
Try
currentRow = reader.ReadFields()
Dim currentField As String
For Each currentField In currentRow
MsgBox(currentField)
Next
Catch ex As Microsoft.VisualBasic.FileIO.MalformedLineException
MsgBox("Line " & ex.Message &
"is not valid and will be skipped.")
End Try
End While
My.Application permite cambiar la referencia cultural de la aplicación. En el ejemplo siguiente se muestra cómo se
puede llamar a este método.
' Changes the current culture for the application to Jamaican English.
My.Application.ChangeCulture("en-JM")
Vea también
ApplicationBase
Computer
User
Cómo My depende del tipo de proyecto
Instancias de objeto predeterminadas proporcionadas
por My.Forms y My.WebServices (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Los objetos My. Forms y My. webservices proporcionan acceso a los formularios, orígenes de datos y servicios
Web XML utilizados por la aplicación. Para ello, proporcionan colecciones de instancias predeterminadas de cada
uno de estos objetos.
Instancias predeterminadas
Una instancia predeterminada es una instancia de la clase proporcionada por el motor en tiempo de ejecución y no
es necesario que se declare y cree una instancia de mediante las instrucciones Dim y New . En el ejemplo siguiente
se muestra cómo se podría haber declarado y creado una instancia de una instancia de una clase Form
denominada Form1 y cómo se puede obtener una instancia predeterminada de esta clase Form a través de
My.Forms .
' With My.Forms, you can directly call methods on the default
' instance()
My.Forms.Form1.Show()
El objeto My.Forms devuelve una colección de instancias predeterminadas para cada clase Form que existe en el
proyecto. Del mismo modo, My.WebServices proporciona una instancia predeterminada de la clase de proxy para
cada servicio Web al que se haya creado una referencia en la aplicación.
Vea también
My.Forms (objeto)
My.WebServices (objeto)
Cómo My depende del tipo de proyecto
Desarrollo rápido de aplicaciones con My.Resources y
My.Settings (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
El objeto My.Resources proporciona acceso a los recursos de la aplicación y permite recuperar dinámicamente los
recursos de la aplicación.
Recuperar recursos
Se puede recuperar una serie de recursos, como archivos de audio, iconos, imágenes y cadenas, a través del objeto
My.Resources . Por ejemplo, puede tener acceso a los archivos de recursos específicos de la referencia cultural de la
aplicación. En el ejemplo siguiente se establece el icono del formulario en el icono denominado Form1Icon
almacenado en el archivo de recursos de la aplicación.
Sub SetFormIcon()
Me.Icon = My.Resources.Form1Icon
End Sub
El objeto My.Resources expone solo recursos globales. No proporciona acceso a los archivos de recursos asociados
a los formularios. Debe tener acceso a los recursos de formulario desde el formulario.
De forma similar, el objeto My.Settings proporciona acceso a la configuración de la aplicación y le permite
almacenar y recuperar dinámicamente la configuración de propiedades y otra información de la aplicación. Para
obtener más información, vea My. Resources (objeto ) y My. Settings (objeto).
Vea también
My.Resources (objeto)
My.Settings (objeto)
Accessing Application Settings
Información general sobre el modelo de aplicaciones
de Visual Basic
25/11/2019 • 7 minutes to read • Edit Online
Visual Basic proporciona un modelo bien definido para controlar el comportamiento de las aplicaciones de
Windows Forms: el modelo de aplicación de Visual Basic. Este modelo incluye eventos para controlar el inicio y el
apagado de la aplicación, así como eventos para detectar excepciones no controladas. También proporciona
compatibilidad para desarrollar aplicaciones de instancia única. El modelo de aplicación es extensible, por lo que
los desarrolladores que necesitan más control pueden personalizar sus métodos reemplazables.
Disponibilidad
De forma predeterminada, el modelo de aplicación Visual Basic está disponible para los proyectos de Windows
Forms. Si configura la aplicación para que use un objeto de inicio diferente, o inicia el código de aplicación con un
Sub Main personalizado, ese objeto o clase puede necesitar proporcionar una implementación de la clase
WindowsFormsApplicationBase para utilizar el modelo de aplicación. Para obtener información sobre cómo
cambiar el objeto de inicio, vea Página de aplicación, diseñador de proyectos (Visual Basic).
Vea también
WindowsFormsApplicationBase
Startup
StartupNextInstance
UnhandledException
Shutdown
NetworkAvailabilityChanged
WindowsFormsApplicationBase
Extensión del modelo de la aplicación de Visual Basic
Cómo My depende del tipo de proyecto (Visual
Basic)
27/11/2019 • 5 minutes to read • Edit Online
My expone solo los objetos que requiere un tipo de proyecto determinado. Por ejemplo, el objeto My.Forms está
disponible en una aplicación Windows Forms, pero no está disponible en una aplicación de consola. En este tema
se describe qué objetos My están disponibles en diferentes tipos de proyectos.
En un proyecto de sitio web, My expone objetos que son relevantes para un desarrollador web (como los objetos
My.Request y My.Response ) mientras se suprimen objetos que no son relevantes (como el objeto My.Forms ). En la
imagen siguiente se muestra el modelo de objetos de My en un proyecto de sitio web:
Detalles del proyecto
En la tabla siguiente se muestra qué objetos My están habilitados de forma predeterminada para ocho tipos de
proyecto: aplicación para Windows, biblioteca de clases, aplicación de consola, biblioteca de controles de
Windows, biblioteca de controles Web, servicio de Windows, vacío y sitio Web.
Hay tres versiones del objeto My.Application , dos versiones del objeto My.Computer y dos versiones de My.User
objeto; los detalles sobre estas versiones se proporcionan en las notas a pie de la tabla.
B IB L IOT E
C A DE
A P L IC A C I C O N T RO L B IB L IOT E SERVIC IO
Ó N DE B IB L IOT E A P L IC A C I ES DE C A DE DE
MY W IN DO W C A DE Ó N DE W IN DO W C O N T RO L W IN DO W SIT IO
( O B JETO ) S C L A SES C O N SO L A S ES W EB S VA C ÍO W EB
Sí 1
My.Application Sí 2 Sí 3 Sí 2 No Sí 3 No No
My.Computer Sí 4 Sí 4 Sí 4 Sí 4 Sí 5 Sí 4 No Sí 5
My.Forms Sí No No Sí No No No No
My.Log No No No No No No No Sí
My.Request No No No No No No No Sí
My.Resources Sí Sí Sí Sí Sí Sí No No
My.Response No No No No No No No Sí
My.Settings Sí Sí Sí Sí Sí Sí No No
My.User Sí 6 Sí 6 Sí 6 Sí 6 Sí 7 Sí 6 No Sí 7
Sí
My.WebServices Sí Sí Sí Sí Sí No No
1 Windows Forms versión de My.Application . Deriva de la versión de la consola (vea la nota 3); agrega
compatibilidad para interactuar con las ventanas de la aplicación y proporciona el modelo de aplicación Visual
Basic.
versión de la biblioteca de My.Application . Proporciona la funcionalidad básica que necesita una aplicación:
proporciona miembros para escribir en el registro de la aplicación y obtener acceso a la información de la
aplicación.
3 versión de la consola de My.Application. Deriva de la versión de la biblioteca (vea la nota 2) y agrega miembros
adicionales para tener acceso a los argumentos de la línea de comandos de la aplicación e información de
implementación de ClickOnce.
4 versión de Windows de My.Computer . Deriva de la versión del servidor (vea la nota 5) y proporciona acceso a
objetos útiles en un equipo cliente, como el teclado, la pantalla y el mouse.
5 versión del servidor de My.Computer . Proporciona información básica sobre el equipo, como el nombre, el
acceso al reloj, etc.
6 versión de Windows de My.User . Este objeto está asociado a la identidad actual del subproceso.
7
7 versión Web de My.User . Este objeto está asociado a la identidad del usuario de la solicitud HTTP actual de la
aplicación.
Vea también
ApplicationBase
Computer
Log
User
Personalización de los objetos que están disponibles en My
Compilación condicional
-define (Visual Basic)
My.Forms (objeto)
My.Request (objeto)
My.Response (objeto)
My.WebServices (objeto)
Obtener acceso a datos en aplicaciones de Visual
Basic
23/10/2019 • 3 minutes to read • Edit Online
Visual Basic incluye varias características nuevas que ayudan en el desarrollo de aplicaciones que acceden a datos.
Los formularios enlazados a datos para aplicaciones Windows se crean arrastrando elementos desde la ventana
Orígenes de datos hasta el formulario. Se puede enlazar controles a datos arrastrando elementos desde la
ventana de orígenes de datos a los controles existentes.
Secciones relacionadas
Obtener acceso a los datos en Visual Studio
Proporciona vínculos a páginas que tratan sobre la incorporación de funcionalidad de acceso a datos a sus
aplicaciones.
Visual Studio Data Tools para .NET
Proporciona vínculos a páginas en las que se describe la creación de aplicaciones que funcionan con datos
mediante Visual Studio.
LINQ
Proporciona vínculos a temas en los que se describe cómo usar LINQ en Visual Basic.
LINQ to SQL
Proporciona información sobre LINQ to SQL. Incluye ejemplos de programación.
Herramientas LINQ to SQL en Visual Studio
Proporciona vínculos a temas sobre cómo crear un modelo de objetos LINQ to SQL en aplicaciones.
Trabajar con conjuntos de datos en aplicaciones de n capas
Proporciona vínculos a temas sobre cómo crear aplicaciones de datos de niveles múltiples.
Agregar nuevas conexiones
Proporciona vínculos a páginas sobre la conexión de la aplicación a datos con herramientas en tiempo de diseño y
objetos de conexión ADO.NET, mediante Visual Studio.
Herramientas de conjuntos de datos en Visual Studio
Proporciona vínculos a páginas que describen cómo cargar datos en los conjuntos de datos y cómo ejecutar
instrucciones SQL y procedimientos almacenados.
Enlazar controles a los datos en Visual Studio
Proporciona vínculos a páginas que explican cómo se muestran datos en Windows Forms mediante controles
enlazados a datos.
Editar datos en conjuntos de datos
Proporciona vínculos a páginas que describen cómo manipular los datos en las tablas de datos de un conjunto de
datos.
Validar los datos en conjuntos de datos
Proporciona vínculos a páginas que describen cómo agregar validación a un conjunto de datos durante los
cambios de columnas y filas.
Guardar los datos de nuevo en la base de datos
Proporciona vínculos a páginas que explican cómo enviar datos actualizados de una aplicación a la base de datos.
ADO.NET
Describe las clases ADO.NET que exponen servicios de acceso a datos al programador de .NET Framework.
Datos en las soluciones de Office
Contiene vínculos a páginas que explican el funcionamiento de los datos en las soluciones de Office, incluida
información sobre programación orientada a esquemas, almacenamiento de datos en memoria caché y acceso a
datos en el servidor.
Crear y utilizar componentes en Visual Basic
27/11/2019 • 5 minutes to read • Edit Online
Clases de componentes
El espacio de nombres System.ComponentModel proporciona clases que se usan para implementar el
comportamiento de los componentes y controles en tiempo de diseño y en tiempo de ejecución. Este espacio de
nombres incluye las clases bases y las interfaces para implementar atributos y convertidores de tipos, enlazarlos
con orígenes de datos y generar licencias para los componentes.
Las clases de componentes básicas son las siguientes:
Component. Una implementación base para la interfaz IComponent. Esta clase permite el uso compartido de
objetos entre aplicaciones.
MarshalByValueComponent. Una implementación base para la interfaz IComponent.
Container. La implementación base de la interfaz IContainer. Esta clase encapsula cero o más componentes.
Algunas de las clases usadas para la generación de licencias de componentes son las siguientes:
License. Clase base abstracta para todas las licencias. Las licencias se conceden a una instancia específica de
un componente.
LicenseManager. Proporciona propiedades y métodos para agregar una licencia a un componente y
administrar un LicenseProvider.
LicenseProvider. Clase base abstracta para implementar un proveedor de licencias.
LicenseProviderAttribute. Especifica la clase LicenseProvider que se va a usar con una clase.
Clases usadas habitualmente para describir y conservar componentes.
TypeDescriptor. Proporciona información sobre las características de un componente, como sus atributos,
propiedades y eventos.
EventDescriptor. Proporciona información sobre un evento.
PropertyDescriptor. Proporciona información sobre una propiedad.
Secciones relacionadas
Solución de problemas relacionados con la creación de controles y componentes
Se explica cómo solucionar problemas comunes.
Vea también
Cómo: Obtener acceso a las funciones en tiempo de diseño de formularios Windows Forms
Conceptos básicos de las aplicaciones de Windows
Forms (Visual Basic)
27/11/2019 • 13 minutes to read • Edit Online
Una parte importante de Visual Basic es la capacidad de crear Windows Forms aplicaciones que se ejecutan
localmente en los equipos de los usuarios. Puede usar Visual Studio para crear la aplicación y la interfaz de usuario
mediante Windows Forms. Una aplicación Windows Forms se basa en las clases del espacio de nombres
System.Windows.Forms.
PA RA C O N SULT E
Creación de una nueva aplicación de Windows Forms con Tutorial 1: crear un visor de imágenes
Visual Studio
PA RA C O N SULT E
Trabajar con orígenes de datos de ADO.NET Cómo: Ordenar y filtrar datos ADO.NET con el componente
BindingSource de Windows Forms
PA RA C O N SULT E
Implementar una aplicación con ClickOnce Cómo: Publicar una aplicación ClickOnce mediante el Asistente
para publicación
Más información sobre la seguridad de Windows Forms Información general sobre la seguridad en Windows Forms
Vea también
WindowsFormsApplicationBase
Información general sobre formularios Windows Forms
My.Forms (objeto)
Personalizar proyectos y ampliar My con Visual Basic
27/11/2019 • 2 minutes to read • Edit Online
Puede personalizar las plantillas de proyecto para proporcionar objetos de My adicionales. Esto facilita a otros
desarrolladores la búsqueda y el uso de los objetos.
En esta sección
Extender el espacio de nombres My en Visual Basic
Describe cómo agregar miembros personalizados y valores al espacio de nombres My en Visual Basic.
Empaquetado e implementación de extensiones de My personalizadas
Describe cómo publicar extensiones de espacio de nombres de My personalizado mediante el uso de plantillas
de Visual Studio.
Extensión del modelo de la aplicación de Visual Basic
Describe cómo especificar sus propias extensiones para el modelo de aplicación mediante la invalidación de
miembros de la clase WindowsFormsApplicationBase.
Personalización de los objetos que están disponibles en My
Describe cómo controlar qué objetos de My se habilitan estableciendo la constante de compilación condicional
de _del proyecto.
Secciones relacionadas
Desarrollo con la función My
Describe qué objetos My están disponibles de forma predeterminada en distintos tipos de proyecto.
Información general sobre el modelo de aplicaciones de Visual Basic
Describe el modelo de Visual Basic para controlar el comportamiento de las aplicaciones de Windows Forms.
Cómo My depende del tipo de proyecto
Describe qué objetos My están disponibles de forma predeterminada en distintos tipos de proyecto.
Compilación condicional
Describe cómo el compilador utiliza la compilación condicional para seleccionar secciones de código
determinadas para compilar y excluir otras secciones.
ApplicationBase
Describe el objeto de My que proporciona propiedades, métodos y eventos relacionados con la aplicación
actual.
Vea también
Desarrollo de aplicaciones con Visual Basic
Extender el espacio de nombres My en Visual Basic
27/11/2019 • 17 minutes to read • Edit Online
El espacio de nombres My de Visual Basic expone propiedades y métodos que le permiten aprovechar fácilmente
la eficacia de la .NET Framework. El espacio de nombres My simplifica los problemas comunes de programación,
lo que a menudo reduce una tarea difícil a una sola línea de código. Además, el espacio de nombres My es
totalmente extensible, por lo que puede personalizar el comportamiento de My y agregar nuevos servicios a su
jerarquía para adaptarse a las necesidades específicas de la aplicación. En este tema se explica cómo personalizar
los miembros existentes del espacio de nombres My y cómo agregar sus propias clases personalizadas al espacio
de nombres My .
My.User.CurrentPrincipal = CustomPrincipal
Namespace My
Return dnsAddressList
End Get
End Property
End Class
End Namespace
Dado que My es un espacio de nombres como cualquier otro espacio de nombres, puede agregarle propiedades
de nivel superior simplemente agregando un módulo y especificando un Namespace de My . Anote el módulo con
el atributo HideModuleName como se muestra en el ejemplo siguiente. El atributo HideModuleName garantiza que
IntelliSense no mostrará el nombre del módulo cuando muestre los miembros del espacio de nombres My .
Namespace My
<HideModuleName()>
Module MyCustomModule
End Module
End Namespace
Para agregar miembros al espacio de nombres My , agregue las propiedades según sea necesario al módulo. Para
cada propiedad agregada al espacio de nombres My , agregue un campo privado de tipo
ThreadSafeObjectProvider(Of T) , donde el tipo es el tipo devuelto por la propiedad personalizada. Este campo se
usa para crear instancias de objetos seguros para subprocesos que la propiedad devolverá llamando al método
GetInstance . Como resultado, cada subproceso que tiene acceso a la propiedad extendida recibe su propia
instancia del tipo devuelto. En el ejemplo siguiente se agrega una propiedad denominada SampleExtension que es
de tipo SampleExtension al espacio de nombres My :
Namespace My
<HideModuleName()>
Module MyCustomExtensions
Private _extension As New ThreadSafeObjectProvider(Of SampleExtension)
Friend ReadOnly Property SampleExtension() As SampleExtension
Get
Return _extension.GetInstance()
End Get
End Property
End Module
End Namespace
Namespace My
Partial Friend Class MyApplication
End Class
End Namespace
Puede agregar controladores de eventos para los objetos de My personalizados agregando controladores de
eventos personalizados a la clase MyApplication . Los eventos personalizados permiten agregar código que se
ejecutará cuando se agregue o se quite un controlador de eventos, o cuando se genere el evento. Tenga en cuenta
que el código de AddHandler para un evento personalizado solo se ejecuta si un usuario agrega el código para
controlar el evento. Por ejemplo, considere que el objeto SampleExtension de la sección anterior tiene un evento
Load para el que desea agregar un controlador de eventos personalizado. En el ejemplo de código siguiente se
muestra un controlador de eventos personalizado denominado SampleExtensionLoad que se invocará cuando se
produzca el evento de My.SampleExtension.Load . Cuando se agrega código para controlar el nuevo evento
My.SampleExtensionLoad , se ejecuta la parte AddHandler de este código de evento personalizado. El método
MyApplication_SampleExtensionLoad se incluye en el ejemplo de código para mostrar un ejemplo de un controlador
de eventos que controla el evento My.SampleExtensionLoad . Tenga en cuenta que el evento SampleExtensionLoad
estará disponible al seleccionar la opción mis eventos de aplicación en la lista desplegable de la izquierda
situada encima del editor de código cuando se edita el archivo ApplicationEvents. VB .
Namespace My
End Sub
End Class
End Namespace
Directrices de diseño
Al desarrollar extensiones para el espacio de nombres My , utilice las siguientes directrices para ayudar a
minimizar los costos de mantenimiento de los componentes de extensión:
Incluya solo la lógica de la extensión. La lógica incluida en la extensión de espacio de nombres My debe
incluir solo el código necesario para exponer la funcionalidad necesaria en el espacio de nombres My . Dado
que la extensión residirá en los proyectos de usuario como código fuente, la actualización del componente de
extensión incurrirá en un alto costo de mantenimiento y se debe evitar si es posible.
Minimizar suposiciones de proyecto. Al crear las extensiones del espacio de nombres My , no asuma un
conjunto de referencias, importaciones de nivel de proyecto o configuraciones de compilador específicas (por
ejemplo, Option Strict desactivada). En su lugar, minimice las dependencias y califique totalmente todas las
referencias de tipos mediante la palabra clave Global . Además, asegúrese de que la extensión se compila con
Option Strict activado para minimizar los errores de la extensión.
Aísle el código de la extensión. Al colocar el código en un único archivo, la extensión se podrá implementar
fácilmente como una plantilla de elemento de Visual Studio. Para obtener más información, vea "empaquetar e
implementar extensiones" más adelante en este tema. Colocar todos los My código de extensión de espacio de
nombres en un solo archivo o en una carpeta independiente de un proyecto también ayudará a los usuarios a
encontrar la extensión de espacio de nombres My .
Vea también
Empaquetado e implementación de extensiones de My personalizadas
Extensión del modelo de la aplicación de Visual Basic
Personalización de los objetos que están disponibles en My
Página Mis extensiones del Diseñador de proyectos
Página de aplicación, Diseñador de proyectos (Visual Basic)
Partial
Empaquetar e implementar extensiones My
personalizadas (Visual Basic)
27/11/2019 • 9 minutes to read • Edit Online
Visual Basic proporciona una manera fácil de implementar las extensiones de espacio de nombres de My
personalizadas mediante plantillas de Visual Studio. Si va a crear una plantilla de proyecto para la que las
extensiones de My son una parte integral del nuevo tipo de proyecto, puede incluir simplemente el código
personalizado de la extensión de My con el proyecto cuando exporte la plantilla. Para obtener más información
sobre cómo exportar plantillas de proyecto, vea Cómo: crear plantillas de proyecto.
Si la extensión de My personalizada se encuentra en un solo archivo de código, puede exportar el archivo como
una plantilla de elementos que los usuarios pueden agregar a cualquier tipo de proyecto de Visual Basic. A
continuación, puede personalizar la plantilla de elemento para habilitar funciones adicionales y el comportamiento
de la extensión de My personalizada en un proyecto de Visual Basic. Estas funcionalidades incluyen las siguientes:
Permitir a los usuarios administrar la extensión de My personalizada desde la página mis extensiones del
diseñador de proyectos de Visual Basic.
Agregar automáticamente la extensión de My personalizada cuando se agrega a un proyecto una
referencia a un ensamblado especificado.
Ocultar la plantilla de elemento de extensión My en el cuadro de diálogo Agregar elemento para que no
se incluya en la lista de elementos de proyecto.
En este tema se describe cómo empaquetar una extensión de My personalizada como una plantilla de elementos
oculta que se puede administrar desde la página mis extensiones del diseñador de proyectos de Visual Basic.
También se puede Agregar automáticamente la extensión de My personalizada cuando se agrega a un proyecto
una referencia a un ensamblado especificado.
NOTE
Si la extensión de espacio de nombres de My tiene una dependencia en un ensamblado determinado, puede personalizar la
plantilla de elemento para instalar automáticamente la extensión de espacio de nombres de My cuando se agrega una
referencia a ese ensamblado. Como resultado, querrá excluir esa referencia de ensamblado al exportar el archivo de código
como una plantilla de elementos de Visual Studio.
Personalizar la plantilla de elemento
Puede habilitar la administración de la plantilla de elementos desde la página mis extensiones del diseñador de
proyectos de Visual Basic. También puede habilitar la plantilla de elementos que se agregará automáticamente
cuando se agregue una referencia a un ensamblado especificado a un proyecto. Para habilitar estas
personalizaciones, agregará un nuevo archivo, denominado archivo CustomData, a la plantilla y, a continuación,
agregará un nuevo elemento al XML en el archivo. vstemplate.
Agregar el archivo CustomData
El archivo CustomData es un archivo de texto que tiene la extensión de nombre de archivo. CustomData (el
nombre de archivo se puede establecer en cualquier valor significativo para la plantilla) y que contiene XML. El
XML del archivo CustomData indica a Visual Basic que incluya su extensión de My cuando los usuarios usen la
página mis extensiones del diseñador de proyectos de Visual Basic. Opcionalmente, puede Agregar el <
AssemblyFullName> atributo al archivo CustomData XML. Esto indica a Visual Basic que instale automáticamente la
extensión de My personalizada cuando se agrega al proyecto una referencia a un ensamblado determinado.
Puede usar cualquier editor de texto o editor XML para crear el archivo CustomData y, a continuación, agregarlo a
la carpeta comprimida de la plantilla de elementos (archivo. zip).
Por ejemplo, el código XML siguiente muestra el contenido de un archivo CustomData que agregará el elemento
de plantilla a la carpeta My Extensions de un proyecto Visual Basic cuando se agregue al proyecto una referencia al
ensamblado Microsoft. VisualBasic. PowerPacks. vs. dll.
<VBMyExtensionTemplate
ID="Microsoft.VisualBasic.Samples.MyExtensions.MyPrinterInfo"
Version="1.0.0.0"
AssemblyFullName="Microsoft.VisualBasic.PowerPacks.vs"
/>
El archivo CustomData contiene un < VBMyExtensionTemplate> elemento que tiene los atributos que se muestran en
la tabla siguiente.
<CustomDataSignature>Microsoft.VisualBasic.MyExtension</CustomDataSignature>
Los archivos de una carpeta comprimida (archivo. zip) no se pueden modificar directamente. Debe copiar el
archivo. vstemplate de la carpeta comprimida, modificarlo y, a continuación, reemplazar el archivo. vstemplate de
la carpeta comprimida por la copia actualizada.
En el ejemplo siguiente se muestra el contenido de un archivo. vstemplate que tiene agregado el elemento
<CustomDataSignature> .
Instalación de la plantilla
Para instalar la plantilla, puede copiar la carpeta comprimida (archivo . zip ) en la carpeta de plantillas de
elementos de Visual Basic. De forma predeterminada, las plantillas de elemento de usuario se encuentran en
%userprofile%\Documents\Visual Studio <versión>\Templates\ItemTemplates\Visual Basic. Como alternativa,
puede publicar la plantilla como un archivo Instalador de Visual Studio ( . VSI).
Vea también
Extender el espacio de nombres My en Visual Basic
Extensión del modelo de la aplicación de Visual Basic
Personalización de los objetos que están disponibles en My
Página Mis extensiones del Diseñador de proyectos
Ampliar el modelo de la aplicación de Visual Basic
25/11/2019 • 10 minutes to read • Edit Online
La secuencia de inicio de la aplicación se cancela si esta función devuelve False . Esto puede ser útil si hay
circunstancias en las que la aplicación no se debe ejecutar.
El método OnInitialize llama a los métodos siguientes:
a. ShowSplashScreenOperador Determina si la aplicación tiene una pantalla de presentación definida y,
en caso de hacerlo, muestra la pantalla de presentación en un subproceso independiente.
El método ShowSplashScreen contiene el código que muestra la pantalla de presentación durante al
menos el número de milisegundos especificado por la propiedad
MinimumSplashScreenDisplayTime. Para usar esta funcionalidad, debe agregar la pantalla de
presentación a la aplicación mediante el Diseñador de proyectos (que establece la propiedad
My.Application.MinimumSplashScreenDisplayTime en dos segundos) o establecer la propiedad
My.Application.MinimumSplashScreenDisplayTime en un método que invalide el método OnInitialize o
OnCreateSplashScreen. Para obtener más información, vea MinimumSplashScreenDisplayTime.
b. OnCreateSplashScreenOperador Permite a un diseñador emitir código que inicializa la pantalla de
presentación.
De forma predeterminada, este método no hace nada. Si selecciona una pantalla de presentación
para la aplicación en el Diseñador de proyectos de Visual Basic, el diseñador invalida el método
OnCreateSplashScreen con un método que establece la propiedad SplashScreen en una nueva
instancia del formulario de pantalla de presentación.
2. OnStartupOperador Proporciona un punto de extensibilidad para generar el evento Startup . La secuencia
de inicio de la aplicación se detiene si esta función devuelve False .
De forma predeterminada, este método genera el evento Startup. Si el controlador de eventos establece la
propiedad Cancel del argumento de evento en True , el método devuelve False para cancelar el inicio de
la aplicación.
3. OnRunOperador Proporciona el punto de partida para cuando la aplicación principal está lista para
comenzar a ejecutarse, una vez finalizada la inicialización.
De forma predeterminada, antes de entrar en el Windows Forms bucle de mensajes, este método llama al
OnCreateMainForm (para crear el formulario principal de la aplicación) y HideSplashScreen (para cerrar la
pantalla de presentación):
a. OnCreateMainFormOperador Proporciona una forma para que un diseñador emita código que
inicializa el formulario principal.
De forma predeterminada, este método no hace nada. Sin embargo, cuando se selecciona un
formulario principal de la aplicación en el Diseñador de proyectos de Visual Basic, el diseñador
invalida el método OnCreateMainForm con un método que establece la propiedad MainForm en una
nueva instancia del formulario principal.
b. HideSplashScreenOperador Si la aplicación tiene una pantalla de presentación definida y está
abierta, este método cierra la pantalla de presentación.
De forma predeterminada, este método cierra la pantalla de presentación.
4. OnStartupNextInstanceOperador Proporciona una manera de personalizar el comportamiento de una
aplicación de una sola instancia cuando se inicia otra instancia de la aplicación.
De forma predeterminada, este método genera el evento StartupNextInstance.
5. OnShutdownOperador Proporciona un punto de extensibilidad para generar el evento Shutdown . Este
método no se ejecuta si se produce una excepción no controlada en la aplicación principal.
De forma predeterminada, este método genera el evento Shutdown.
6. OnUnhandledExceptionOperador Se ejecuta si se produce una excepción no controlada en cualquiera de los
métodos enumerados anteriormente.
De forma predeterminada, este método genera el evento UnhandledException siempre que no se adjunte
un depurador y la aplicación controle el evento de UnhandledException .
Si la aplicación es una aplicación de instancia única y la aplicación ya se está ejecutando, la instancia subsiguiente
de la aplicación llama al método OnStartupNextInstance en la instancia original de la aplicación y, a continuación,
se cierra.
El constructor OnStartupNextInstance(StartupNextInstanceEventArgs) llama a la propiedad
UseCompatibleTextRendering para determinar qué motor de representación de texto se va a utilizar para los
formularios de la aplicación. De forma predeterminada, la propiedad UseCompatibleTextRendering devuelve
False , que indica que se utilizará el motor de representación de texto GDI, que es el valor predeterminado en
Visual Basic 2005 y versiones posteriores. Puede invalidar la propiedad UseCompatibleTextRendering para
devolver True , que indica que se utilizará el motor de representación de texto GDI+, que es el valor
predeterminado en Visual Basic .NET 2002 y Visual Basic .NET 2003.
Configuración de la aplicación
Como parte del modelo de aplicación de Visual Basic, la clase WindowsFormsApplicationBase proporciona
propiedades protegidas que configuran la aplicación. Estas propiedades se deben establecer en el constructor de
la clase de implementación.
En un proyecto de Windows Forms predeterminado, el Diseñador de proyectos crea código para establecer las
propiedades con la configuración del diseñador. Las propiedades solo se usan cuando se inicia la aplicación; su
configuración después de que se inicie la aplicación no tiene ningún efecto.
C O N F IGURA C IÓ N EN EL PA N EL
A P L IC A C IÓ N DEL DISEÑ A DO R DE
P RO P IEDA D. DET ERM IN A P RO Y EC TO S
Vea también
ApplicationBase
Startup
StartupNextInstance
UnhandledException
Shutdown
NetworkAvailabilityChanged
Información general sobre el modelo de aplicaciones de Visual Basic
Página de aplicación, Diseñador de proyectos (Visual Basic)
Personalizar los objetos que están disponibles en My
(Visual Basic)
27/11/2019 • 5 minutes to read • Edit Online
En este tema se describe cómo puede controlar qué objetos de My se habilitan estableciendo la constante de
compilación condicional del proyecto _MYTYPE . El entorno de desarrollo integrado (IDE) de Visual Studio mantiene
el _MYTYPE constante de compilación condicional para un proyecto sincronizado con el tipo del proyecto.
/define:_MYTYPE=\"WindowsForms\"
En esta tabla se muestra cómo se establece la constante de compilación condicional de _MYTYPE para varios tipos
de proyecto.
T IP O DE P RO Y EC TO _VA LO R DE T IP O
Web Web
Vacío Vacía
NOTE
Todas las comparaciones de cadenas de compilación condicional distinguen mayúsculas de minúsculas, independientemente
de cómo se establezca la instrucción Option Compare .
_M YA P P L IC AT IO _M Y C O M P UT ERT _M Y W EB SERVIC E
_DE T IP O NT YPE YPE _ _M Y USERT Y P E S
Personal Sin definir Sin definir Sin definir Sin definir Sin definir
Vacía Sin definir Sin definir Sin definir Sin definir Sin definir
De forma predeterminada, las constantes de compilación condicional sin definir se resuelven en FALSE . Puede
especificar valores para las constantes no definidas al compilar el proyecto para invalidar el comportamiento
predeterminado.
NOTE
Cuando _MYTYPE se establece en "Custom", el proyecto contiene el espacio de nombres My , pero no contiene ningún
objeto. Sin embargo, si se establece _MYTYPE en "Empty", se impide que el compilador agregue el espacio de nombres My
y sus objetos.
En esta tabla se describen los efectos de los valores predefinidos de las constantes de compilación _MY .
C O N STA N T E SIGN IF IC A DO
Vea también
ApplicationBase
Computer
Log
User
Cómo My depende del tipo de proyecto
Compilación condicional
-define (Visual Basic)
My.Forms (objeto)
My.Request (objeto)
My.Response (objeto)
My.WebServices (objeto)
Conceptos de programación (Visual Basic)
08/01/2020 • 3 minutes to read • Edit Online
En esta sección se explican los conceptos de programación del lenguaje Visual Basic.
En esta sección
T IT L E DESC RIP C IÓ N
Programación asincrónica con Async y Await (Visual Basic) Describe cómo escribir soluciones asincrónicas mediante las
palabras clave Async y Await. Incluye un tutorial.
Información general sobre los atributos (Visual Basic) Describe cómo proporcionar información adicional sobre
elementos de programación como tipos, campos, métodos y
propiedades mediante el uso de atributos.
Información del llamador (Visual Basic) Describe cómo obtener información sobre el llamador de un
método. Esta información incluye la ruta de acceso al código
fuente y el número de línea de dicho código y el nombre de
miembro del llamador.
Covarianza y contravarianza (Visual Basic) Describe cómo habilitar la conversión implícita de parámetros
de tipo genérico en interfaces y delegados.
Árboles de expresión (Visual Basic) Explica cómo puede utilizar árboles de expresión para habilitar
la modificación dinámica de código ejecutable.
Iteradores (Visual Basic) Describe los iteradores, que se usan para recorrer colecciones
y devolver los elementos uno a uno.
Language-Integrated Query (LINQ) (Visual Basic) Describe las eficaces capacidades de consulta en la sintaxis del
lenguaje de Visual Basic y el modelo para consultar bases de
datos relacionales, documentos XML, conjuntos de datos y
colecciones en memoria.
Programación orientada a objetos (Visual Basic) Describe conceptos comunes orientados a objetos, incluidos la
encapsulación, la herencia y el polimorfismo.
Reflexión (Visual Basic) Se explica cómo usar la reflexión para crear dinámicamente
una instancia de un tipo, enlazar el tipo a un objeto existente
u obtener el tipo desde un objeto existente e invocar sus
métodos, o acceder a sus campos y propiedades.
Serialización (Visual Basic) Describe los conceptos clave de la serialización binaria, XML y
SOAP.
Secciones relacionadas
Ensamblados de .NET Describe cómo crear y utilizar ensamblados.
Sugerencias para mejorar el rendimiento Se describen varias reglas básicas que pueden ayudarle a
aumentar el rendimiento de la aplicación.
Programación asincrónica con Async y Await (Visual
Basic)
21/03/2020 • 31 minutes to read • Edit Online
Puede evitar cuellos de botella de rendimiento y mejorar la capacidad de respuesta total de la aplicación
mediante la programación asincrónica. Sin embargo, las técnicas tradicionales para escribir aplicaciones
asincrónicas pueden resultar complicadas, haciéndolas difícil de escribir, depurar y mantener.
Visual Studio 2012 introdujo un enfoque simplificado, la programación asincrónica, que aprovecha la
compatibilidad asincrónica de .NET Framework 4.5 y versiones posteriores, así como de Windows Runtime. El
compilador realiza el trabajo difícil que el desarrollador suele realizar y la aplicación conserva una estructura
lógica similar al código sincrónico. Como resultado, se obtienen todas las ventajas de la programación
asincrónica con una parte del trabajo.
Este tema proporciona información general sobre cuándo y cómo utilizar la programación asincrónica e incluye
vínculos que admiten temas con detalles y ejemplos.
La asincronía es especialmente valiosa para aquellas aplicaciones que obtienen acceso al subproceso de interfaz
de usuario, ya que todas las actividades relacionadas con la interfaz de usuario normalmente comparten un único
subproceso. Si se bloquea un proceso en una aplicación sincrónica, se bloquean todos. La aplicación deja de
responder y puede que se piense que se ha producido un error cuando en realidad la aplicación está esperando.
Cuando se usan métodos asincrónicos, la aplicación continúa respondiendo a la interfaz de usuario. Puede
cambiar el tamaño o minimizar una ventana, por ejemplo, o puede cerrar la aplicación si no desea esperar a que
finalice.
El enfoque basado en asincrónico agrega el equivalente de una transmisión automática a la lista de opciones
entre las que puede elegir al diseñar operaciones asincrónicas. Es decir, obtiene todas las ventajas de la
programación asincrónica tradicional pero con mucho menos trabajo de desarrollador.
End Using
End Function
Si AccessTheWebAsync no hay ningún trabajo que se pueda hacer entre llamar a GetStringAsync y esperar a su
finalización, se puede simplificar el código llamando y esperando en la siguiente instrucción única.
Las siguientes características resumen lo que hace que el ejemplo anterior sea un método asincrónico:
Method Signature incluye un modificador Async .
El nombre de un método asincrónico, por convención, finaliza con un sufijo “Async”.
El tipo de valor devuelto es uno de los tipos siguientes:
Task(Of TResult) si el método tiene una instrucción return en la que el operando tiene el tipo TResult.
Task si el método no tiene ninguna instrucción return ni tiene una instrucción return sin operando.
Sub si está escribiendo un controlador de eventos asincrónicos.
Para obtener más información, vea "Tipos de valor devuelto y parámetros" más adelante en este tema.
El método normalmente incluye al menos una expresión await, que marca un punto en el que el método
no puede continuar hasta que se completa la operación asincrónica en espera. Mientras tanto, se suspende
el método y el control vuelve al llamador del método. La sección siguiente de este tema muestra lo que
sucede en el punto de suspensión.
En métodos asincrónicos, se utilizan las palabras clave y los tipos proporcionados para indicar lo que se desea
hacer y el compilador realiza el resto, incluido el seguimiento de qué debe ocurrir cuando el control vuelve a un
punto de espera en un método suspendido. Algunos procesos de rutina, tales como bucles y control de
excepciones, pueden ser difíciles de controlar en código asincrónico tradicional. En un método asincrónico, se
pueden escribir estos elementos como se haría en una solución sincrónica y se resuelve este problema.
Para obtener más información sobre la asincronía en versiones anteriores de .NET Framework, vea TPL y la
programación asincrónica tradicional de .NET Framework.
NOTE
Si se completa GetStringAsync (y por consiguiente getStringTask ) antes de que AccessTheWebAsync lo
espere, permanece el control en AccessTheWebAsync . El gasto de suspensión y después regresar a
AccessTheWebAsync se desperdiciaría si el proceso denominado asincrónico ( getStringTask ) ya se ha
completado y AccessTheWebSync no tiene que esperar el resultado final.
Dentro del llamador (el controlador de eventos en este ejemplo), el patrón de procesamiento continúa. El
llamador puede hacer otro trabajo que no depende del resultado de AccessTheWebAsync antes de esperar
ese resultado, o es posible que el llamador se espere inmediatamente. El controlador de eventos está
esperando AccessTheWebAsync , y AccessTheWebAsync está esperando GetStringAsync .
7. GetStringAsync completa y genera un resultado de la cadena. La llamada a GetStringAsync no devuelve el
resultado de la cadena de la manera que cabría esperar. (Recuerde que el método ya devolvió una tarea en
el paso 3.) En su lugar, el resultado de cadena se almacena en la tarea que representa la finalización del
método, getStringTask . El operador await recupera el resultado de getStringTask . La instrucción de
asignación asigna el resultado recuperado a urlContents .
8. Cuando AccessTheWebAsync tiene el resultado de la cadena, el método puede calcular la longitud de la
cadena. El trabajo de AccessTheWebAsync también se completa y el controlador de eventos que espera se
puede reanudar. En el ejemplo completo del final de este tema, puede comprobar que el controlador de
eventos recupera e imprime el valor de resultado de longitud.
Si no está familiarizado con la programación asincrónica, reserve un minuto para ver la diferencia entre el
comportamiento sincrónico y asincrónico. Un método sincrónico devuelve cuando se completa su trabajo (paso
5), pero un método asincrónico devuelve un valor de tarea cuando se suspende el trabajo (pasos 3 y 6). Cuando el
método asincrónico completa finalmente el trabajo, se marca la tarea como completa y el resultado, si existe, se
almacena en la tarea.
Para obtener más información sobre el flujo de control, vea Control Flow in Async Programs (Visual Basic) (Flujo
de control en programas asincrónicos [Visual Basic]).
Hilos
La intención de los métodos Async es ser aplicaciones que no pueden producir bloqueos. Una expresión Await
en un método asincrónico no bloquea el subproceso actual mientras la tarea esperada se encuentra en ejecución.
En vez de ello, la expresión declara el resto del método como una continuación y devuelve el control al llamador
del método asincrónico.
Las palabras clave Async y Await no hacen que se creen subprocesos adicionales. Los métodos asincrónicos no
requieren multiproceso porque un método asincrónico no se ejecuta en su propio subproceso. El método se
ejecuta en el contexto de sincronización actual y ocupa tiempo en el subproceso únicamente cuando el método
está activo. Puede utilizar Task.Run para mover el trabajo enlazado a la CPU a un subproceso en segundo plano,
pero un subproceso en segundo plano no ayuda con un proceso que solo está esperando a que los resultados
estén disponibles.
El enfoque basado en asincrónico en la programación asincrónica es preferible a los enfoques existentes en casi
todos los casos. En particular, este enfoque BackgroundWorker es mejor que para las operaciones enlazadas a E/S
porque el código es más simple y no tiene que protegerse contra las condiciones de carrera. Junto con Task.Run,
la programación asincrónica es mejor que BackgroundWorker para las operaciones enlazadas a la CPU porque la
programación asincrónica separa los detalles de coordinación en la ejecución del código del trabajo que
Task.Run transfiere al grupo de subprocesos.
Async y Await
Si especifica que un método es un método asincrónico mediante un modificador Async, habilite las dos
capacidades siguientes.
El método asincrónico marcado puede usar Await para designar puntos de suspensión. El operador await
indica al compilador que el método asincrónico no puede continuar pasado ese punto hasta que se
complete el proceso asincrónico aguardado. Mientras tanto, el control devuelve al llamador del método
asincrónico.
La suspensión de un método asincrónico en una expresión Await no constituye una salida del método y
los bloques Finally no se ejecutan.
El método asincrónico marcado sí se puede esperar por los métodos que lo llaman.
Un método asincrónico normalmente contiene una o más apariciones de un operador Await , pero la ausencia de
expresiones Await no causa errores de compilación. Si un método asincrónico no usa un operador Await para
marcar el punto de suspensión, se ejecuta como un método sincrónico, a pesar del modificador Async . El
compilador detecta una advertencia para dichos métodos.
Async y Await son palabras clave contextuales. Para obtener más información y ejemplos, vea los siguientes
temas:
Async
Await Operador
' . . .
' The method has no return statement.
End Function
Cada tarea devuelta representa el trabajo en curso. Una tarea encapsula la información sobre el estado del
proceso asincrónico y, finalmente, el resultado final del proceso o la excepción que el proceso provoca si no tiene
éxito.
Un método asincrónico también puede ser un método Sub . Este tipo de valor devuelto se utiliza principalmente
para definir controladores de eventos, donde se requiere un tipo de valor devuelto. Los controladores de eventos
asincrónicos sirven a menudo como punto de partida para programas asincrónicos.
Un método asincrónico Sub que es un procedimiento no se puede esperar y el llamador no puede detectar
ninguna excepción que produce el método.
Un método aisncrónico no puede declarar ningún parámetro ByRef, pero el método puede llamar a los métodos
que tienen estos parámetros.
Para más información y ejemplos, vea Async Return Types (Visual Basic) (Tipos de valor devuelto asincrónicos
[Visual Basic]). Para más información sobre cómo capturar excepciones en métodos asincrónicos, vea Instrucción
Try...Catch...Finally.
Las API asincrónicas en la programación de Windows Runtime tienen uno de los siguientes tipos de valor
devuelto, que son similares a las tareas:
IAsyncOperation(Of TResult), que corresponde a Task(Of TResult)
IAsyncAction, lo que equivale a Task
IAsyncActionWithProgress(Of TProgress)
IAsyncOperationWithProgress(Of TResult, TProgress)
Para obtener más información y un ejemplo, vea Llamar a API asincrónicas en C o Visual Basic.
Convención de nomenclatura
Por convención, se anexa "Async" a los nombres de métodos que tengan un modificador Async .
Puede ignorar esta convención cuando un evento, clase base o contrato de interfaz sugieren un nombre diferente.
Por ejemplo, no se debería cambiar el nombre de los controladores de eventos, tales como Button1_Click .
Tutorial: Acceso a web usando Async y Muestra cómo convertir una solución Async Sample: Accessing the Web
Await (C# y Visual Basic) WPF sincrónica en una solución WPF Walkthrough (Ejemplo Async: obtener
asincrónica. La aplicación descarga una acceso al tutorial web)
serie de sitios web.
How to: Make Multiple Web Requests Demuestra cómo comenzar varias Async Sample: Make Multiple Web
in Parallel by Using Async and Await tareas al mismo tiempo. Requests in Parallel (Ejemplo Async:
(Visual Basic) (Realización de solicitudes realización de varias solicitudes web en
web en paralelo mediante Async y paralelo)
Await [Visual Basic])
Async Return Types (Visual Basic) (Tipos Muestra los tipos que los métodos
de valor devuelto de Async [Visual asincrónicos pueden devolver y explica
Basic]) cuándo es apropiado cada uno de ellos.
Control Flow in Async Programs (Visual Rastrea en detalle el flujo de control a Async Sample: Control Flow in Async
Basic) (Flujo de control en programas través de una sucesión de expresiones Programs (Ejemplo Async: flujo de
asincrónicos [Visual Basic]) await en un programa asincrónico. control en programas asincrónicos)
T ÍT ULO DESC RIP C IÓ N M UEST RA
Fine-Tuning Your Async Application Muestra cómo agregar la siguiente Async Sample: Fine Tuning Your
(Visual Basic) (Ajuste de una aplicación funcionalidad a la solución asincrónica: Application (Ejemplo asincrónico: ajuste
asincrónica [Visual Basic]) de la aplicación)
- Cancel an Async Task or a List of Tasks
(Visual Basic) (Cancelación de una tarea
asincrónica o de una lista de tareas
[Visual Basic])
- Cancel Async Tasks after a Period of
Time (Visual Basic) (Cancelación de
tareas asincrónicas tras un período de
tiempo [Visual Basic])
- Cancel Remaining Async Tasks after
One Is Complete (Visual Basic)
(Cancelación de tareas asincrónicas
restantes [Visual Basic])
- Start Multiple Async Tasks and
Process Them As They Complete
(Visual Basic) (Inicio de varias tareas
asincrónicas y cómo procesarlas a
medida que se completan [Visual
Basic])
WhenAny: Bridging between the .NET Muestra cómo unir entre tipos de Async Sample: Bridging between .NET
Framework and the Windows Runtime tareas en .NET Framework e and Windows Runtime (AsTask and
(WhenAny: Puente entre .NET IAsyncOperations en Windows Runtime WhenAny) (Ejemplo Async: puente
Framework y Windows Runtime) para poder usar WhenAny con un entre .NET y Windows Runtime [AsTask
método de Windows Runtime. y WhenAny])
Cancelación asincrónica: Puente entre Muestra cómo unir entre tipos de Async Sample: Bridging between .NET
.NET Framework y Windows Runtime tareas en .NET Framework e and Windows Runtime (AsTask &
IAsyncOperations en Windows Runtime Cancellation) (Ejemplo Async: puente
para poder usar entre .NET y Windows Runtime [AsTask
CancellationTokenSource con un & Cancellation])
método de Windows Runtime.
Ejemplo completo
El código siguiente es el archivo MainWindow.xaml.vb de la aplicación de Windows Presentation Foundation
(WPF) que se explica en este tema. Puede descargar el ejemplo de Async Sample: Example from "Asynchronous
Programming with Async and Await" (Ejemplo de Async: ejemplo de "programación asincrónica con Async y
Await").
Imports System.Net.Http
' Example that demonstrates Asynchronous Progamming with Async and Await.
' It uses HttpClient.GetStringAsync to download the contents of a website.
' Sample Output:
' Working . . . . . . .
'
' Length of the downloaded string: 39678.
Class MainWindow
' Mark the event handler with Async so you can use Await in it.
Private Async Sub StartButton_Click(sender As Object, e As RoutedEventArgs)
End Sub
' You can do other work here that doesn't rely on the string from GetStringAsync.
DoIndependentWork()
End Using
End Function
Sub DoIndependentWork()
ResultsTextBox.Text &= $"Working . . . . . . .{vbCrLf}"
End Sub
End Class
Consulte también
Await Operador
Async
Información general sobre los atributos (Visual Basic)
27/11/2019 • 8 minutes to read • Edit Online
Los atributos proporcionan un método eficaz para asociar metadatos, o información declarativa, con código
(ensamblados, tipos, métodos, propiedades, etc.). Después de asociar un atributo con una entidad de programa,
se puede consultar el atributo en tiempo de ejecución mediante la utilización de una técnica denominada
reflexión. Para más información, vea Reflexión (Visual Basic).
Los atributos tienen las propiedades siguientes:
Los atributos agregan metadatos al programa. Los metadatos son información sobre los tipos definidos
en un programa. Todos los ensamblados .NET contienen un conjunto de metadatos específico que describe
los tipos y miembros de tipo definidos en el ensamblado. Puede agregar atributos personalizados para
especificar cualquier información adicional que sea necesaria. Para más información, vea Creating Custom
Attributes (Visual Basic) (Creación de atributos personalizados [Visual Basic]).
Puede aplicar uno o más atributos a todos los ensamblados, módulos o elementos de programa más
pequeños como clases y propiedades.
Los atributos pueden aceptar argumentos de la misma manera que los métodos y las propiedades.
El programa puede examinar sus propios metadatos o los metadatos de otros programas mediante la
reflexión. Para más información, vea Accessing Attributes by Using Reflection (Visual Basic) (Acceso a
atributos mediante reflexión [Visual Basic]).
Utilizar atributos
Los atributos se pueden colocar en la mayoría de las declaraciones, aunque un determinado atributo podría
restringir los tipos de declaraciones en que es válido. En Visual Basic, un atributo se encierra entre corchetes
angulares (< >). Debe aparecer inmediatamente antes del elemento al que se aplica, en la misma línea.
En este ejemplo, el atributo SerializableAttribute se usa para aplicar una característica específica a una clase:
Imports System.Runtime.InteropServices
<System.Runtime.InteropServices.DllImport("user32.dll")>
Sub SampleMethod()
End Sub
Imports System.Runtime.InteropServices
Sub MethodA(<[In](), Out()> ByVal x As Double)
End Sub
Sub MethodB(<Out(), [In]()> ByVal x As Double)
End Sub
Algunos atributos se pueden especificar más de una vez para una entidad determinada. Un ejemplo de este tipo
de atributos multiuso es ConditionalAttribute:
<Conditional("DEBUG"), Conditional("TEST1")>
Sub TraceMethod()
End Sub
NOTE
Por convención, todos los nombres de atributos terminan con la palabra "Attribute" para distinguirlos de otros elementos
de .NET Framework. Sin embargo, no es necesario especificar el sufijo de atributo cuando utiliza atributos en el código. Por
ejemplo, [DllImport] es equivalente a [DllImportAttribute] , pero DllImportAttribute es el nombre del atributo
real en .NET Framework.
Parámetros de atributo
Muchos atributos tienen parámetros, que pueden ser posicionales, sin nombre o con nombre. Los parámetros
posicionales deben especificarse en un determinado orden y no se pueden omitir; los parámetros con nombre
son opcionales y se pueden especificar en cualquier orden. Los parámetros posicionales se especifican en primer
lugar. Por ejemplo, estos tres atributos son equivalentes:
<DllImport("user32.dll")>
<DllImport("user32.dll", SetLastError:=False, ExactSpelling:=False)>
<DllImport("user32.dll", ExactSpelling:=False, SetLastError:=False)>
El primer parámetro, el nombre del archivo DLL, es posicional y siempre va primero; los demás tienen un
nombre. En este caso, ambos parámetros con nombre tienen el estado false de forma predeterminada, por lo que
se pueden omitir. Consulte la documentación del atributo individual para obtener información sobre los valores
de parámetro predeterminados.
Destinos de atributo
El destino de un atributo es la entidad a la que se aplica el atributo. Por ejemplo, puede aplicar un atributo a una
clase, un método determinado o un ensamblado completo. De forma predeterminada, el atributo se aplica al
elemento que lo precede. Pero puede identificar explícitamente, por ejemplo, si se aplica un atributo a un método,
a su parámetro o a su valor devuelto.
Para identificar un destino de atributo de forma explícita, use la sintaxis siguiente:
<target : attribute-list>
En el ejemplo siguiente se muestra cómo aplicar atributos a ensamblados y módulos. Para más información, vea
Atributos comunes (Visual Basic).
Imports System.Reflection
<Assembly: AssemblyTitleAttribute("Production assembly 4"),
Module: CLSCompliant(True)>
Secciones relacionadas
Para obtener más información, vea:
Creating Custom Attributes (Visual Basic) (Creación de atributos personalizados [Visual Basic])
Accessing Attributes by Using Reflection (Visual Basic) (Acceso a atributos mediante reflexión [Visual
Basic])
How to: Create a C/C++ Union by Using Attributes (Visual Basic) (Creación de uniones de C/C++
mediante la utilización de atributos [Visual Basic])
Common Attributes (Visual Basic) (Atributos comunes [Visual Basic])
Información del llamador (Visual Basic)
Vea también
Guía de programación en Visual Basic
Reflexión (Visual Basic)
Atributos
Información del autor de la llamada (Visual Basic)
27/11/2019 • 5 minutes to read • Edit Online
Mediante los atributos de información del llamador, se puede obtener información sobre el llamador de un
método. Puede obtener la ruta de acceso al código fuente, el número de línea en el código fuente y el nombre de
miembro del llamador. Esta información resulta útil para el seguimiento y la depuración, así como para crear
herramientas de diagnóstico.
Para obtener esta información, se usan los atributos que se aplican a los parámetros opcionales, que tienen valores
predeterminados. En la tabla siguiente se enumeran los atributos de información del llamador que se definen en el
espacio de nombres System.Runtime.CompilerServices:
Ejemplo
En el ejemplo siguiente se muestra cómo utilizar atributos de información del llamador. En cada llamada al método
TraceMessage , la información del llamador se sustituye como argumentos para los parámetros opcionales.
Método, propiedad o evento Nombre del método, propiedad o evento en el que se originó
la llamada.
Conversiones u operadores definidos por el usuario Nombre generado para el miembro, por ejemplo,
"op_Addition".
Ningún miembro contenedor (por ejemplo, nivel de El valor predeterminado del parámetro opcional.
ensamblado o atributos que se aplican a tipos)
Vea también
Atributos (Visual Basic)
Common Attributes (Visual Basic) (Atributos comunes [Visual Basic])
Parámetros opcionales
Programming Concepts (Visual Basic) (Conceptos de programación (Visual Basic))
Colecciones (Visual Basic)
21/03/2020 • 23 minutes to read • Edit Online
Para muchas aplicaciones, puede que desee crear y administrar grupos de objetos relacionados. Existen dos
formas de agrupar objetos: mediante la creación de matrices de objetos y con la creación de colecciones de
objetos.
Las matrices son muy útiles para crear y trabajar con un número fijo de objetos fuertemente tipados. Para obtener
información sobre las matrices, vea Matrices.
Las colecciones proporcionan una manera más flexible de trabajar con grupos de objetos. A diferencia de las
matrices, el grupo de objetos con el que trabaja puede aumentar y reducirse de manera dinámica a medida que
cambian las necesidades de la aplicación. Para algunas colecciones, puede asignar una clave a cualquier objeto que
incluya en la colección para, de este modo, recuperar rápidamente el objeto con la clave.
Una colección es una clase, por lo que debe declarar una instancia de la clase para poder agregar elementos a
dicha colección.
Si la colección contiene elementos de un solo tipo de datos, puede usar una de las clases del espacio de nombres
System.Collections.Generic. Una colección genérica cumple la seguridad de tipos para que ningún otro tipo de
datos se pueda agregar a ella. Cuando recupera un elemento de una colección genérica, no tiene que determinar
su tipo de datos ni convertirlo.
NOTE
Para los ejemplos de este tema, System.Collections.Generic incluya System.Linq instrucciones Imports para los
espacios de nombres y.
Si el contenido de una colección se conoce de antemano, puede usar un inicializador de colección para inicializar la
colección. Para obtener más información, vea Inicializadores de colección.
El ejemplo siguiente es el mismo que el ejemplo anterior, excepto que se usa un inicializador de colección para
agregar elementos a la colección.
Puede utilizar un For... Instrucción Next For Each en lugar de una instrucción para recorrer en iteración una
colección. Esto se consigue con el acceso a los elementos de la colección mediante la posición de índice. El índice
de los elementos comienza en 0 y termina en el número de elementos menos 1.
El ejemplo siguiente recorre en iteración los elementos de una colección mediante For…Next en lugar de
For Each .
El ejemplo siguiente quita elementos de una lista genérica. En lugar For Each de una declaración, un For... Se
utiliza la siguiente instrucción que itera en orden descendente. Esto es porque el método RemoveAt hace que los
elementos después de un elemento quitado tengan un valor de índice inferior.
Dim numbers As New List(Of Integer) From
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
Para el tipo de elementos de List<T>, también puede definir su propia clase. En el ejemplo siguiente, la clase
Galaxy que usa List<T> se define en el código.
' Output:
' Tadpole 400
' Pinwheel 25
' Milky Way 0
' Andromeda 3
End Sub
Tipos de colecciones
.NET Framework proporciona muchas colecciones comunes. Cada tipo de colección está diseñado para un fin
específico.
En esta sección se describen algunas de las clases de colecciones comunes:
Clases System.Collections.Generic
Clases System.Collections.Concurrent
Clases System.Collections
Clase Collection de Visual Basic
Clases System.Collections.Generic
Puede crear una colección genérica mediante una de las clases del espacio de nombres
System.Collections.Generic. Una colección genérica es útil cuando todos los elementos de la colección tienen el
mismo tipo. Una colección genérica exige el establecimiento de fuertes tipos al permitir agregar solo los tipos de
datos deseados.
En la tabla siguiente se enumeran algunas de las clases usadas con frecuencia del espacio de nombres
System.Collections.Generic:
C L A SE DESC RIP C IÓ N
List<T> Representa una lista de objetos a los que puede tener acceso
el índice. Proporciona métodos para buscar, ordenar y
modificar listas.
Para obtener más información, vea Tipos de colección utilizados normalmente, Seleccionar una clase de colección
y System.Collections.Generic.
Clases System.Collections.Concurrent
En .NET Framework 4 o posterior, las colecciones del espacio de nombres System.Collections.Concurrent
proporcionan operaciones eficaces y seguras para subprocesos con el fin de obtener acceso a los elementos de la
colección desde varios subprocesos.
Las clases del espacio de nombres System.Collections.Concurrent deben usarse en lugar de los tipos
correspondientes de los espacios de nombres System.Collections.Generic y System.Collections cada vez que varios
subprocesos tengan acceso de manera simultánea a la colección. Para obtener más información, vea Colecciones
seguras para subprocesos y System.Collections.Concurrent.
Algunas clases incluidas en el espacio de nombres System.Collections.Concurrent son BlockingCollection<T>,
ConcurrentDictionary<TKey,TValue>, ConcurrentQueue<T> y ConcurrentStack<T>.
Clases System.Collections
Las clases del espacio de nombres System.Collections no almacenan los elementos como objetos de tipo
específico, sino como objetos del tipo Object .
Siempre que sea posible, debe usar las colecciones genéricas del espacio de nombres System.Collections.Generic o
del espacio de nombres System.Collections.Concurrent en lugar de los tipos heredados del espacio de nombres
System.Collections .
En la siguiente tabla se enumeran algunas de las clases usadas con frecuencia en el espacio de nombres
System.Collections :
C L A SE DESC RIP C IÓ N
Return elements
End Function
theElement.Symbol = symbol
theElement.Name = name
theElement.AtomicNumber = atomicNumber
elements.Add(Key:=theElement.Symbol, value:=theElement)
End Sub
Para usar un inicializador de colección para compilar la colección Dictionary , puede reemplazar los métodos
BuildDictionary y AddToDictionary por el método siguiente.
En el ejemplo siguiente se usa el método ContainsKey y la propiedad Item[TKey] de Dictionary para encontrar
rápidamente un elemento por clave. La Item propiedad permite tener acceso elements a un elements(symbol)
elemento de la colección mediante el código de Visual Basic.
Private Sub FindInDictionary(ByVal symbol As String)
Dim elements As Dictionary(Of String, Element) = BuildDictionary()
En el ejemplo siguiente se usa en su lugar el método TryGetValue para encontrar rápidamente un elemento por
clave.
' Output:
' Calcium 20
' Potassium 19
' Scandium 21
End Sub
' Output:
' blue 50 car4
' blue 30 car5
' blue 20 car1
' green 50 car7
' green 10 car3
' red 60 car6
' red 50 car2
End Sub
Return compare
End Function
End Class
Consulte también
Inicializadores de colección
Conceptos de programación (Visual Basic)
Option Strict (instrucción)
LINQ to Objects (Visual Basic)
Parallel LINQ (PLINQ)
Colecciones y Estructuras de Datos
Seleccionar una clase de colección
Comparaciones y ordenaciones en colecciones
Cuándo usar colecciones genéricas
Covarianza y contravarianza (Visual Basic)
27/11/2019 • 5 minutes to read • Edit Online
' Covariance.
Dim strings As IEnumerable(Of String) = New List(Of String)()
' An object that is instantiated with a more derived type argument
' is assigned to an object instantiated with a less derived type argument.
' Assignment compatibility is preserved.
Dim objects As IEnumerable(Of Object) = strings
' Contravariance.
' Assume that there is the following method in the class:
' Shared Sub SetObject(ByVal o As Object)
' End Sub
Dim actObject As Action(Of Object) = AddressOf SetObject
La covarianza de matrices permite la conversión implícita de una matriz de un tipo más derivado a una matriz de
un tipo menos derivado. Pero esta operación no es segura, tal como se muestra en el ejemplo de código siguiente.
La compatibilidad de la covarianza y la contravarianza con grupos de métodos permite hacer coincidir firmas de
método con tipos de delegado. Esto le permite asignar a los delegados no solo métodos con firmas coincidentes,
sino métodos que devuelven tipos más derivados (covarianza) o que aceptan parámetros con tipos menos
derivados (contravarianza) que el especificado por el tipo de delegado. Para obtener más información, vea
Variance in Delegates (Visual Basic) (Varianza en delegados (Visual Basic)) y Using Variance in Delegates (Visual
Basic) (Usar varianza en delegados (Visual Basic)).
En el ejemplo de código siguiente, se muestra la compatibilidad de covarianza y contravarianza con grupos de
métodos.
Shared Function GetObject() As Object
Return Nothing
End Function
End Sub
En .NET Framework 4 o posterior, Visual Basic admite la covarianza y la contravarianza en interfaces y delegados
genéricos y permite la conversión implícita de parámetros de tipo genérico. Para obtener más información, vea
Variance in Generic Interfaces (Visual Basic) (Varianza en interfaces genéricas (Visual Basic)) y Variance in
Delegates (Visual Basic) (Varianza en delegados (Visual Basic)).
En el ejemplo de código siguiente, se muestra la conversión implícita de referencias para interfaces genéricas.
Un delegado o interfaz genéricos se denominan variante si sus parámetros genéricos se declaran como
covariantes o contravariantes. Visual Basic le permite crear sus propias interfaces y delegados variantes. Para
obtener más información, vea Creating Variant Generic Interfaces (Visual Basic) (Crear interfaces genéricas
variantes (Visual Basic)) y Variance in Delegates (Visual Basic) (Varianza en delegados (Visual Basic)).
Temas relacionados
T ÍT ULO DESC RIP C IÓ N
Varianza en interfaces genéricas (Visual Basic) Describe la covarianza y contravarianza en las interfaces
genéricas y proporciona una lista de interfaces genéricas
variantes en .NET Framework.
Crear interfaces genéricas variantes (Visual Basic) Se muestra cómo crear interfaces variantes personalizadas.
Usar la varianza en interfaces para las colecciones genéricas Se muestra cómo la compatibilidad de covarianza y
(Visual Basic) contravarianza en las interfaces IEnumerable<T> y
IComparable<T> puede ayudarle a volver a usar el código.
Usar varianza en delegados (Visual Basic) Se muestra cómo usar la compatibilidad de covarianza y
contravarianza en los delegados no genéricos para que
coincidan las firmas de método con los tipos de delegado.
Usar la varianza para los delegados genéricos Func y Action Se muestra cómo la compatibilidad de covarianza y
(Visual Basic) contravarianza en los delegados Func y Action puede
ayudarle a volver a usar el código.
Árboles de expresión (Visual Basic)
21/03/2020 • 8 minutes to read • Edit Online
Los árboles de expresión representan el código en una estructura de datos en forma de árbol donde cada nodo es
una expresión, por ejemplo, una llamada a método o una operación binaria como x < y .
El código representado en árboles de expresión se puede compilar y ejecutar. Esto permite realizar cambios
dinámicos en el código ejecutable, ejecutar consultas LINQ en varias bases de datos y crear consultas dinámicas.
Para obtener más información sobre los árboles de expresión en LINQ, consulte How to: Use Expression Trees to
Build Dynamic Queries (Visual Basic) (Usar árboles de expresión para generar consultas dinámicas en Visual Basic).
Los árboles de expresión también se usan en Dynamic Language Runtime (DLR) para proporcionar
interoperabilidad entre los lenguajes dinámicos y .NET Framework y, asimismo, para permitir que los
programadores de compiladores emitan árboles de expresión en lugar de Lenguaje intermedio de Microsoft
(MSIL). Para obtener más información sobre el entorno DLR, vea Información general acerca de Dynamic Language
Runtime.
Puede hacer que el compilador de Visual Basic o de C# cree un árbol de expresión en función de una expresión
lambda anónima, o bien puede crear árboles de expresión manualmente usando el espacio de nombres
System.Linq.Expressions.
' Manually build the expression tree for the lambda expression num => num < 5.
Dim numParam As ParameterExpression = Expression.Parameter(GetType(Integer), "num")
Dim five As ConstantExpression = Expression.Constant(5, GetType(Integer))
Dim numLessThanFive As BinaryExpression = Expression.LessThan(numParam, five)
Dim lambda1 As Expression(Of Func(Of Integer, Boolean)) =
Expression.Lambda(Of Func(Of Integer, Boolean))(
numLessThanFive,
New ParameterExpression() {numParam})
En .NET Framework 4 y versiones posteriores, la API de árboles de expresión admite también asignaciones y
expresiones de flujo de control como bucles, bloques condicionales y bloques try-catch . Con la API, se pueden
crear árboles de expresión más complejos que los que pueden crear el compilador de Visual Basic a partir de
expresiones lambda. En el siguiente ejemplo se indica cómo crear un árbol de expresión que calcula el factorial de
un número.
Console.WriteLine(factorial)
' Prints 120.
Para obtener más información, consulte Generating Dynamic Methods with Expression Trees in Visual Studio 2010
(Generar métodos dinámicos con árboles de expresión en Visual Studio 2010), que también se aplica a las últimas
versiones de Visual Studio.
' Invoking the delegate and writing the result to the console.
Console.WriteLine(result(4))
Para obtener más información, consulte How to: Execute Expression Trees (Visual Basic) (Cómo ejecutar árboles de
expresión en Visual Basic).
Consulte también
System.Linq.Expressions
How to: Execute Expression Trees (Visual Basic) (Cómo ejecutar árboles de expresión en Visual Basic)
How to: Modify Expression Trees (Visual Basic) (Cómo modificar árboles de expresión en Visual Basic)
Expresiones Lambda
Descripción general del tiempo de ejecución del lenguaje dinámico
Conceptos de programación (Visual Basic)
Iteradores (Visual Basic)
27/02/2020 • 16 minutes to read • Edit Online
Sub Main()
For Each number As Integer In SomeNumbers()
Console.Write(number & " ")
Next
' Output: 3 5 8
Console.ReadKey()
End Sub
El tipo de valor devuelto de un método de iterador o descriptor de acceso get puede ser IEnumerable,
IEnumerable<T>, IEnumerator o IEnumerator<T>.
Puede usar una instrucción Exit Function o Return para finalizar la iteración.
Una Visual Basic función de iterador o get declaración de descriptor de acceso incluye un modificador de
iterador .
Los iteradores se introdujeron en Visual Basic en Visual Studio 2012.
En este tema
Iterador simple
Crear una clase de colección
Bloques try
Métodos anónimos
Uso de iteradores con una lista genérica
Información sobre la sintaxis
Implementación técnica
Uso de iteradores
NOTE
En todos los ejemplos del tema excepto en el ejemplo de iterador simple, incluya instrucciones Imports para los espacios
de nombres System.Collections y System.Collections.Generic .
Iterador simple
El ejemplo siguiente tiene una única instrucción Yield que está dentro de un ... Siguiente bucle. En Main , cada
iteración del cuerpo de la instrucción For Each crea una llamada a la función de iterador, que continúa a la
instrucción Yield siguiente.
Sub Main()
For Each number As Integer In EvenSequence(5, 18)
Console.Write(number & " ")
Next
' Output: 6 8 10 12 14 16 18
Console.ReadKey()
End Sub
Public days =
New String() {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"}
En el ejemplo siguiente se crea una clase Zoo que contiene una colección de animales.
La instrucción For Eachque hace referencia a la instancia de clase ( theZoo ) llama implícitamente al método
GetEnumerator . Las instrucciones For Each que hacen referencia a las propiedades Birds y Mammals usan el
método iterador con el nombre AnimalsForType .
Sub Main()
Dim theZoo As New Zoo()
theZoo.AddMammal("Whale")
theZoo.AddMammal("Rhinoceros")
theZoo.AddBird("Penguin")
theZoo.AddBird("Warbler")
Console.ReadKey()
End Sub
Bloques try
Visual Basic permite una instrucción de Yield en el bloque Try de una instrucción try... Detectar... Finally. Un
bloque Try que tiene una instrucción Yield puede tener bloques Catch y puede tener un bloque Finally .
En el ejemplo siguiente se incluyen los bloques Try , Catch y Finally en una función de iterador. El bloque
Finally de la función de iterador se ejecuta antes de que finalice la iteración de For Each .
Sub Main()
For Each number As Integer In Test()
Console.WriteLine(number)
Next
Console.WriteLine("For Each is done.")
' Output:
' 3
' 4
' Something happened. Yields are done.
' Finally is called.
' For Each is done.
Console.ReadKey()
End Sub
Una instrucción Yield no puede estar dentro de un bloque de Catch o un bloque Finally .
Si el cuerpo de For Each (en lugar del método de iterador) produce una excepción, no se ejecuta un bloque de
Catch en la función de iterador, pero se ejecuta un bloque de Finally en la función de iterador. Un bloque
Catch dentro de una función de iterador solo detecta las excepciones que se producen dentro de la función de
iterador.
Métodos anónimos
En Visual Basic, una función anónima puede ser una función de iterador. Esto se ilustra en el siguiente ejemplo.
En el ejemplo siguiente hay un método que no es de iterador que valida los argumentos. El método devuelve el
resultado de un iterador anónimo que describe los elementos de la colección.
Sub Main()
For Each number As Integer In GetSequence(5, 10)
Console.Write(number & " ")
Next
' Output: 5 6 7 8 9 10
Console.ReadKey()
End Sub
Si la validación está en su lugar dentro de la función de iterador, no se puede realizar la validación hasta el inicio
de la primera iteración del cuerpo de For Each .
Sub Main()
Dim theStack As New Stack(Of Integer)
Console.ReadKey()
End Sub
Yield GetEnumerator()
End Function
Implementación técnica
Aunque un iterador se escribe como un método, el compilador lo traduce a una clase anidada que es, en
realidad, una máquina de estados. Esta clase realiza el seguimiento de la posición del iterador mientras el bucle
For Each...Next continúe en el código de cliente.
Para ver lo que hace el compilador, puede usar la herramienta Ildasm.exe para ver el código de lenguaje
intermedio de Microsoft que se genera para un método iterador.
Cuando se crea un iterador para una clase o struct, no es necesario implementar la interfaz de IEnumerator
completa. Cuando el compilador detecta el iterador, genera automáticamente los métodos Current , MoveNext y
Dispose de la interfaz IEnumerator o IEnumerator<T>.
En cada iteración sucesiva del bucle For Each…Next (o la llamada directa a IEnumerator.MoveNext ), el cuerpo de
código del iterador siguiente se reanuda después de la instrucción Yield anterior. Después, continúa con la
siguiente instrucción Yield hasta que se alcanza el final del cuerpo del iterador o hasta que se encuentra una
instrucción Exit Function o Return .
Los iteradores no admiten el método IEnumerator.Reset. Para volver a recorrer en iteración desde el principio, se
debe obtener un nuevo iterador.
Para obtener más información, vea la especificación del lenguaje Visual Basic.
Uso de iteradores
Los iteradores permiten mantener la simplicidad de un bucle For Each cuando se necesita usar código
complejo para rellenar una secuencia de lista. Esto puede ser útil si quiere hacer lo siguiente:
Modificar la secuencia de lista después de la primera iteración del bucle For Each .
Evitar que se cargue totalmente una lista grande antes de la primera iteración de un bucle For Each . Un
ejemplo es una búsqueda paginada para cargar un lote de filas de tabla. Otro ejemplo es el método
EnumerateFiles, que implementa iteradores en .NET Framework.
Encapsular la creación de la lista en el iterador. En el método iterador, puede crear la lista y después
devolver cada resultado en un bucle.
Consulte también
System.Collections.Generic
IEnumerable<T>
For Each...Next (instrucción)
Yield (instrucción)
Iterator
Language-Integrated Query (LINQ) (Visual Basic)
27/11/2019 • 3 minutes to read • Edit Online
LINQ es un conjunto de características que agrega capacidades de consulta eficaces a la sintaxis del lenguaje Visual
Basic. LINQ incorpora patrones estándar y de fácil aprendizaje para consultar y actualizar datos, y la tecnología se
puede ampliar para proporcionar compatibilidad prácticamente con cualquier tipo de almacén de datos. .NET
Framework incluye ensamblados de proveedor LINQ que habilitan el uso de LINQ con colecciones de .NET
Framework, bases de datos de SQL Server, conjuntos de datos ADO.NET y documentos XML.
Esta sección
Introducción a LINQ (Visual Basic)
Proporciona una introducción general a los tipos de aplicaciones que puede escribir y los tipos de problemas que
puede solucionar con las consultas LINQ.
Introducción a LINQ en Visual Basic
Describe los hechos básicos que debería conocer para entender la documentación y los ejemplos de Visual Basic.
Compatibilidad del IDE y las herramientas de Visual Studio con LINQ (Visual Basic)
Describe el Object Relational Designer de Visual Studio, la compatibilidad del depurador con las consultas y otras
características del IDE relacionadas con LINQ.
Información general sobre operadores de consulta estándar (Visual Basic)
Proporciona una introducción a los operadores de consulta estándar. También proporciona vínculos a temas que
contienen más información sobre cada tipo de operación de consulta.
LINQ to Objects (Visual Basic)
Incluye vínculos a temas que explican cómo usar LINQ to Objects para tener acceso a estructuras de datos en
memoria.
LINQ to XML (Visual Basic)
Incluye vínculos a temas que explican cómo usar LINQ to XML, que proporciona las funciones de modificación de
documentos en memoria del Document Object Model (DOM) y admite expresiones de consulta de LINQ.
LINQ to ADO.NET (Página de portal)
Proporciona un punto de entrada de documentación sobre LINQ to DataSet, LINQ to SQL y LINQ to Entities. LINQ
to DataSet permite compilar capacidades de consulta más complejas en DataSet mediante la misma funcionalidad
de consulta disponible para otros orígenes de datos. LINQ to SQL proporciona una infraestructura en tiempo de
ejecución para administrar los datos relacionales como objetos. LINQ to Entities permite a los desarrolladores
escribir consultas en el modelo conceptual de Entity Framework mediante C#.
Habilitar un origen de datos para realizar consultas LINQ
Proporciona una introducción a los proveedores LINQ personalizados, los árboles de expresión LINQ y otras
maneras de extender LINQ.
Programación orientada a objetos (Visual Basic)
21/03/2020 • 19 minutes to read • Edit Online
Visual Basic proporciona compatibilidad completa para la programación orientada a objetos, incluida la
encapsulación, la herencia y el polimorfismo.
La encapsulación significa que un grupo de propiedades, métodos y otros miembros relacionados se tratan como
una sola unidad u objeto.
La herencia describe la posibilidad de crear nuevas clases basadas en una clase existente.
El polimorfismo significa que puede tener múltiples clases que se pueden usar de manera intercambiable, aunque
cada clase implementa las mismas propiedades o los mismos métodos de maneras diferentes.
En esta sección se describen los conceptos siguientes:
Clases y objetos
Miembros de clase
Propiedades y campos
Métodos
Constructores
Destructores
Eventos
Clases anidadas
Modificadores de acceso y niveles de acceso
Clases de creación de instancias
Clases y miembros compartidos
Tipos anónimos (Guía de programación de C#).
Herencia
Miembros que anulan
Interfaces
Genéricos
Delegados
Clases y objetos
Los términos clase y objeto se usan a veces indistintamente pero, en realidad, las clases describen el tipo de los
objetos, mientras que los objetos son instancias de clases que se pueden usar. Así, la acción de crear un objeto se
denomina creación de instancias. Con la analogía de plano, una clase es un plano y un objeto es un edificio
construido a partir de ese plano.
Para definir una clase:
Class SampleClass
End Class
Visual Basic también proporciona una versión ligera de clases denominadas estructuras que son útiles cuando se
necesita crear una gran matriz de objetos y no desea consumir demasiada memoria para ello.
Para definir una estructura:
Structure SampleStructure
End Structure
Class SampleClass
Public SampleField As String
End Class
Las propiedades tienen procedimientos get y set, que proporcionan un mayor control sobre la forma en que se
establecen o devuelven los valores.
Visual Basic permite crear un campo privado para almacenar el valor de propiedad o usar las denominadas
propiedades implementadas automáticamente que crean este campo automáticamente en segundo plano y
proporcionan la lógica básica para los procedimientos de propiedad.
Para definir una propiedad implementada automáticamente:
Class SampleClass
Public Property SampleProperty as String
End Class
Si necesita realizar algunas operaciones adicionales para leer y escribir el valor de propiedad, defina un campo
para almacenar el valor de propiedad y proporcione la lógica básica para almacenarlo y recuperar lo:
Class SampleClass
Private m_Sample As String
Public Property Sample() As String
Get
' Return the value stored in the field.
Return m_Sample
End Get
Set(ByVal Value As String)
' Store the value in the field.
m_Sample = Value
End Set
End Property
End Class
La mayoría de las propiedades tienen métodos o procedimientos tanto para establecer como para obtener el valor
de propiedad. Sin embargo, se pueden crear propiedades de solo lectura o solo escritura para restringir su
modificación o lectura. En Visual Basic se pueden usar las palabras clave ReadOnly y WriteOnly . En cambio, las
propiedades implementadas automáticamente no pueden ser de solo lectura o de solo escritura.
Para más información, consulte:
Property (instrucción)
Get (Instrucción)
Establecer declaración
Readonly
Writeonly
Métodos
Un método es una acción que un objeto puede realizar.
NOTE
En Visual Basic hay dos formas de crear un método: se usa la instrucción Sub si el método no devuelve un valor o bien se
usa la instrucción Function si el método devuelve un valor.
Class SampleClass
Public Function SampleFunc(ByVal SampleParam As String)
' Add code here
End Function
End Class
Una clase puede tener varias implementaciones o sobrecargas del mismo método que se diferencian en el número
de parámetros o de tipos de parámetro.
Para sobrecargar un método:
En la mayoría de los casos, un método se declara dentro de una definición de clase. Sin embargo, Visual Basic
también admite métodos de extensión que permiten agregar métodos a una clase existente fuera de la definición
real de la clase.
Para más información, consulte:
Function (instrucción)
Instrucción Sub
Sobrecargas
Métodos de extensión
Constructores
Los constructores son métodos de clase que se ejecutan automáticamente cuando se crea un objeto de un tipo
determinado. Normalmente, los constructores inicializan los miembros de datos del nuevo objeto. Un constructor
solo puede ejecutarse una vez cuando se crea una clase. Además, el código del constructor siempre se ejecuta
antes que cualquier otro código en una clase. Sin embargo, puede crear varias sobrecargas del constructor de la
misma forma que para cualquier otro método.
Para definir un constructor para una clase:
Class SampleClass
Sub New(ByVal s As String)
// Add code here.
End Sub
End Class
Para obtener más información, consulte: Duración del objeto: cómo se crean y destruyen los objetos.
Destructores
Los destructores se utilizan para destruir instancias de clases. En .NET Framework, el recolector de elementos no
utilizados administra automáticamente la asignación y la liberación de memoria para los objetos administrados en
la aplicación. Sin embargo, es posible que aún se necesiten destructores para limpiar cualquiera de los recursos no
administrados creados por la aplicación. Solo puede haber un destructor para una clase.
Para obtener más información sobre los destructores y la recolección de elementos no utilizados en .NET
Framework, vea Garbage Collection (Recolección de elementos no utilizados).
Eventos
Cuando ocurre algo interesante, los eventos habilitan una clase u objeto para notificarlo a otras clases u objetos.
La clase que envía (o genera) el evento se denomina editor y las clases que reciben (o controlan) el evento se
denominan suscriptores. Para obtener más información sobre los eventos y la forma en que se generan y
controlan, vea Eventos.
Para declarar eventos, utilice la instrucción Event.
Para generar eventos, utilice la instrucción RaiseEvent.
Para especificar controladores de eventos mediante una forma declarativa, use la instrucción WithEvents y
la cláusula Handles.
Para poder agregar, quitar y cambiar dinámicamente el controlador de eventos asociado a un evento, use la
instrucción AddHandler y la instrucción RemoveHandler junto con el operador AddressOf.
Clases anidadas
Una clase definida dentro de otra se denomina anidada. De forma predeterminada, una clase anidada es privada.
Class Container
Class Nested
' Add code here.
End Class
End Class
Para crear una instancia de la clase anidada, use el nombre de la clase contenedora seguido de un punto y seguido,
a continuación, del nombre de la clase anidada:
Protected Friend Puede obtener acceso al tipo o miembro cualquier código del
mismo ensamblado o cualquier clase derivada de otro
ensamblado.
Una vez creadas las instancias de una clase, puede asignar valores a las propiedades y los campos de la instancia,
así como invocar métodos de clase.
Para asignar valores a las propiedades durante el proceso de creación de instancias de una clase, use los
inicializadores de objeto:
Class SampleClass
Public Shared SampleString As String = "Sample String"
End Class
Para tener acceso al miembro compartido, utilice el nombre de la clase sin crear un objeto de esta clase:
MsgBox(SampleClass.SampleString)
Los módulos compartidos de Visual Basic solo tienen miembros compartidos y no se pueden crear instancias. Los
miembros compartidos tampoco pueden acceder a propiedades, campos o métodos no compartidos
Para más información, consulte:
Compartido
Module (Instrucción)
Tipos anónimos
Los tipos anónimos permiten crear objetos sin escribir una definición de clase para el tipo de datos. En su lugar, el
compilador genera una clase. La clase no tiene ningún nombre que se pueda usar y contiene las propiedades
especificadas al declarar el objeto.
Para crear una instancia de un tipo anónimo:
Herencia
La herencia permite crear una nueva clase que reutiliza, extiende y modifica el comportamiento que se define en
otra clase. La clase cuyos miembros se heredan se denomina clase base y la clase que hereda esos miembros se
denomina clase derivada. Sin embargo, todas las clases Object de Visual Basic heredan implícitamente de la clase
que admite la jerarquía de clases .NET y proporciona servicios de bajo nivel a todas las clases.
NOTE
Visual Basic no admite la herencia múltiple. Es decir, solo puede especificar una clase base para una clase derivada.
Class DerivedClass
Inherits BaseClass
End Class
De forma predeterminada, todas las clases se pueden heredar. Sin embargo, puede especificar si una clase no se
debe usar como clase base o bien crear una clase que solo se pueda usar como clase base.
Para especificar que una clase no se puede usar como clase base:
Para especificar que una clase se puede usar solo como clase base y no se pueden crear instancias de esta:
MustInherit Class BaseClass
End Class
Interfaces
Las interfaces, como las clases, definen un conjunto de propiedades, métodos y eventos. Pero de forma contraria a
las clases, las interfaces no proporcionan implementación. Se implementan como clases y se definen como
entidades separadas de las clases. Una interfaz representa un contrato, en el cual una clase que implementa una
interfaz debe implementar cualquier aspecto de dicha interfaz exactamente como esté definido.
Para definir una interfaz:
Class SampleClass
Implements ISampleInterface
Sub DoSomething
' Method implementation.
End Sub
End Class
Genéricos
Las clases, estructuras, interfaces y métodos de .NET pueden incluir parámetros de tipo que definen tipos de
objetos que pueden almacenar o usar. El ejemplo más común de elementos genéricos es una colección, donde se
puede especificar el tipo de objetos que se va a almacenar en una colección.
Para definir una clase genérica:
Class SampleGeneric(Of T)
Public Field As T
End Class
Delegados
Un delegado es un tipo que define una firma de método y que puede proporcionar una referencia a cualquier
método con una firma compatible. Puede invocar (o llamar) al método a través del delegado. Los delegados se
utilizan para pasar métodos como argumentos a otros métodos.
NOTE
Los controladores de eventos no son más que métodos que se invocan a través de delegados. Para obtener más
información sobre el uso de delegados en el control de eventos, vea Eventos.
Para crear una referencia a un método que coincida con la firma especificada por el delegado:
Class SampleClass
' Method that matches the SampleDelegate signature.
Sub SampleSub(ByVal str As String)
' Add code here.
End Sub
' Method that instantiates the delegate.
Sub SampleDelegateSub()
Dim sd As SampleDelegate = AddressOf SampleSub
sd("Sample string")
End Sub
End Class
Para más información, consulte:
Delegados
Delegate (instrucción)
AddressOf (operador)
Consulte también
Guía de programación en Visual Basic
Reflexión (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
La reflexión proporciona objetos (de tipo Type) que describen los ensamblados, módulos y tipos. Puede usar la
reflexión para crear dinámicamente una instancia de un tipo, enlazar el tipo a un objeto existente u obtener el tipo
desde un objeto existente e invocar sus métodos, o acceder a sus campos y propiedades. Si usa atributos en el
código, la reflexión le permite acceder a ellos. Para obtener más información, consulte Attributes (Atributos).
Este es un ejemplo simple de reflexión que usa el método estático GetType , heredado por todos los tipos de la
clase base Object , para obtener el tipo de una variable:
El resultado es el siguiente:
System.Int32
En el ejemplo siguiente se usa la reflexión para obtener el nombre completo del ensamblado cargado.
El resultado es el siguiente:
mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
Secciones relacionadas
Para obtener más información:
Reflexión
Viewing Type Information (Ver información tipos)
Reflection and Generic Types (Reflexión y tipos genéricos)
System.Reflection.Emit
Retrieving Information Stored in Attributes (Recuperar la información almacenada en atributos)
Vea también
Guía de programación en Visual Basic
Ensamblados de .NET
Serialización (Visual Basic)
27/11/2019 • 8 minutes to read • Edit Online
La serialización es un proceso que consiste en convertir un objeto en una secuencia de bytes para almacenar el
objeto o transmitirlo a la memoria, a una base de datos o a un archivo. Su propósito principal es guardar el estado
de un objeto para poder volver a crearlo cuando sea necesario. El proceso inverso se denomina deserialización.
Funcionamiento de la serialización
En esta ilustración se muestra el proceso general de la serialización.
El objeto se serializa en una secuencia, que incluye no solo los datos, sino también la información sobre el tipo de
objeto, como su versión, referencia cultural y nombre de ensamblado. A partir de esa secuencia, el almacenamiento
se puede realizar en una base de datos, en un archivo o en la memoria.
Usos de la serialización
La serialización permite al desarrollador guardar el estado de un objeto y volver a crearlo según sea necesario,
gracias a que proporciona almacenamiento de los objetos e intercambio de datos. A través de la serialización, un
desarrollador puede realizar acciones como enviar un objeto a una aplicación remota por medio de un servicio
web, pasar un objeto de un dominio a otro, pasar un objeto a través de un firewall como una cadena XML o
mantener la seguridad o información específica del usuario entre aplicaciones.
Conversión de un objeto en serializable
Para serializar un objeto, necesita el objeto que se va a serializar, una secuencia que contenga el objeto serializado y
un Formatter. System.Runtime.Serialization contiene las clases necesarias para serializar y deserializar objetos.
Aplique el atributo SerializableAttribute a un tipo para indicar que se pueden serializar instancias de este tipo. Si se
intenta serializar pero el tipo no tiene el atributo SerializationException, se produce una excepción
SerializableAttribute.
Si no quiere que un campo dentro de la clase sea serializable, aplique el atributo NonSerializedAttribute. Si un
campo de un tipo serializable contiene un puntero, un controlador o alguna otra estructura de datos específica para
un entorno concreto y el campo no se puede reconstituir correctamente en un entorno diferente, puede convertirlo
en no serializable.
Si una clase serializada contiene referencias a objetos de otras clases marcadas como SerializableAttribute, esos
objetos también se serializarán.
Serialización de diseñador
La serialización de diseñador es una forma especial de serialización que abarca el tipo de persistencia de objeto
normalmente asociado a las herramientas de desarrollo. La serialización de diseñador es un proceso que consiste
en convertir un gráfico de objetos en un archivo de código fuente que puede utilizarse posteriormente para
recuperar el gráfico de objetos. Un archivo de código fuente puede contener código, marcado o incluso
información de la tabla SQL.
En esta sección se presenta la estructura de programas de Visual Basic típica, se proporciona un sencillo programa
de Visual Basic, "Hello, World", y se explican las convenciones de código Visual Basic. Las convenciones de código
son sugerencias que no se centran en la lógica de un programa, sino en su estructura y apariencia física. Después,
hace que el código sea más fácil de leer, comprender y mantener. Las convenciones de código pueden incluir, entre
otras:
Formatos normalizados para etiquetar y comentar código.
Instrucciones para el espaciado, el formato y la sangría del código.
Convenciones de nomenclatura para objetos, variables y procedimientos.
En los siguientes temas se presenta un conjunto de directrices de programación para Visual Basic programas,
junto con ejemplos de uso correcto.
Esta sección
Estructura de un programa de Visual Basic
Proporciona información general sobre los elementos que componen un programa Visual Basic.
Procedimiento Main en Visual Basic
Describe el procedimiento que sirve como punto de partida y control general de la aplicación.
Referencias y la instrucción Imports
Describe cómo hacer referencia a objetos de otros ensamblados.
Espacios de nombres en Visual Basic
Describe cómo los espacios de nombres organizan los objetos dentro de los ensamblados.
Convenciones de nomenclatura de Visual Basic
Incluye directrices generales para asignar nombres a procedimientos, constantes, variables, argumentos y objetos.
Convenciones de código de Visual Basic
Revisa las instrucciones usadas en el desarrollo de los ejemplos de esta documentación.
Compilación condicional
Describe cómo compilar de forma selectiva bloques concretos de código mientras se indica al compilador que
omita otros.
Interrumpir y combinar instrucciones en código
Muestra cómo dividir instrucciones largas en varias líneas y combinar instrucciones cortas en una sola línea.
Contraer y ocultar secciones de código
Muestra cómo contraer y ocultar secciones de código en el editor de código de Visual Basic.
Aplicar etiquetas a las instrucciones
Muestra cómo marcar una línea de código para identificarla para su uso con instrucciones como On Error Goto .
Caracteres especiales en el código
Muestra cómo y dónde utilizar caracteres no numéricos y no alfabéticos.
Comentarios en código
Describe cómo agregar comentarios descriptivos al código.
Palabras clave como nombres de elementos en código
Describe cómo usar corchetes ( [] ) para delimitar nombres de variable que también se Visual Basic palabras
clave.
Me, My, MyBase y MyClass
Describe varias maneras de hacer referencia a los elementos de un programa de Visual Basic.
Limitaciones de Visual Basic
Describe la eliminación de los límites de código conocidos en Visual Basic.
Secciones relacionadas
Convenciones tipográficas y de código
Proporciona convenciones de codificación estándar para Visual Basic.
Escribir código
Describe las características que facilitan la escritura y administración del código.
Estructura de un programa de Visual Basic
23/10/2019 • 7 minutes to read • Edit Online
Un programa de Visual Basic se componen de bloques de creación estándar. Un solución consta de uno o varios
proyectos. Un proyecto a su vez puede contener uno o más ensamblados. Cada ensamblado está compilada a
partir de uno o varios archivos de origen. Un archivo de código fuente proporciona la definición e implementación
de clases, estructuras, módulos e interfaces, que en última instancia contienen todo el código.
Para obtener más información acerca de estos bloques de creación de un programa de Visual Basic, vea soluciones
y proyectos y ensamblados de .NET.
El procedimiento principal
El Main procedimiento es el primer código que se ejecutará cuando se ha cargado la aplicación. Main sirve como
punto de partida y control general de la aplicación. Hay cuatro variedades de Main :
Sub Main()
Vea también
Procedimiento Main en Visual Basic
Convenciones de nomenclatura de Visual Basic
Limitaciones de Visual Basic
Procedimiento Main en Visual Basic
27/11/2019 • 5 minutes to read • Edit Online
Cada Visual Basic aplicación debe contener un procedimiento denominado Main . Este procedimiento sirve como
punto de partida y control general de la aplicación. El .NET Framework llama a su Main procedimiento cuando
haya cargado la aplicación y esté listo para pasarle el control. A menos que cree una aplicación Windows Forms,
debe escribir el procedimiento de Main para las aplicaciones que se ejecutan por sí mismas.
Main contiene el código que se ejecuta en primer lugar. En Main , puede determinar qué formulario se va a
cargar primero cuando se inicie el programa, averiguar si ya se está ejecutando una copia de la aplicación en el
sistema, establecer un conjunto de variables para la aplicación o abrir una base de datos que la aplicación
requiera.
Las aplicaciones de consola se ejecutan por sí mismas, por lo que debe proporcionar al menos un
procedimiento Main .
Windows Forms aplicaciones se ejecutan por sí solos. Sin embargo, el compilador de Visual Basic genera
automáticamente un procedimiento de Main en este tipo de aplicación y no es necesario escribir ninguno.
Las bibliotecas de clases no requieren un procedimiento Main . Entre ellas se incluyen bibliotecas de
controles de Windows y bibliotecas de controles Web. Las aplicaciones web se implementan como
bibliotecas de clases.
NOTE
Si declara Main en una clase, debe utilizar la palabra clave Shared . En un módulo, Main no tiene que ser Shared .
La manera más sencilla consiste en declarar un procedimiento Sub que no tome argumentos o devuelva
un valor.
Module mainModule
Sub Main()
MsgBox("The Main procedure is starting the application.")
' Insert call to appropriate starting place in your code.
MsgBox("The application is terminating.")
End Sub
End Module
Main también puede devolver un valor Integer , que el sistema operativo usa como código de salida para
el programa. Otros programas pueden probar este código examinando el valor de ERRORLEVEL de
Windows. Para devolver un código de salida, debe declarar Main como un Function procedimiento en
lugar de un procedimiento Sub .
Module mainModule
Function Main() As Integer
MsgBox("The Main procedure is starting the application.")
Dim returnValue As Integer = 0
' Insert call to appropriate starting place in your code.
' On return, assign appropriate value to returnValue.
' 0 usually means successful completion.
MsgBox("The application is terminating with error level " &
CStr(returnValue) & ".")
Return returnValue
End Function
End Module
Main también puede tomar una matriz de String como argumento. Cada cadena de la matriz contiene
uno de los argumentos de línea de comandos utilizados para invocar el programa. Puede realizar
diferentes acciones en función de sus valores.
Module mainModule
Function Main(ByVal cmdArgs() As String) As Integer
MsgBox("The Main procedure is starting the application.")
Dim returnValue As Integer = 0
' See if there are any arguments.
If cmdArgs.Length > 0 Then
For argNum As Integer = 0 To UBound(cmdArgs, 1)
' Insert code to examine cmdArgs(argNum) and take
' appropriate action based on its value.
Next
End If
' Insert call to appropriate starting place in your code.
' On return, assign appropriate value to returnValue.
' 0 usually means successful completion.
MsgBox("The application is terminating with error level " &
CStr(returnValue) & ".")
Return returnValue
End Function
End Module
Puede declarar Main para examinar los argumentos de la línea de comandos, pero no devolver un código
de salida, como se indica a continuación.
Module mainModule
Sub Main(ByVal cmdArgs() As String)
MsgBox("The Main procedure is starting the application.")
Dim returnValue As Integer = 0
' See if there are any arguments.
If cmdArgs.Length > 0 Then
For argNum As Integer = 0 To UBound(cmdArgs, 1)
' Insert code to examine cmdArgs(argNum) and take
' appropriate action based on its value.
Next
End If
' Insert call to appropriate starting place in your code.
MsgBox("The application is terminating.")
End Sub
End Module
Vea también
MsgBox
Length
UBound
Estructura de un programa de Visual Basic
-main
Shared
Sub (instrucción)
Function (instrucción)
Integer (tipo de datos)
String (tipo de datos)
Referencias y la instrucción Imports (Visual Basic)
27/11/2019 • 4 minutes to read • Edit Online
Puede hacer que los objetos externos estén disponibles para el proyecto eligiendo el comando Agregar
referencia en el menú proyecto . Las referencias en Visual Basic pueden apuntar a ensamblados, que son
similares a las bibliotecas de tipos, pero contienen más información.
La instrucción Imports
Los ensamblados incluyen uno o varios espacios de nombres. Al agregar una referencia a un ensamblado,
también puede Agregar una instrucción Imports a un módulo que controla la visibilidad de los espacios de
nombres de ese ensamblado en el módulo. La instrucción Imports proporciona un contexto de ámbito que le
permite usar solo la parte del espacio de nombres necesaria para proporcionar una referencia única.
La instrucción Imports tiene la siguiente sintaxis:
Imports [Aliasname =] Namespace
Aliasname hace referencia a un nombre corto que puede usar en el código para hacer referencia a un espacio de
nombres importado. Namespace es un espacio de nombres disponible a través de una referencia de proyecto, a
través de una definición dentro del proyecto o a través de una instrucción de Imports anterior.
Un módulo puede contener cualquier número de instrucciones Imports . Deben aparecer después de cualquier
instrucción Option , si está presente, pero antes de cualquier otro código.
NOTE
No confunda las referencias de proyecto con la instrucción Imports o la instrucción Declare . Las referencias de proyecto
hacen que los objetos externos, como los objetos de los ensamblados, estén disponibles para proyectos de Visual Basic. La
instrucción Imports se usa para simplificar el acceso a las referencias del proyecto, pero no proporciona acceso a estos
objetos. La instrucción Declare se utiliza para declarar una referencia a un procedimiento externo en una biblioteca de
vínculos dinámicos (DLL).
Imports instrucciones siempre deben ser las primeras líneas inmediatamente después de cualquier instrucción
Option de un módulo. En el siguiente fragmento de código se muestra cómo importar y asignar un alias al
módulo Microsoft.VisualBasic.ControlChars:
Imports CtrlChrs = Microsoft.VisualBasic.ControlChars
Las referencias futuras a este espacio de nombres pueden ser mucho más cortas:
Si una instrucción Imports no incluye un nombre de alias, los elementos definidos en el espacio de nombres
importado se pueden usar en el módulo sin calificación. Si se especifica el nombre de alias, se debe usar como
calificador para los nombres contenidos dentro de ese espacio de nombres.
Vea también
ControlChars
Microsoft.VisualBasic
Espacios de nombres en Visual Basic
Ensamblados de .NET
Imports (instrucción), espacio de nombres y tipo .NET
Espacios de nombres en Visual Basic
21/03/2020 • 11 minutes to read • Edit Online
Los espacios de nombres organizan los objetos definidos en un ensamblado. Los ensamblados pueden contener
varios espacios de nombres, que a su vez pueden contener otros espacios de nombres. Los espacios de
nombres evitan las ambigüedades y simplifican las referencias cuando se usan grupos de objetos grandes,
como las bibliotecas de clases.
Por ejemplo, .NET Framework ListBox define System.Windows.Forms la clase en el espacio de nombres. En el
siguiente fragmento de código se muestra cómo declarar una variable con el nombre completo de esta clase:
En la ilustración siguiente se muestran ListBox dos jerarquías de espacio de nombres, ambas con un objeto
denominado:
De forma predeterminada, cada archivo ejecutable que cree con Visual Basic contiene un espacio de nombres
con el mismo nombre que el proyecto. Por ejemplo, si define un objeto en un proyecto denominado
ListBoxProject , el archivo ejecutable ListBoxProject.exe contiene un espacio de nombres llamado
ListBoxProject .
Se puede usar el mismo espacio de nombres en varios ensamblados. Visual Basic los trata como un único
conjunto de nombres. Por ejemplo, puede definir clases para un espacio de nombres ( SomeNameSpace ) en un
ensamblado ( Assemb1 ) y definir clases adicionales para el mismo espacio de nombres desde un ensamblado
denominado Assemb2 .
nombres completos
Los nombres completos son referencias de objetos que llevan como prefijo el nombre del espacio de nombres
en el que se define el objeto. Puede usar los objetos definidos en otros proyectos si crea una referencia a la clase
(eligiendo Agregar referencia desde el menú Proyecto ) y usa el nombre completo del objeto en el código.
En el siguiente fragmento de código se muestra cómo usar el nombre completo de un objeto desde el espacio
de nombres de otro proyecto:
Los nombres completos evitan conflictos de nomenclatura, ya que permiten que el compilador determine el
objeto que se está usando, aunque los nombres pueden llegar a ser largos y complicados. Para solucionar este
problema, puede usar la instrucción Imports para definir un alias: un nombre abreviado que puede usar en
lugar de un nombre completo. Por ejemplo, en el siguiente ejemplo de código se crean alias para dos nombres
completos y se usan para definir dos objetos.
Si usa la instrucción Imports sin un alias, puede usar todos los nombres de ese espacio de nombres sin
ninguna calificación, siempre que sean únicos en el proyecto. Si el proyecto contiene instrucciones Imports de
los espacios de nombres que contienen elementos con el mismo nombre, debe calificar totalmente ese nombre
en el momento de usarlo. Supongamos, por ejemplo, que el proyecto contenía las dos instrucciones Imports
siguientes:
Si intenta usar Class1 sin calificarlo completamente, Visual Basic produce Class1 un error que indica que el
nombre es ambiguo.
Como resultado, el compilador de Visual Basic no puede resolver correctamente la referencia a System.Int32,
porque SpecialSpace.System no define Int32 . Puede usar la palabra clave Global para iniciar la cadena de
calificación en el nivel más externo de la biblioteca de clases de .NET Framework. De este modo, puede
especificar el espacio de nombres System o cualquier otro espacio de nombres en la biblioteca de clases. Esto se
ilustra en el siguiente ejemplo.
Namespace SpecialSpace
Namespace System
Class abc
Function getValue() As Global.System.Int32
Dim n As Global.System.Int32
Return n
End Function
End Class
End Namespace
End Namespace
Puede usar Global para obtener acceso a otros espacios de nombres de nivel de raíz, como
Microsoft.VisualBasic, y a cualquier espacio de nombres asociado a su proyecto.
En los siguientes ejemplos se usa la palabra clave Global para declarar un espacio de nombres fuera del
espacio de nombres raíz del proyecto.
Namespace Global.Magnetosphere
End Namespace
Namespace Global
Namespace Magnetosphere
End Namespace
End Namespace
En una declaración de espacio de nombres, no se puede anidar Global en otro espacio de nombres.
Puede usar la Application Page, Project Designer (Visual Basic) para ver y modificar el espacio de nombres
raíz del proyecto. En cuanto a los proyectos nuevos, el espacio de nombres raíz tiene como nombre
predeterminado el nombre del proyecto. Para que Global sea el espacio de nombres de nivel superior, puede
borrar la entrada Espacio de nombres raíz para que el cuadro esté vacío. Si se borra Espacio de nombres
raíz , ya no es necesario usar la palabra clave Global en las declaraciones de espacio de nombres.
Si una instrucción Namespace declara un nombre que también es un espacio de nombres en .NET Framework, el
espacio de nombres de .NET Framework dejará de estar disponible si la palabra clave Global no se usa en un
nombre completo. Para habilitar el acceso al espacio de nombres de .NET Framework sin usar la palabra clave
Global , puede incluir la palabra clave Global en la instrucción Namespace .
En el siguiente ejemplo aparece la palabra clave Global en la declaración de espacio de nombres System.Text .
Si la palabra clave Global no estuviera presente en la declaración de espacio de nombres, no se podría obtener
acceso a StringBuilder sin especificar Global.System.Text.StringBuilder . Para el proyecto ConsoleApplication1 ,
las referencias a System.Text tendrían acceso a ConsoleApplication1.System.Text si no se usara la palabra clave
Global .
Module Module1
Sub Main()
Dim encoding As New System.Text.TitanEncoding
Namespace Global.System.Text
Class TitanEncoding
End Class
End Namespace
Consulte también
ListBox
System.Windows.Forms
Ensamblados de .NET
Instrucción Imports y referencias
Imports (instrucción), espacio de nombres y tipo .NET
Escribir código en soluciones de Office
Convenciones de nomenclatura de Visual Basic
27/11/2019 • 3 minutes to read • Edit Online
Al asignar un nombre a un elemento en la aplicación Visual Basic, el primer carácter de ese nombre debe ser un
carácter alfabético o un carácter de subrayado. Sin embargo, tenga en cuenta que los nombres que empiezan por
un carácter de subrayado no son compatibles con la independencia del lenguaje y los componentes
independientes del lenguaje (CLS).
Las sugerencias siguientes se aplican a la asignación de nombres.
Comience cada palabra independiente en un nombre con una letra mayúscula, como en FindLastRecord y
RedrawMyForm .
Los nombres de función y método de inicio con un verbo, como en InitNameArray o CloseDialog .
Empiece la clase, la estructura, el módulo y los nombres de propiedad con un nombre, como en
EmployeeName o CarAccessory .
Comience los nombres de interfaz con el prefijo "I", seguido de un sustantivo o un sustantivo, como
IComponent , o con un adjetivo que describa el comportamiento de la interfaz, como IPersistable . No use
el carácter de subrayado y use las abreviaturas con moderación, ya que las abreviaturas pueden causar
confusión.
Comience los nombres de los controladores de eventos con un nombre que describa el tipo de evento
seguido del sufijo " EventHandler ", como en " MouseEventHandler ".
En los nombres de las clases de argumento de evento, incluya el sufijo " EventArgs ".
Si un evento tiene un concepto de "Before" o "after", use un sufijo en el pasado o en el pasado, como en "
ControlAdd " o " ControlAdded ".
Para términos largos o usados con frecuencia, use abreviaturas para mantener las longitudes de nombre
razonables, por ejemplo, "HTML", en lugar de "Lenguaje de marcado de hipertexto". En general, los
nombres de variable de más de 32 caracteres son difíciles de leer en un monitor establecido en una
resolución baja. Además, asegúrese de que las abreviaturas son coherentes en toda la aplicación. El cambio
aleatorio de un proyecto entre "HTML" y "Lenguaje de marcado de hipertexto" puede producir confusión.
Evite usar nombres en un ámbito interno que coincidan con los nombres de un ámbito externo. Se pueden
producir errores si se tiene acceso a la variable equivocada. Si se produce un conflicto entre una variable y
la palabra clave con el mismo nombre, debe identificar la palabra clave anteponiendo la biblioteca de tipos
adecuada. Por ejemplo, si tiene una variable denominada Date , puede usar la función de Date intrínseca
solo mediante una llamada a DateTime.Date.
Vea también
Palabras clave como nombres de elementos en código
Me, My, MyBase y MyClass
Nombres de elementos declarados
Convenciones de código y estructura de programas
Referencia del lenguaje Visual Basic
Convenciones de código de Visual Basic
27/11/2019 • 11 minutes to read • Edit Online
Microsoft desarrolla ejemplos y documentación que siguen las instrucciones de este tema. Si sigue las mismas
convenciones de codificación, puede obtener las siguientes ventajas:
El código tendrá un aspecto coherente, de modo que los lectores puedan centrarse mejor en el contenido,
no en el diseño.
Los lectores entienden el código con más rapidez, ya que pueden hacer suposiciones basadas en la
experiencia anterior.
Puede copiar, cambiar y mantener el código más fácilmente.
Ayuda a asegurarse de que el código muestra "prácticas recomendadas" para Visual Basic.
Convenciones de nomenclatura
Para obtener información sobre las directrices de nomenclatura, vea el tema directrices de nomenclatura .
No use "mi" o "mi" como parte de un nombre de variable. Esta práctica crea confusión con los objetos My .
No es necesario cambiar los nombres de los objetos en el código generado automáticamente para que se
ajusten a las instrucciones.
Convenciones de diseño
Inserte tabuladores como espacios y use la sangría inteligente con sangrías de cuatro espacios.
Utilice la lista descriptiva (cambio de formato) del código para volver a dar formato al código en el
editor de código. Para obtener más información, vea Opciones, editor de texto, básico (Visual Basic).
Use solo una instrucción por línea. No use el carácter separador de línea de Visual Basic (:).
Evite el uso del carácter de continuación de línea explícita "" en favor de la continuación de línea implícita
siempre que el lenguaje lo permita.
Use solo una declaración por línea.
Si el listing (volver a formatear) de código no da formato a las líneas de continuación
automáticamente, Aplique sangría manualmente a las líneas de continuación en una posición de tabulación.
Sin embargo, siempre alinea a la izquierda los elementos de una lista.
a As Integer,
b As Integer
Agregue al menos una línea en blanco entre las definiciones de método y propiedad.
Sub Main()
For Each argument As String In My.Application.CommandLineArgs
' Add code here to use the string variable.
Next
End Sub
Convenciones de lenguaje
String (Tipo de datos)
Use interpolación de cadenas para concatenar cadenas cortas, como se muestra en el código siguiente.
MsgBox($"hello{vbCrLf}goodbye")
Use la sintaxis {} al declarar e inicializar matrices de tipos de datos básicos. Por ejemplo, use la siguiente
sintaxis:
With orderLog
.Log = "Application"
.Source = "Application Name"
.MachineName = "Computer Name"
End With
Use la instrucción try... Instrucciones Catch y Using cuando se usa el control de excepciones
No use On Error Goto .
Usar la palabra clave IsNot
Use la palabra clave IsNot en lugar de Not...Is Nothing .
New (palabra clave )
Utilice la creación de instancias cortas. Por ejemplo, use la siguiente sintaxis:
Use inicializadores de objeto para los nuevos objetos en lugar del constructor sin parámetros:
Al definir un evento, use la sintaxis abreviada y deje que el compilador defina el delegado:
Return htmlDoc.ToString()
End Function
Consultas LINQ
Use nombres descriptivos para las variables de consulta:
Proporcione nombres para los elementos de una consulta para asegurarse de que los nombres de
propiedad de tipos anónimos se escriben en mayúsculas correctamente con la grafía Pascal:
Cambie el nombre de las propiedades cuando puedan ser ambiguos en el resultado. Por ejemplo, si la
consulta devuelve un nombre de cliente y un identificador de pedido, cambie su nombre en lugar de
mantenerlos como Name y ID en el resultado:
Utilice la cláusula Join para definir explícitamente una operación de combinación en lugar de utilizar la
cláusula Where para definir implícitamente una operación de combinación:
Vea también
Instrucciones de codificación segura
Compilación condicional en Visual Basic
27/11/2019 • 5 minutes to read • Edit Online
NOTE
La finalización automática no funcionará al editar código y utilizar directivas de compilación condicional si el código no
forma parte de la rama actual.
-Antes de crear el archivo ejecutable, establezca las constantes en el Diseñador de proyectos siguiendo los pasos que se
indican en Administración de propiedades de soluciones y proyectos.
PA RA ESTA B L EC ER C O N STA N T ES EN L A L ÍN EA DE C O M A N DO S
-Use el modificador -d para especificar constantes de compilación condicional, como en el ejemplo siguiente:
vbc MyProj.vb /d:conFrenchVersion=–1:conANSI=0
No se requiere espacio entre el modificador -d y la primera constante. Para obtener más información, vea -define (Visual Basic).
Las declaraciones de línea de comandos invalidan las declaraciones especificadas en el Diseñador de proyectos , pero no las
borran. Los argumentos establecidos en el Diseñador de proyectos permanecen en vigor para las compilaciones
posteriores.
Al escribir constantes en el propio código, no hay ninguna regla estricta en cuanto a su ubicación, ya que su ámbito es todo el
módulo en el que se declaran.
-Coloque las constantes en el bloque de declaración del módulo en el que se usan. Esto ayuda a mantener el código
organizado y más fácil de leer.
Temas relacionados
T ÍT ULO DESC RIP C IÓ N
Referencia
#Const (directiva)
#If...Then...#Else (directivas)
-define (Visual Basic)
Cómo: Interrumpir y combinar instrucciones en
código (Visual Basic)
27/11/2019 • 3 minutes to read • Edit Online
Al escribir el código, puede crear a veces instrucciones largas que requieren un desplazamiento horizontal en el
editor de código. Aunque esto no afecta al modo en que se ejecuta el código, dificulta la lectura del código tal y
como aparece en el monitor. En tales casos, debería considerar la posibilidad de dividir la única instrucción larga
en varias líneas.
NOTE
En algunos casos, si se omite el carácter de continuación de línea, el compilador Visual Basic continuará implícitamente la
instrucción en la siguiente línea de código. Para obtener una lista de los elementos de sintaxis para los que puede omitir el
carácter de continuación de línea, vea "continuación de línea implícita" en las instrucciones.
En el ejemplo siguiente, la instrucción se divide en cuatro líneas con caracteres de continuación de línea que
terminan todo excepto la última línea.
cmd.CommandText = _
"SELECT * FROM Titles JOIN Publishers " _
& "ON Publishers.PubId = Titles.PubID " _
& "WHERE Publishers.State = 'CA'"
El uso de esta secuencia hace que el código sea más fácil de leer, tanto en línea como en el momento de su
impresión.
El carácter de continuación de línea debe ser el último carácter de una línea. No puede seguirlo con nada más en
la misma línea.
Existen algunas limitaciones en cuanto a dónde se puede usar el carácter de continuación de línea; por ejemplo,
no se puede utilizar en medio de un nombre de argumento. Puede dividir una lista de argumentos con el carácter
de continuación de línea, pero los nombres individuales de los argumentos deben permanecer intactos.
No se puede continuar un comentario mediante un carácter de continuación de línea. El compilador no examina
los caracteres de un comentario para obtener un significado especial. Para un Comentario de varias líneas, repita
el símbolo de comentario ( ' ) en cada línea.
Aunque la colocación de cada instrucción en una línea independiente es el método recomendado, Visual Basic
también permite colocar varias instrucciones en la misma línea.
Vea también
Convenciones de código y estructura de programas
Instrucciones
Cómo: Contraer y ocultar secciones de código (Visual
Basic)
27/11/2019 • 2 minutes to read • Edit Online
La Directiva #Region permite contraer y ocultar secciones de código en archivos de Visual Basic. La Directiva
#Region permite especificar un bloque de código que se puede expandir o contraer cuando se usa el editor de
código de Visual Studio. La capacidad de ocultar el código de forma selectiva facilita la administración y la lectura
de los archivos. Para obtener más información, vea Esquematización.
las directivas de #Region admiten la semántica de bloques de código como #If...#End If . Esto significa que no
pueden comenzar en un bloque y finalizar en otro; el inicio y el final deben estar en el mismo bloque. las directivas
de #Region no se admiten en funciones.
El bloque #Region se puede usar varias veces en un archivo de código; por lo tanto, los usuarios pueden definir
sus propios bloques de procedimientos y clases que, a su vez, se pueden contraer. #Region bloques también se
pueden anidar dentro de otros bloques de #Region .
NOTE
Ocultar código no impide que se compile y no afecta a #If...#End If instrucciones.
Vea también
Compilación condicional
#Region (directiva)
#If...Then...#Else (directivas)
Esquematización
Cómo: Aplicar etiquetas a las instrucciones (Visual
Basic)
27/11/2019 • 2 minutes to read • Edit Online
Los bloques de instrucciones se componen de líneas de código delimitadas por dos puntos. Se dice que las líneas
de código precedidas de una cadena o un entero de identificación están etiquetadas. Las etiquetas de instrucción
se usan para marcar una línea de código para identificarla para su uso con instrucciones como On Error Goto .
Las etiquetas pueden ser válidas Visual Basic identificadores, como los que identifican elementos de
programación, o literales enteros. Una etiqueta debe aparecer al principio de una línea de código fuente y debe ir
seguida de dos puntos, independientemente de si va seguido de una instrucción en la misma línea.
El compilador identifica las etiquetas comprobando si el principio de la línea coincide con cualquier identificador
ya definido. Si no es así, el compilador supone que es una etiqueta.
Las etiquetas tienen su propio espacio de declaración y no interfieren con otros identificadores. El ámbito de una
etiqueta es el cuerpo del método. La declaración de etiqueta tiene prioridad en cualquier situación ambigua.
NOTE
Las etiquetas solo se pueden usar en instrucciones ejecutables dentro de métodos.
Vea también
Instrucciones
Nombres de elementos declarados
Convenciones de código y estructura de programas
Caracteres especiales en código (Visual Basic)
27/11/2019 • 6 minutes to read • Edit Online
A veces, es necesario usar caracteres especiales en el código, es decir, caracteres que no son alfabéticos o
numéricos. Los caracteres de puntuación y especiales del juego de caracteres Visual Basic tienen varios usos, desde
organizar el texto del programa hasta definir las tareas que realiza el compilador o el programa compilado. No
especifican que se deba realizar una operación.
Paréntesis
Use paréntesis al definir un procedimiento, como un Sub o Function . Debe incluir todas las listas de argumentos
de procedimientos entre paréntesis. También puede usar paréntesis para colocar variables o argumentos en
grupos lógicos, especialmente para reemplazar el orden predeterminado de prioridad de los operadores en una
expresión compleja. En el ejemplo siguiente se ilustra esto.
Dim a, b, c, d, e As Double
a = 3.2
b = 7.6
c = 2
d = b + c / a
e = (b + c) / a
Después de la ejecución del código anterior, el valor de d es 8,225 y el valor de e es 3. El cálculo de d utiliza la
prioridad predeterminada de / sobre + y es equivalente a d = b + (c / a) . Los paréntesis en el cálculo de e
invalidan la prioridad predeterminada.
Separadores
Los separadores hacen lo que sugiere su nombre: separan secciones de código. En Visual Basic, el carácter
separador es el signo de dos puntos ( : ). Utilice separadores cuando desee incluir varias instrucciones en una sola
línea en lugar de líneas independientes. Esto ahorra espacio y mejora la legibilidad del código. En el ejemplo
siguiente se muestran tres instrucciones separadas por dos puntos.
a = 3.2 : b = 7.6 : c = 2
Para obtener más información, vea Cómo: interrumpir y combinar instrucciones en el código.
El carácter de dos puntos ( : ) también se usa para identificar una etiqueta de instrucción. Para obtener más
información, vea Cómo: etiquetar instrucciones.
Concatenación
Use el operador & para la concatenación, o vincule cadenas. No lo confunda con el operador + , que suma los
valores numéricos. Si usa el operador + para concatenar al trabajar con valores numéricos, puede obtener
resultados incorrectos. En el siguiente ejemplo se muestra cómo hacerlo.
var1 = "10.01"
var2 = 11
resultA = var1 + var2
resultB = var1 & var2
Después de la ejecución del código anterior, el valor de resultA es 21,01 y el valor de resultB es "10,0111".
Las tres líneas de salida de MsgBox muestran el valor 32856 . La primera línea usa el acceso tradicional al index de
propiedad, el segundo hace uso del hecho de que index es la propiedad predeterminada de la clase hasDefault y
la tercera utiliza el acceso de diccionario a la clase.
Tenga en cuenta que el segundo operando del operador ! debe ser un identificador de Visual Basic válido no
incluido entre comillas dobles ( " " ). En otras palabras, no puede usar un literal de cadena o una variable de
cadena. El siguiente cambio en la última línea de la llamada MsgBox genera un error porque "X" es un literal de
cadena delimitado.
"Dictionary access returns " & hD!"X")
NOTE
Las referencias a las colecciones predeterminadas deben ser explícitas. En concreto, no se puede utilizar el operador ! en
una variable enlazada en tiempo de ejecución.
Vea también
Convenciones de código y estructura de programas
Caracteres de tipo
Comentarios en el código (Visual Basic)
27/11/2019 • 4 minutes to read • Edit Online
Cuando lea ejemplos de código, encontrará el símbolo de comentario ( ' ). Este símbolo indica al compilador de
Visual Basic que omita el texto que le sigue o el Comentario. Los comentarios son notas cortas explicativas que se
agregan al código para aportar mayor información a las personas que lo lean.
Una buena práctica de programación consiste en comenzar todos los procedimientos con un comentario breve
que describe las características funcionales del procedimiento (lo que hace). Esto ayuda al desarrollador y a los que
puedan examinar el código. Debería separar los detalles de implementación (cómo lo hace el procedimiento) de
los comentarios que describen las características funcionales. Al incluir detalles de implementación en la
descripción, recuerde actualizarlos en el momento de actualizar la función.
Los comentarios pueden ir a continuación de una instrucción en la misma línea, o pueden ocupar una línea
completa. Ambas opciones quedan reflejadas en el código siguiente.
Si el comentario necesita más de una línea, utilice el símbolo de comentario en cada línea, como se muestra en el
siguiente ejemplo:
NOTE
También puede agregar comentarios al código poniendo la palabra clave REM antes del texto. Sin embargo, el símbolo de
' y el comentario /botones sin Comentario son más fáciles de usar y requieren menos espacio y memoria.
Vea también
Instinto básico: documentar el código con comentarios XML
Crear documentación XML
Etiquetas XML para comentarios
Convenciones de código y estructura de programas
REM (instrucción)
Palabras clave como nombres de elementos en
código (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Cualquier elemento de programa, como una variable, una clase o un miembro, puede tener el mismo nombre que
una palabra clave restringida. Por ejemplo, puede crear una variable denominada Loop . Sin embargo, para hacer
referencia a su versión del mismo, que tiene el mismo nombre que la palabra clave de Loop restringida, debe
precederlo con una cadena de calificación completa o encerrarlo entre corchetes ( [ ] ), como se muestra en el
ejemplo siguiente.
' The following statement precedes Loop with a full qualification string.
sampleForm.Loop.Visible = True
' The following statement encloses Loop in square brackets.
[Loop].Visible = True
Si no hace ninguno de estos, Visual Basic asume el uso de la palabra clave intrínseca Loop y genera un error, como
en el ejemplo siguiente:
' The following statement causes a compiler error.
Loop.Visible = True
Puede usar corchetes al hacer referencia a formularios y controles, y al declarar una variable o definir un
procedimiento con el mismo nombre que una palabra clave restringida. Puede ser fácil olvidarse de calificar
nombres o incluir corchetes y, por tanto, introducir errores en el código y dificultar su lectura. Por esta razón, se
recomienda no usar palabras clave restringidas como nombres de elementos de programa. Sin embargo, si una
versión futura de Visual Basic define una nueva palabra clave que entra en conflicto con un nombre de formulario
o control existente, puede usar esta técnica al actualizar el código para que funcione con la nueva versión.
NOTE
El programa también podría incluir nombres de elementos proporcionados por otros ensamblados a los que se hace
referencia. Si estos nombres entran en conflicto con palabras clave restringidas, la colocación de los corchetes hace que Visual
Basic los interprete como elementos definidos.
Vea también
Convenciones de nomenclatura de Visual Basic
Convenciones de código y estructura de programas
Palabras clave
Me, My, MyBase y MyClass en Visual Basic
21/03/2020 • 2 minutes to read • Edit Online
Me , My MyBase , MyClass , y en Visual Basic tienen nombres similares, pero diferentes propósitos. En este tema
se describe cada una de estas entidades para distinguirlas.
Yo
La Me palabra clave proporciona una manera de hacer referencia a la instancia específica de una clase o
estructura en la que el código se está ejecutando actualmente. Me se comporta como una variable de objeto o una
variable de estructura que hace referencia a la instancia actual. El Me uso es especialmente útil para pasar
información sobre la instancia que se está ejecutando actualmente de una clase o estructura a un procedimiento
de otra clase, estructura o módulo.
Por ejemplo, supongamos que tiene el siguiente procedimiento en un módulo.
Puede llamar a este procedimiento y Form pasar la instancia actual de la clase como argumento mediante la
instrucción siguiente.
ChangeFormColor(Me)
My
La My característica proporciona un acceso fácil e intuitivo a varias clases de .NET Framework, lo que permite al
usuario de Visual Basic interactuar con el equipo, la aplicación, la configuración, los recursos, etc.
MyBase
La MyBase palabra clave se comporta como una variable de objeto que hace referencia a la clase base de la
instancia actual de una clase. MyBase se utiliza comúnmente para tener acceso a los miembros de la clase base que
se reemplazan o sombrean en una clase derivada. MyBase.New se utiliza para llamar explícitamente a un
constructor de clase base desde un constructor de clase derivada.
MyClass
La MyClass palabra clave se comporta como una variable de objeto que hace referencia a la instancia actual de
una clase como implementada originalmente. MyClass es similar Me a , pero todas las llamadas NotOverridable al
método en él se tratan como si el método fuera .
Consulte también
Fundamentos de la herencia
Limitaciones de Visual Basic
27/11/2019 • 2 minutes to read • Edit Online
Las versiones anteriores de Visual Basic los límites aplicados en el código, como la longitud de los nombres de
variable, el número de variables permitidas en los módulos y el tamaño del módulo. En Visual Basic .NET, estas
restricciones se han reducido, lo que le aporta mayor libertad para escribir y organizar el código.
Los límites físicos dependen más en la memoria en tiempo de ejecución que en las consideraciones en tiempo de
compilación. Si usa prácticas de programación prudentes y divide aplicaciones grandes en varias clases y módulos,
hay muy pocas probabilidades de encontrar una limitación de Visual Basic interna.
A continuación se indican algunas limitaciones que pueden surgir en casos extremos:
Longitud del nombre. Hay un número máximo de caracteres para el nombre de cada elemento de
programación declarado. Este máximo se aplica a toda la cadena de calificación si el nombre del elemento
está calificado. Vea Declared Element Names.
Longitud de línea. Hay un máximo de 65535 caracteres en una línea física de código fuente. La línea de
código fuente lógica puede ser más larga si usa caracteres de continuación de línea. Vea Cómo: interrumpir
y combinar instrucciones en el código.
Dimensiones de la matriz. Hay un número máximo de dimensiones que puede declarar para una matriz.
Esto limita el número de índices que puede utilizar para especificar un elemento de la matriz. Vea
dimensiones de la matriz en Visual Basic.
Longitud de la cadena. Hay un número máximo de caracteres Unicode que se pueden almacenar en una
sola cadena. Vea tipo de datos de cadena.
Longitud de la cadena de entorno. Hay un máximo de 32768 caracteres para cualquier cadena de
entorno utilizada como argumento de la línea de comandos. Se trata de una limitación en todas las
plataformas.
Vea también
Convenciones de código y estructura de programas
Convenciones de nomenclatura de Visual Basic
Características del lenguaje Visual Basic
08/01/2020 • 5 minutes to read • Edit Online
En los temas siguientes se presentan y describen los componentes esenciales de Visual Basic, un lenguaje de
programación orientado a objetos. Después de crear la interfaz de usuario para su aplicación con formularios y
controles, debe escribir el código que define el comportamiento de la aplicación. Como con cualquier lenguaje de
programación moderno, Visual Basic admite una serie de elementos de lenguaje y construcciones de
programación comunes.
Si ha programado en otros lenguajes, gran parte del material tratado en esta sección le resultará familiar. Aunque
la mayoría de las construcciones son similares a las de otros lenguajes, la naturaleza orientada a eventos de Visual
Basic presenta algunas diferencias sutiles.
Si está familiarizado con la programación, el material de esta sección sirve como introducción a los bloques de
creación básicos para escribir código. Una vez que comprenda los conceptos básicos, puede crear aplicaciones
eficaces mediante Visual Basic.
Esta sección
Matrices
Explica cómo hacer el código más compacto y eficaz mediante la declaración y utilización de matrices, que
contienen varios valores relacionados.
Inicializadores de colección
Describe los inicializadores de colección, que permiten crear una colección y rellenarla con un conjunto inicial de
valores.
Constantes y enumeraciones
Explica el almacenamiento de valores inmutables para su uso repetido, incluidos los conjuntos de valores de
constantes relacionadas.
Flujo de control
Muestra cómo regular el flujo de la ejecución del programa.
Tipos de datos
Describe qué tipos de datos puede contener un elemento de programación y cómo almacenarlos.
Elementos declarados
Abarca la programación de elementos que puede declarar, sus nombres y características, y cómo el compilador
resuelve las referencias a ellos.
Delegados
Se proporciona una introducción a los delegados y se explica cómo se usan en Visual Basic.
Enlace en tiempo de compilación y en tiempo de ejecución
Describe los enlaces, que realiza el compilador cuando se asigna un objeto a una variable de objeto, y las
diferencias entre los objetos con enlace anticipado y con enlace en tiempo de ejecución.
Tipos de error
Proporciona información general sobre los errores de sintaxis, errores en tiempo de ejecución y errores lógicos.
Eventos
Muestra cómo declarar y utilizar eventos.
Interfaces
Describe qué son las interfaces y cómo usarlas en las aplicaciones.
LINQ
Proporciona vínculos a temas que presentan características de Language-Integrated Query (LINQ) y programación.
Objetos y clases
Proporciona información general sobre objetos y clases, cómo se utilizan, las relaciones que mantienen entre sí y
las propiedades, los métodos y los eventos que exponen.
Operadores y expresiones
Describe los elementos de código que manipulan elementos que contienen valores, cómo utilizarlos de forma
eficaz y cómo combinarlos para producir nuevos valores.
Procedimientos
Describe los procedimientos Sub , Function , Property y Operator , así como temas avanzados, como
procedimientos recursivos y sobrecargados.
Instrucciones
Describe las instrucciones de declaración y ejecutables.
Cadenas
Proporciona vínculos a temas que describen los conceptos básicos sobre el uso de cadenas en Visual Basic.
Variables
Presenta las variables y describe cómo utilizarlas en Visual Basic.
XML
Proporciona vínculos a temas en los que se describe cómo usar XML en Visual Basic.
Secciones relacionadas
Colecciones
Describe algunos de los tipos de colecciones proporcionadas por .NET Framework. Muestra cómo usar colecciones
sencillas y colecciones de pares clave-valor.
Referencia del lenguaje Visual Basic
Proporciona información de referencia sobre diversos aspectos de la programación de Visual Basic.
Matrices en Visual Basic
27/11/2019 • 46 minutes to read • Edit Online
Una matriz es un conjunto de valores, que son elementosdenominados, que están relacionados lógicamente
entre sí. Por ejemplo, una matriz puede consistir en el número de alumnos de cada grado en una escuela
gramatical; cada elemento de la matriz es el número de alumnos en un solo grado. Del mismo modo, una
matriz puede constar de las calificaciones de un estudiante para una clase. cada elemento de la matriz es un
solo grado.
Es posible que las variables individuales almacenen cada uno de los elementos de datos. Por ejemplo, si
nuestra aplicación analiza las calificaciones de estudiante, podemos usar una variable independiente para la
calificación de cada estudiante, como englishGrade1 , englishGrade2 , etc. Este enfoque tiene tres limitaciones
principales:
Tenemos que saber en tiempo de diseño exactamente cuántos grados es necesario controlar.
Administrar rápidamente un gran número de calificaciones se vuelve difícil. Esto, a su vez, hace que una
aplicación tenga mucho más probabilidades de tener errores graves.
Es difícil de mantener. Cada nuevo grado que agregues requiere que la aplicación se modifique, se vuelva a
compilar y se vuelva a implementar.
Mediante el uso de una matriz, puede hacer referencia a estos valores relacionados con el mismo nombre y
usar un número denominado Índice o subíndice para identificar un elemento individual en función de su
posición en la matriz. Los índices de una matriz van de 0 a uno menos que el número total de elementos de la
matriz. Cuando se usa Visual Basic sintaxis para definir el tamaño de una matriz, se especifica su índice más
alto, no el número total de elementos de la matriz. Puede trabajar con la matriz como una unidad y la
capacidad de recorrer en iteración sus elementos le libera de tener que saber exactamente cuántos elementos
contiene en tiempo de diseño.
Veamos algunos ejemplos rápidos antes de la explicación:
' Change the size of an existing array to 16 elements and retain the current values.
ReDim Preserve numbers(15)
' Redefine the size of an existing array and reset the values.
ReDim numbers(15)
El ejemplo siguiente contiene el código Visual Basic que crea y usa la matriz:
Module SimpleArray
Public Sub Main()
' Declare an array with 7 elements.
Dim students(6) As Integer
Puede usar una cláusula New para proporcionar el tamaño de una matriz cuando se crea:
Si tiene una matriz existente, puede volver a definir su tamaño mediante la instrucción ReDim . Puede
especificar que la instrucción ReDim Mantenga los valores que se encuentran en la matriz o puede especificar
que cree una matriz vacía. El ejemplo siguiente muestra los diferentes usos de la instrucción ReDim para
modificar el tamaño de una matriz existente.
' Assign a new array size and retain the current values.
ReDim Preserve cargoWeights(20)
' Assign a new array size and retain only the first five values.
ReDim Preserve cargoWeights(4)
' Assign a new array size and discard all current element values.
ReDim cargoWeights(15)
Cuando se usa la inferencia de tipos, el tipo de la matriz viene determinado por el tipo dominante en la lista de
valores literales. El tipo dominante es el tipo al que se pueden ampliar todos los demás tipos de la matriz. Si no
se puede determinar este tipo único, el tipo dominante es el tipo único al que todos los demás tipos de la
matriz se pueden restringir. Si no se puede determinar ninguno de estos tipos únicos, el tipo dominante es
Object . Por ejemplo, si la lista de valores que se proporciona al literal de matriz contiene valores de tipo
Integer , Long y Double , la matriz resultante es de tipo Double . Dado que Integer y Long se amplían solo a
Double , Double es el tipo dominante. Para obtener más información, consulta Widening and Narrowing
Conversions.
NOTE
Solo se puede usar la inferencia de tipos para las matrices definidas como variables locales en un miembro de tipo. Si
falta una definición de tipo explícita, las matrices definidas con literales de matriz en el nivel de clase son de tipo
Object[] . Para obtener más información, vea inferencia de tipo local.
Tenga en cuenta que en el ejemplo anterior se define values como una matriz de tipo Double aunque todos
los literales de matriz sean de tipo Integer . Puede crear esta matriz porque los valores del literal de matriz
pueden ampliarse a Double valores.
También puede crear y rellenar una matriz multidimensional utilizando literales de matriz anidados. Los
literales de matriz anidados deben tener un número de dimensiones que sea coherente con la matriz
resultante. En el ejemplo siguiente se crea una matriz bidimensional de enteros utilizando literales de matriz
anidados.
Cuando se usan literales de matriz anidados para crear y rellenar una matriz, se produce un error si el número
de elementos de los literales de matriz anidados no coincide. También se produce un error si declara
explícitamente que la variable de matriz tiene un número diferente de dimensiones que los literales de matriz.
Al igual que en el caso de las matrices unidimensionales, puede confiar en la inferencia de tipos al crear una
matriz multidimensional con literales de matriz anidados. El tipo deducido es el tipo dominante para todos los
valores de todos los literales de matriz para todos los niveles de anidamiento. En el ejemplo siguiente se crea
una matriz bidimensional de tipo Double[,] a partir de valores de tipo Integer y Double .
Dim arr = {{1, 2.0}, {3, 4}, {5, 6}, {7, 8}}
Para consultar ejemplos adicionales, vea Cómo: Inicializar una variable de matriz en Visual Basic.
Module IterateArray
Public Sub Main()
Dim numbers = {10, 20, 30}
En el ejemplo siguiente se recorre en iteración una matriz multidimensional mediante una instrucción
For...Next . El método GetUpperBound tiene un parámetro que especifica la dimensión. GetUpperBound(0)
devuelve el índice más alto de la primera dimensión y GetUpperBound(1) devuelve el índice más alto de la
segunda dimensión.
Module IterateArray
Public Sub Main()
Dim numbers = {{1, 2}, {3, 4}, {5, 6}}
En el ejemplo siguiente se utiliza una para cada... Instrucción siguientepara recorrer en iteración una matriz
unidimensional y una matriz bidimensional.
Module IterateWithForEach
Public Sub Main()
' Declare and iterate through a one-dimensional array.
Dim numbers1 = {10, 20, 30}
Tamaño de la matriz
El tamaño de una matriz es el producto de las longitudes de todas sus dimensiones. Representa el número total
de elementos contenidos actualmente en la matriz. Por ejemplo, en el ejemplo siguiente se declara una matriz
bidimensional con cuatro elementos en cada dimensión. Como muestra la salida del ejemplo, el tamaño de la
matriz es 16 (o (3 + 1) * (3 + 1).
Module Example
Public Sub Main()
Dim arr(3, 3) As Integer
Console.WriteLine(arr.Length)
End Sub
End Module
' The example displays the following output:
' 16
NOTE
Esta explicación del tamaño de la matriz no se aplica a las matrices escalonadas. Para obtener información sobre las
matrices escalonadas y determinar el tamaño de una matriz escalonada, consulte la sección matrices escalonadas .
Puede encontrar el tamaño de una matriz mediante la propiedad Array.Length . Puede buscar la longitud de
cada dimensión de una matriz multidimensional mediante el método Array.GetLength.
Puede cambiar el tamaño de una variable de matriz asignando un nuevo objeto de matriz o usando la
instrucción ReDim instrucción . En el ejemplo siguiente se usa la instrucción ReDim para cambiar una matriz de
100 elementos a una matriz de elementos 51.
Module Example
Public Sub Main()
Dim arr(99) As Integer
Console.WriteLine(arr.Length)
Redim arr(50)
Console.WriteLine(arr.Length)
End Sub
End Module
' The example displays the following output:
' 100
' 51
Hay varios aspectos que se deben tener en cuenta cuando se trabaja con el tamaño de una matriz.
El tipo de matriz
Cada matriz tiene un tipo de datos, que difiere del tipo de datos de sus elementos. No existe ningún tipo de
datos para todas las matrices. En su lugar, el tipo de datos de una matriz lo determina el número de
dimensiones, o rango, de la matriz y el tipo de datos de los elementos de la matriz. Dos variables de matriz son
del mismo tipo de datos solo cuando tienen el mismo rango y sus elementos tienen el mismo tipo de datos.
Las longitudes de las dimensiones de una matriz no influyen en el tipo de datos de la matriz.
Cada matriz hereda la clase System.Array y puede declarar una variable del tipo Array , pero no puede crear
una matriz del tipo Array . Por ejemplo, aunque el código siguiente declara la variable de arr para que sea de
tipo Array y llama al método Array.CreateInstance para crear una instancia de la matriz, el tipo de la matriz
demuestra ser Object [].
Module Example
Public Sub Main()
Dim arr As Array = Array.CreateInstance(GetType(Object), 19)
Console.WriteLine(arr.Length)
Console.WriteLine(arr.GetType().Name)
End Sub
End Module
' The example displays the following output:
' 19
' Object[]
Además, la Instrucción ReDim no puede funcionar en una variable declarada de tipo Array . Por estos motivos,
y para la seguridad de tipos, es aconsejable declarar cada matriz como un tipo específico.
Puede averiguar el tipo de datos de una matriz o de sus elementos de varias maneras.
Puede llamar al método GetType en la variable para obtener un objeto Type que represente el tipo en
tiempo de ejecución de la variable. El objeto Type contiene amplia información en sus propiedades y
métodos.
Puede pasar la variable a la función TypeName para obtener un String con el nombre de tipo en tiempo de
ejecución.
En el ejemplo siguiente se llama al método GetType y a la función TypeName para determinar el tipo de una
matriz. El tipo de matriz es Byte(,) . Tenga en cuenta que la propiedad Type.BaseType también indica que el
tipo base de la matriz de bytes es la clase Array.
Module Example
Public Sub Main()
Dim bytes(9,9) As Byte
Console.WriteLine($"Type of {nameof(bytes)} array: {bytes.GetType().Name}")
Console.WriteLine($"Base class of {nameof(bytes)}: {bytes.GetType().BaseType.Name}")
Console.WriteLine()
Console.WriteLine($"Type of {nameof(bytes)} array: {TypeName(bytes)}")
End Sub
End Module
' The example displays the following output:
' Type of bytes array: Byte[,]
' Base class of bytes: Array
'
' Type of bytes array: Byte(,)
Module ReturnValuesAndParams
Public Sub Main()
Dim numbers As Integer() = GetNumbers()
ShowNumbers(numbers)
End Sub
Module Example
Public Sub Main()
Dim numbers As Integer(,) = GetNumbersMultidim()
ShowNumbersMultidim(numbers)
End Sub
Matrices escalonadas
A veces la estructura de datos de la aplicación es bidimensional pero no rectangular. Por ejemplo, puede usar
una matriz para almacenar datos sobre la temperatura alta de cada día del mes. La primera dimensión de la
matriz representa el mes, pero la segunda dimensión representa el número de días, y el número de días de un
mes no es uniforme. Una matriz escalonada, que también se denomina matriz de matrices, está diseñada para
estos escenarios. Una matriz escalonada es una matriz cuyos elementos también son matrices. Una matriz
escalonada y cada elemento de una matriz escalonada pueden tener una o más dimensiones.
En el ejemplo siguiente se utiliza una matriz de meses, donde cada elemento es una matriz de días. En el
ejemplo se usa una matriz escalonada porque los distintos meses tienen un número diferente de días. En el
ejemplo se muestra cómo crear una matriz escalonada, asignarle valores y recuperar y mostrar sus valores.
Imports System.Globalization
Module JaggedArray
Public Sub Main()
' Declare the jagged array of 12 elements. Each element is an array of Double.
Dim sales(11)() As Double
' Set each element of the sales array to a Double array of the appropriate size.
For month As Integer = 0 To 11
' The number of days in the month determines the appropriate size.
Dim daysInMonth As Integer =
DateTime.DaysInMonth(Year(Now), month + 1)
sales(month) = New Double(daysInMonth - 1) {}
Next
En el ejemplo anterior se asignan valores a la matriz escalonada en función de cada elemento mediante un
bucle For...Next . También puede asignar valores a los elementos de una matriz escalonada utilizando literales
de matriz anidados. Sin embargo, el intento de usar literales de matriz anidados (por ejemplo,
Dim valuesjagged = {{1, 2}, {2, 3, 4}} ) genera el error del compilador BC30568. Para corregir el error,
incluya los literales de matriz internos entre paréntesis. Los paréntesis fuerzan la evaluación de la expresión
literal de matriz y los valores resultantes se usan con el literal de matriz externo, como se muestra en el
ejemplo siguiente.
Module Example
Public Sub Main()
Dim values1d = { 1, 2, 3 }
Dim values2d = {{1, 2}, {2, 3}, {3, 4}}
Dim valuesjagged = {({1, 2}), ({2, 3, 4})}
End Sub
End Module
Una matriz escalonada es una matriz unidimensional cuyos elementos contienen matrices. Por lo tanto, la
propiedad Array.Length y el método Array.GetLength(0) devuelven el número de elementos de la matriz
unidimensional y Array.GetLength(1) produce una IndexOutOfRangeException porque una matriz escalonada
no es multidimensional. El número de elementos de cada submatriz se determina mediante la recuperación del
valor de la propiedad Array.Length de cada submatriz. En el ejemplo siguiente se muestra cómo determinar el
número de elementos de una matriz escalonada.
Module Example
Public Sub Main()
Dim jagged = { ({1, 2}), ({2, 3, 4}), ({5, 6}), ({7, 8, 9, 10}) }
Console.WriteLine($"The value of jagged.Length: {jagged.Length}.")
Dim total = jagged.Length
For ctr As Integer = 0 To jagged.GetUpperBound(0)
Console.WriteLine($"Element {ctr + 1} has {jagged(ctr).Length} elements.")
total += jagged(ctr).Length
Next
Console.WriteLine($"The total number of elements in the jagged array: {total}")
End Sub
End Module
' The example displays the following output:
' The value of jagged.Length: 4.
' Element 1 has 2 elements.
' Element 2 has 3 elements.
' Element 3 has 2 elements.
' Element 4 has 4 elements.
' The total number of elements in the jagged array: 15
Una matriz de longitud cero se declara con una dimensión de-1. Por ejemplo:
Puede que tenga que crear una matriz de longitud cero en las circunstancias siguientes:
Sin arriesgarse a una excepción NullReferenceException, el código debe tener acceso a los miembros de
la clase Array, como Length o Rank, o llamar a una función Visual Basic como UBound.
Para simplificar el código, no tiene que comprobar Nothing como caso especial.
El código interactúa con una interfaz de programación de aplicaciones (API) que requiere pasar una
matriz de longitud cero a uno o más procedimientos o que devuelve una matriz de longitud cero desde
uno o más procedimientos.
NOTE
En esta sección no se explica la división de una cadena única en una matriz de cadenas basada en algún delimitador. Para
obtener información sobre cómo dividir una cadena, vea el método String.Split.
Module Example
Public Sub Main()
' Create an array of 100 elements.
Dim arr(99) As Integer
' Populate the array.
Dim rnd As new Random()
For ctr = 0 To arr.GetUpperBound(0)
arr(ctr) = rnd.Next()
Next
En el ejemplo siguiente se divide una matriz de cadenas en dos matrices en función de la presencia de un
elemento cuyo valor es "Zzz", que actúa como delimitador de la matriz. Las nuevas matrices no incluyen el
elemento que contiene el delimitador.
Module Example
Public Sub Main()
Dim rnd As New Random()
Unir matrices
También puede combinar varias matrices en una sola matriz mayor. Para ello, también se usa el método
Array.Copy.
NOTE
En esta sección no se explica cómo combinar una matriz de cadenas en una sola cadena. Para obtener información sobre
cómo combinar una matriz de cadenas, vea el método String.Join.
Antes de copiar los elementos de cada matriz en la nueva matriz, primero debe asegurarse de que ha
inicializado la matriz para que sea lo suficientemente grande como para dar cabida a la nueva matriz. Hay dos
maneras de hacerlo:
Use la instrucción ReDim Preserve para expandir dinámicamente la matriz antes de agregarle nuevos
elementos. Esta es la técnica más sencilla, pero puede producir una degradación del rendimiento y un
consumo excesivo de memoria cuando se copian matrices de gran tamaño.
Calcule el número total de elementos necesarios para la nueva matriz grande y, a continuación, agregue los
elementos de cada matriz de origen a él.
En el ejemplo siguiente se usa el segundo método para agregar cuatro matrices con diez elementos cada una a
una sola matriz.
Imports System.Collections.Generic
Imports System.Threading.Tasks
Module Example
Public Sub Main()
Dim tasks As New List(Of Task(Of Integer()))
' Generate four arrays.
For ctr = 0 To 3
Dim value = ctr
tasks.Add(Task.Run(Function()
Dim arr(9) As Integer
For ndx = 0 To arr.GetUpperBound(0)
arr(ndx) = value
Next
Return arr
End Function))
Next
Task.WaitAll(tasks.ToArray())
' Compute the number of elements in all arrays.
Dim elements = 0
For Each task In tasks
elements += task.Result.Length
Next
Dim newArray(elements - 1) As Integer
Dim index = 0
For Each task In tasks
Dim n = task.Result.Length
Array.Copy(task.Result, 0, newArray, index, n)
index += n
Next
Console.WriteLine($"The new array has {newArray.Length} elements.")
End Sub
End Module
' The example displays the following output:
' The new array has 40 elements.
Puesto que en este caso las matrices de origen son pequeñas, también podemos expandir dinámicamente la
matriz a medida que se agregan los elementos de cada nueva matriz a ella. En el siguiente ejemplo se realiza
esto.
Imports System.Collections.Generic
Imports System.Threading.Tasks
Module Example
Public Sub Main()
Dim tasks As New List(Of Task(Of Integer()))
' Generate four arrays.
For ctr = 0 To 3
Dim value = ctr
tasks.Add(Task.Run(Function()
Dim arr(9) As Integer
For ndx = 0 To arr.GetUpperBound(0)
arr(ndx) = value
Next
Return arr
End Function))
Next
Task.WaitAll(tasks.ToArray())
' Dimension the target array and copy each element of each source array to it.
Dim newArray() As Integer = {}
' Define the next position to copy to in newArray.
Dim index = 0
For Each task In tasks
Dim n = Task.Result.Length
ReDim Preserve newArray(newArray.GetUpperBound(0) + n)
Array.Copy(task.Result, 0, newArray, index, n)
index += n
Next
Console.WriteLine($"The new array has {newArray.Length} elements.")
End Sub
End Module
' The example displays the following output:
' The new array has 40 elements.
Temas relacionados
T ÉRM IN O DEF IN IC IÓ N
Array Dimensions in Visual Basic Explica el rango y las dimensiones de las matrices.
Cómo: Inicializar una variable de matriz en Visual Basic Describe cómo se llenan las matrices con valores iniciales.
Cómo: Ordenar una matriz en Visual Basic Muestra cómo ordenar alfabéticamente los elementos de
una matriz.
Asignar una matriz a otra Describe las reglas y los pasos para asignar una matriz a
otra variable de matriz.
Solución de problemas de matrices Describe algunos problemas comunes que surgen al trabajar
con matrices.
Vea también
System.Array
Dim (instrucción)
ReDim (instrucción)
Inicializadores de colección (Visual Basic)
27/11/2019 • 10 minutes to read • Edit Online
Los inicializadores de colección proporcionan una sintaxis abreviada que permite crear una colección y rellenarla
con un conjunto inicial de valores. Los inicializadores de colección son útiles cuando se crea una colección a partir
de un conjunto de valores conocidos, como una lista de opciones de menú o categorías, un conjunto inicial de
valores numéricos, una lista estática de cadenas como nombres de días o meses, o ubicaciones geográficas como
una lista de estados usada para la validación.
Para más información sobre las colecciones, vea Colecciones.
Para identificar un inicializador de colección, use la palabra clave From seguida de llaves ( {} ). Esto es similar a la
sintaxis de los literales de matriz que se describe en Arrays (Matrices). En los ejemplos siguientes se muestran
varias maneras de usar inicializadores de colección para crear colecciones.
NOTE
C# también proporciona inicializadores de colección. Los inicializadores de colección de C# proporcionan la misma
funcionalidad que los inicializadores de colección de Visual Basic. Para obtener más información sobre los inicializadores de
colección de C#, vea Inicializadores de objeto y de colección.
Sintaxis
Un inicializador de colección consta de una lista de valores separados por comas que están entre llaves ( {} ),
precedidos por la palabra clave From , como se muestra en el código siguiente.
Cuando se crea una colección, como List<T> o Dictionary<TKey,TValue>, debe proporcionar el tipo de colección
antes del inicializador de colección, como se muestra en el código siguiente.
En el ejemplo de código siguiente se muestra código equivalente que no usa un inicializador de colección.
Si la colección tiene un método Add que tiene parámetros que coinciden con el constructor para el objeto
Customer , los valores de parámetro para el método Add se pueden anidar dentro de inicializadores de colección,
como se describe en la sección siguiente. Si la colección no tiene un método Add , puede crear uno como un
método de extensión. Para obtener un ejemplo de cómo crear un método Add como un método de extensión
para una colección, vea How to: Create an Add Extension Method Used by a Collection Initializer (Cómo: Crear un
método de extensión Add usado por un inicializador de colección). Para obtener un ejemplo de cómo crear una
colección personalizada que pueda usarse con un inicializador de colección, vea How to: Create a Collection Used
by a Collection Initializer (Cómo: Crear una colección usada por un inicializador de colección).
Solo se envían listas de valores anidados del primer nivel de anidamiento al método Add del tipo de colección.
Los niveles de anidamiento más profundos se tratan como literales de matriz y no habrá coincidencias de las
listas de valores anidados con el método Add de ninguna colección.
Temas relacionados
T ÍT ULO DESC RIP C IÓ N
Crear un método de extensión Add usado por un inicializador Muestra cómo crear un método de extensión denominado
de colección Add que se puede usar para rellenar una colección con los
valores de un inicializador de colección.
Crear una colección usada por un inicializador de colección Muestra cómo habilitar el uso de un inicializador de colección
mediante la inclusión de un método Add en una clase de
colección que implementa IEnumerable .
Vea también
Colecciones
Matrices
Inicializadores de objeto: Tipos con nombre y anónimos
New (operador)
Propiedades autoimplementadas
Cómo: Inicializar una variable de matriz en Visual Basic
Inferencia de tipo de variable local
Tipos anónimos
Introducción a LINQ en Visual Basic
Crear una lista de elementos
Constantes y enumeraciones en Visual Basic
27/11/2019 • 2 minutes to read • Edit Online
Las constantes son una forma de usar nombres significativos en lugar de un valor que no cambia. Las constantes
almacenan valores que, como su nombre indica, permanecen constantes durante la ejecución de una aplicación.
Puede usar constantes para proporcionar nombres descriptivos, en lugar de números, de forma que el código sea
más legible.
Las enumeraciones proporcionan una forma cómoda de trabajar con conjuntos de constantes relacionadas y
asociar valores constantes con nombres. Por ejemplo, puede declarar una enumeración para un conjunto de
constantes de tipo entero asociadas con los días de la semana y, después, usar los nombres de los días en lugar de
sus valores enteros en el código.
Esta sección
T ÉRM IN O DEF IN IC IÓ N
Información general sobre las constantes En los temas de esta sección se describen las constantes y sus
usos.
Información general sobre las enumeraciones En los temas de esta sección se describen las enumeraciones y
sus usos.
Secciones relacionadas
T ÉRM IN O DEF IN IC IÓ N
Option Infer (instrucción) Se describe la instrucción Option Infer , que permite el uso
de la inferencia de tipo de variable local en la declaración de
variables.
Option Strict (instrucción) Se describe la instrucción Option Strict , que restringe las
conversiones de tipos de datos implícitos solo a conversiones
de ampliación, no permite el enlace en tiempo de ejecución y
no permite tipos implícitos que dan como resultado un tipo
Object .
Flujo de control en Visual Basic
27/11/2019 • 2 minutes to read • Edit Online
Si un programa no se regula, procede a través de las instrucciones que contiene de principio a fin. Algunos
programas muy simples pueden escribirse únicamente con este flujo unidireccional. Pero gran parte del
rendimiento y la utilidad de un lenguaje de programación se debe a la capacidad de cambiar el orden de ejecución
mediante instrucciones de control y bucles.
Las estructuras de control permiten regular el flujo de la ejecución del programa. Mediante el uso de estructuras
de control, puede escribir Visual Basic código que toma decisiones o que repite las acciones. Otras estructuras de
control permiten garantizar la eliminación de un recurso o ejecutar una serie de instrucciones en la misma
referencia de objeto.
Esta sección
Estructuras de decisión
Describe las estructuras de control que se usan para la bifurcación.
Estructuras de bucle
Describe las estructuras de control que se usan para repetir procesos.
Estructuras de control adicionales
Describe las estructuras de control que se usan para la eliminación de recursos y el acceso a objetos.
Estructuras de control anidadas
Trata sobre las estructuras de control contenidas en otras estructuras de control.
Secciones relacionadas
Resumen de flujo de control
Proporciona vínculos a páginas de referencia del lenguaje sobre este tema.
Tipos de datos en Visual Basic
27/11/2019 • 2 minutes to read • Edit Online
El tipo de datos de un elemento de programación hace referencia al tipo de datos que puede contener y cómo
almacena los datos. Los tipos de datos se aplican a todos los valores que se pueden almacenar en la memoria
del equipo o participar en la evaluación de una expresión. Cada variable, literal, constante, enumeración,
propiedad, parámetro de procedimiento, argumento de procedimiento y valor devuelto de un procedimiento
tiene un tipo de datos.
Para ver una lista de los tipos de datos de Visual Basic, consulte Tipos de datos.
Vea también
Caracteres de tipo
Tipos de datos básicos
Tipos de datos compuestos
Generic Types in Visual Basic
Value Types and Reference Types
Conversiones de tipos en Visual Basic
Estructuras
Tuplas
Solución de problemas de tipos de datos
Tipos de datos
Uso eficiente de tipos de datos
Caracteres de tipo (Visual Basic)
27/11/2019 • 7 minutes to read • Edit Online
Además de especificar un tipo de datos en una instrucción de declaración, puede forzar el tipo de datos de
algunos elementos de programación con un carácter de tipo. El carácter de tipo debe ir inmediatamente
después del elemento, sin caracteres intermedios de ningún tipo.
El carácter de tipo no forma parte del nombre del elemento. Se puede hacer referencia a un elemento definido
con un carácter de tipo sin el carácter de tipo.
C A RÁ C T ER DE T IP O DE
IDEN T IF IC A DO R T IP O DE DATO S E JEM P LO
% Integer Dim L%
! Single Dim Q!
# Double Dim X#
No existen caracteres de tipo identificador para los tipos de datos Boolean , Byte , Char , Date , Object ,
SByte , Short , UInteger , ULong o UShort , o para cualquier tipo de datos compuesto como matrices o
estructuras.
En algunos casos, puede anexar el carácter $ a una función de Visual Basic, por ejemplo Left$ en lugar de
Left , para obtener un valor devuelto de tipo String .
En todos los casos, el carácter de tipo de identificador debe aparecer inmediatamente después del nombre del
identificador.
S Short I = 347S
I Integer J = 347I
L Long K = 347L
D Decimal X = 347D
F Single Y = 347F
R Double Z = 347R
US UShort L = 347US
UI UInteger M = 347UI
UL ULong N = 347UL
C Char Q = "."C
No existen caracteres de tipo literal para los tipos de datos Boolean , Byte , Date , Object , SByte o String ,o
para cualquier tipo de datos compuesto como matrices o estructuras.
Los literales también pueden usar los caracteres de tipo de identificador ( % , & , @ , ! , # , $ ), como pueden
ser variables, constantes y expresiones. Sin embargo, los caracteres de tipo literal ( S , I , L , D , F , R , C )
solo se pueden usar con literales.
En todos los casos, el carácter de tipo literal debe seguir inmediatamente al valor literal.
VA LO RES DE DÍGITO S
B A SE N UM ÉRIC A P REF IJO VÁ L IDO S E JEM P LO
A partir de Visual Basic 2017, puede usar el carácter de subrayado ( _ ) como separador de grupos para
mejorar la legibilidad de un literal entero. En el ejemplo siguiente se usa el carácter _ para agrupar un literal
binario en grupos de 8 bits:
Puede seguir un literal con prefijo con un carácter de tipo literal. En el ejemplo siguiente se muestra esto.
En el ejemplo anterior, counter tiene el valor decimal de-32768 y flags tiene el valor decimal de + 32768.
A partir de Visual Basic 15,5, también puede usar el carácter de subrayado ( _ ) como separador inicial entre el
prefijo y los dígitos hexadecimales, binarios o octales. Por ejemplo:
Para usar el carácter de subrayado como separador inicial, debe agregar el elemento siguiente al archivo del
proyecto de Visual Basic (*.vbproj):
<PropertyGroup>
<LangVersion>15.5</LangVersion>
</PropertyGroup>
Para obtener más información, consulte configuración de la versióndel lenguaje Visual Basic .
Vea también
Tipos de datos
Tipos de datos básicos
Value Types and Reference Types
Conversiones de tipos en Visual Basic
Solución de problemas de tipos de datos
Declaración de variables
Tipos de datos
Tipos de datos básicos (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Visual Basic proporciona un conjunto de tipos de datos predefinidos, que puede usar para muchos de los
elementos de programación. En esta sección se describen estos tipos y cómo usarlos.
NOTE
Cada tipo de datos elemental de Visual Basic es compatible con una estructura o una clase que se encuentra en el espacio
de nombres System. El compilador usa cada palabra clave de tipo de datos como alias para la clase o estructura subyacente.
Por ejemplo, la declaración de una variable mediante la palabra reservada Byte es igual que la declaración mediante el
nombre completo de la estructura System.Byte.
Esta sección
Tipos de datos numéricos
Describe los tipos numéricos enteros y no enteros.
Tipos de datos de caracteres
Describe los tipos Char y String .
Tipos de datos varios
Describe los tipos Boolean , Date y Object .
Secciones relacionadas
Tipos de datos
Presenta los tipos de datos Visual Basic y describe cómo usarlos.
Tipos de datos
Proporciona información general sobre los tipos de datos básicos proporcionados por Visual Basic.
Tipos de datos numéricos (Visual Basic)
27/11/2019 • 8 minutes to read • Edit Online
Visual Basic proporciona varios tipos de datos numéricos para administrar números en varias representaciones.
Los tipos enteros representan solo números enteros (positivos, negativos y cero), y los tipos no enteros
representan números con valores enteros y fraccionarios.
Para ver una tabla que muestra una comparación en paralelo de los tipos de datos Visual Basic, vea tipos de datos.
Los números de punto flotante ( Single y Double ) tienen intervalos mayores que Decimal números, pero pueden
estar sujetos a errores de redondeo. Los tipos de punto flotante admiten menos dígitos significativos que Decimal
pero pueden representar valores de mayor magnitud.
Los valores de número no integral se pueden expresar como mmmEeee, en los que MMM es la mantisa (los
dígitos significativos) y EEE es el exponente (una potencia de 10). Los valores positivos más altos de los tipos no
integrales son 7,9228162514264337593543950335 E + 28 para Decimal , 3.4028235 E + 38 para Single y
1.79769313486231570 E + 308 para Double .
Rendimiento
Double es el más eficaz de los tipos de datos fraccionarios, ya que los procesadores de las plataformas actuales
realizan operaciones de punto flotante de doble precisión. Sin embargo, las operaciones con Double no son tan
rápidas como con los tipos enteros como Integer .
Pequeñas magnitudes
En el caso de los números con la menor magnitud posible (más cercana a 0), Double variables pueden contener
números tan pequeños como-4.94065645841246544 E-324 para los valores negativos y 4.94065645841246544
E-324 para los valores positivos.
Números fraccionarios pequeños
Si no necesita el intervalo completo del tipo de datos Double , puede usar el tipo de datos Single , que puede
contener números de punto flotante de-3.4028235 E + 38 a 3.4028235 E + 38. Las magnitudes más pequeñas de
las variables de Single son-401298e E-45 para los valores negativos y 401298e E-45 para los valores positivos.
Si tiene un número muy grande de variables que contienen números de punto flotante pequeños, a veces el
Common Language Runtime puede almacenar las variables Single de forma más eficaz y ahorrar consumo de
memoria.
Vea también
Tipos de datos básicos
Tipos de datos de caracteres
Tipos de datos varios
Solución de problemas de tipos de datos
Llamar a una función de Windows que adopta tipos sin signo
Tipos de datos de caracteres (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Visual Basic proporciona tipos de datos de caracteres para tratar con caracteres imprimibles y que se pueda
mostrar. Aunque ambos tratan con caracteres Unicode, Char contiene un solo carácter, mientras que String
contiene un número indefinido de caracteres.
Para obtener una tabla en la que se muestra una comparación en paralelo de los tipos de datos Visual Basic, vea
tipos de datos.
Char (tipo)
El tipo de datos Char es un único carácter Unicode de dos bytes (16 bits). Si una variable siempre almacena
exactamente un carácter, declárelo como Char . Por ejemplo:
Cada valor posible de una variable Char o String es un punto de código, o código de carácter, en el juego de
caracteres Unicode. Los caracteres Unicode incluyen el juego de caracteres ASCII básico, otras letras, acentos,
símbolos de moneda, fracciones, diacríticos y símbolos matemáticos y técnicos.
NOTE
El juego de caracteres Unicode reserva los puntos de código D800 a DFFF (de 55296 a 55551 decimal) para los pares
suplentes, que requieren valores de 2 16 bits para representar un solo punto de código. Una variable Char no puede
contener un par suplente y una String usa dos posiciones para contener este tipo de par.
Tipo de cadena
El tipo de datos String es una secuencia de cero o más caracteres Unicode de dos bytes (16 bits). Si una variable
puede contener un número indefinido de caracteres, declárelo como String . Por ejemplo:
Vea también
Tipos de datos básicos
Tipos de datos compuestos
Generic Types in Visual Basic
Value Types and Reference Types
Conversiones de tipos en Visual Basic
Solución de problemas de tipos de datos
Caracteres de tipo
Tipos de datos variados (Visual Basic)
27/11/2019 • 3 minutes to read • Edit Online
Visual Basic proporciona varios tipos de datos que no están orientados a números o caracteres. En su lugar, se
ocupan de los datos especializados, como los valores sí/no, los valores de fecha y hora y las direcciones de objeto.
Para ver una tabla que muestra una comparación en paralelo de los tipos de datos Visual Basic, vea tipos de datos.
Tipo booleano
El tipo de datos Boolean es un valor sin signo que se interpreta como True o False . El ancho de los datos
depende de la plataforma de implementación. Si una variable solo puede contener valores de dos Estados, como
true/false, yes/no o ON/OFF, declárela como Boolean .
Tipo de fecha
El tipo de datos Date es un valor de 64 bits que contiene información de fecha y hora. Cada incremento representa
100 nanosegundos de tiempo transcurrido desde el inicio (12:00 A.M.) del 1 de enero del año 1 del calendario
gregoriano. Si una variable puede contener un valor de fecha, un valor de hora o ambos, declárelo como Date .
Tipo de objeto
El tipo de datos Object es una dirección de 32 bits que apunta a una instancia de objeto dentro de la aplicación o
en alguna otra aplicación. Una variable de Object puede hacer referencia a cualquier objeto que la aplicación
reconozca o a datos de cualquier tipo de datos. Esto incluye los dos tipos de valor, como Integer , Boolean y las
instancias de la estructura, y los tipos de referencia, que son instancias de los objetos creados a partir de clases
como String y Form, y las instancias de matriz.
Si una variable almacena un puntero a una instancia de una clase que no conoce en tiempo de compilación, o si
puede apuntar a datos de varios tipos de datos, declárelo como Object .
La ventaja del tipo de datos Object es que se puede usar para almacenar datos de cualquier tipo de datos. El
inconveniente es que se incurre en operaciones adicionales que tardan más tiempo de ejecución y hacen que la
aplicación funcione más lentamente. Si usa una variable de Object para los tipos de valor, incurrirá en la
conversión boxing y la conversión unboxing. Si se usa para los tipos de referencia, se incurre en el enlace en
tiempo de ejecución.
Vea también
Caracteres de tipo
Tipos de datos básicos
Tipos de datos numéricos
Tipos de datos de caracteres
Solución de problemas de tipos de datos
Enlace en tiempo de compilación y en tiempo de ejecución
Tipos de datos compuestos (Visual Basic)
27/11/2019 • 5 minutes to read • Edit Online
Además de los tipos de datos elementales Visual Basic proporciona, también puede ensamblar elementos de tipos
diferentes para crear tipos de datos compuestos como estructuras, matrices y clases. Puede crear tipos de datos
compuestos a partir de tipos elementales y de otros tipos compuestos. Por ejemplo, puede definir una matriz de
elementos de estructura o una estructura con miembros de matriz.
Tipos de datos
Un tipo compuesto es diferente del tipo de datos de cualquiera de sus componentes. Por ejemplo, una matriz de
elementos Integer no es del tipo de datos Integer .
Normalmente, un tipo de datos de matriz se representa mediante el tipo de elemento, paréntesis y comas según
sea necesario. Por ejemplo, una matriz unidimensional de elementos String se representa como String() y una
matriz bidimensional de elementos Boolean se representa como Boolean(,) .
Tipos de estructura
No hay ningún tipo de datos único que incluya todas las estructuras. En su lugar, cada definición de una estructura
representa un tipo de datos único, incluso si dos estructuras definen elementos idénticos en el mismo orden. Sin
embargo, si crea dos o más instancias de la misma estructura, Visual Basic considera que son del mismo tipo de
datos.
Tuplas
Una tupla es una estructura ligera que contiene dos o más campos cuyos tipos están predefinidos. Las tuplas se
admiten a partir de Visual Basic 2017. Las tuplas se suelen usar para devolver varios valores de una sola llamada
al método sin tener que pasar argumentos por referencia o empaquetar los campos devueltos en una estructura o
clase más pesada. Vea el tema sobre tuplas para obtener más información sobre las tuplas.
Tipos de matriz
No hay ningún tipo de datos único que comprenda todas las matrices. El tipo de datos de una instancia
determinada de una matriz viene determinado por lo siguiente:
El hecho de ser una matriz
Rango (número de dimensiones) de la matriz.
El tipo de elemento de la matriz.
En concreto, la longitud de una dimensión determinada no forma parte del tipo de datos de la instancia. En el
ejemplo siguiente se ilustra esto.
En el ejemplo anterior, las variables de matriz arrayA y arrayB se consideran del mismo tipo de datos, Byte() ,
aunque se hayan inicializado a longitudes diferentes. Las variables arrayB y arrayC no son del mismo tipo
porque sus tipos de elemento son diferentes. Las variables arrayC y arrayD no son del mismo tipo porque sus
rangos son diferentes. Las variables arrayD y arrayE tienen el mismo tipo, Short(,) , porque sus rangos y tipos
de elemento son los mismos, aunque aún no se ha inicializado arrayD .
Para obtener más información sobre las matrices, vea matrices.
Tipos de clase
No hay ningún tipo de datos único que incluya todas las clases. Aunque una clase puede heredar de otra clase,
cada una es un tipo de datos independiente. Varias instancias de la misma clase tienen el mismo tipo de datos. Si
asigna una variable de instancia de clase a otra, y no solo tienen el mismo tipo de datos, apuntan a la misma
instancia de clase en la memoria.
Para obtener más información sobre las clases, vea objetos y clases.
Vea también
Tipos de datos
Tipos de datos básicos
Generic Types in Visual Basic
Value Types and Reference Types
Conversiones de tipos en Visual Basic
Estructuras
Solución de problemas de tipos de datos
Contener más de un valor en una variable
Cómo: Contener más de un valor en una variable
(Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Una variable contiene más de un valor si se declara como un tipo de datos compuesto.
Los tipos de datos compuestos incluyen estructuras, matrices y clases. Una variable de un tipo de datos compuesto
puede contener una combinación de tipos de datos básicos y otros tipos compuestos. Las estructuras y las clases
pueden contener código y datos.
Vea también
Tipos de datos
Caracteres de tipo
Tipos de datos compuestos
Estructuras
Matrices
Objetos y clases
Value Types and Reference Types
Tipos genéricos en Visual Basic (Visual Basic)
27/11/2019 • 14 minutes to read • Edit Online
Un tipo genérico es un elemento de programación único que se adapta para ejecutar la misma funcionalidad
para distintos tipos de datos. Cuando se define una clase o un procedimiento genérico, no es necesario definir
una versión independiente para cada tipo de datos para el que quiera ejecutar esa funcionalidad.
Una analogía es un juego de destornilladores con puntas extraíbles. Inspeccione el tornillo que quiere roscar y
seleccione la punta adecuada (plana, de cruz o de estrella). Una vez insertada la punta correcta en el mango del
destornillador, realiza la misma función exacta con el destornillador, es decir, roscar el tornillo.
Al definir un tipo genérico, lo puede parametrizar con uno o más tipos de datos. Esto permite que el código que
los usa se adapte los tipos de datos a sus requisitos. Su código puede declarar varios elementos de
programación diferentes a partir del elemento genérico y cada uno de ellos actúa en un conjunto distinto de
tipos de datos. Pero todos los elementos declarados funcionan con la misma lógica, independientemente de los
tipos de datos que usen.
Por ejemplo, puede que quiera crear y usar una clase de cola que funcione en un tipo de datos concreto, como
String . Puede declarar esta clase desde System.Collections.Generic.Queue<T>, como se muestra en el
ejemplo siguiente.
Ahora puede usar stringQ para trabajar exclusivamente con valores String . Dado que stringQ es específico
de String en lugar de generalizarse para los valores Object , no dispone de enlace en tiempo de ejecución ni
conversión de tipos. Esto ahorra tiempo de ejecución y reduce los errores de tiempo de ejecución.
Para obtener más información sobre el uso de un tipo genérico, vea How to: Use a Generic Class.
En el esquema anterior, t es un parámetro de tipo, es decir, un marcador de posición para un tipo de datos
proporcionado al declarar la clase. En otro lugar del código, puede declarar distintas versiones de classHolder
proporcionando diversos tipos de datos para t . En el ejemplo siguiente se muestran dos declaraciones de
este tipo.
Las instrucciones anteriores declaran clases construidas, en las que un tipo específico reemplaza el parámetro
de tipo. Este reemplazo se propaga por todo el código en la clase construida. En el ejemplo siguiente se
muestra el aspecto del procedimiento processNewItem en integerClass .
Para obtener un ejemplo más completo, vea Cómo: definir una clase que pueda proporcionar la misma
funcionalidad en tipos de datos diferentes.
Restricciones
Aunque el código de una definición de tipo genérico debe ser tan independiente del tipo como sea posible,
puede que tenga que requerir una funcionalidad concreta de cualquier tipo de datos proporcionado a su tipo
genérico. Por ejemplo, si desea comparar dos elementos con el fin de ordenarlos o intercalarlos, su tipo de
datos debe implementar la interfaz IComparable . Para imponer este requisito, puede agregar una restricción al
parámetro de tipo.
Ejemplo de una restricción
En el ejemplo siguiente se muestra un esquema de definición de una clase con una restricción que requiere que
el argumento de tipo implemente IComparable.
Si el código subsiguiente intenta construir una clase a partir de itemManager proporcionando un tipo que no
implemente IComparable, el compilador indicará un error.
Tipos de restricciones
La restricción puede especificar los requisitos siguientes en cualquier combinación:
El argumento de tipo debe implementar una o varias interfaces
El argumento de tipo debe ser del tipo de una clase como máximo, o bien heredarse a lo sumo de una
clase.
El argumento de tipo debe exponer un constructor sin parámetros accesible para el código que crea
objetos a partir de él.
El argumento de tipo debe ser un tipo de referenciao un tipo de valor.
Si necesita imponer más que un requisito, use una lista de restricciones separadas por comas entre llaves ( { }
). Para requerir un constructor accesible, incluya la palabra clave New Operator en la lista. Para requerir un tipo
de referencia, incluya la palabra clave Class ; para requerir un tipo de valor, incluya la palabra clave Structure
.
Para más información sobre las restricciones, vea Type List.
Ejemplo de varias restricciones
En el ejemplo siguiente se muestra un esquema de definición de una clase genérica con una lista de
restricciones en el parámetro de tipo. En el código que crea una instancia de esta clase, el argumento de tipo
debe implementar ambas interfaces IComparable y IDisposable , ser un tipo de referencia y exponer un
constructor sin parámetros accesible.
Condiciones importantes
Los tipos genéricos introducen y usan las condiciones siguientes:
Tipo genérico. Definición de clase, estructura, interfaz, procedimiento o delegado para la que
proporciona al menos un tipo de datos cuando la declara.
Parámetro de tipo. En una definición de tipo genérico, marcador de posición para un tipo de datos que
proporciona al declarar el tipo.
Argumento de tipo. Tipo de datos específico que reemplaza un parámetro de tipo cuando declara un
tipo construido a partir de un tipo genérico.
Restricción. Condición en un parámetro de tipo que restringe el argumento de tipo puede proporcionar
para este. Una restricción puede requerir que el argumento de tipo implemente una interfaz
determinada, sea de una clase concreta o se herede de esta, tenga un constructor sin parámetros
accesible o sea un tipo de referencia o un tipo de valor. Puede combinar estas restricciones, pero puede
especificar una clase como máximo.
Tipo construido. Clase, estructura, interfaz, procedimiento o delegado que se declara a partir de un tipo
genérico proporcionando argumentos de tipo para sus parámetros de tipo.
Vea también
Tipos de datos
Caracteres de tipo
Value Types and Reference Types
Conversiones de tipos en Visual Basic
Solución de problemas de tipos de datos
Tipos de datos
Of
As
Object Data Type
Covarianza y contravarianza
Iteradores
Cómo: Definir una clase que pueda proporcionar la
misma funcionalidad en tipos de datos diferentes
(Visual Basic)
27/11/2019 • 7 minutes to read • Edit Online
Puede definir una clase desde la que se puedan crear objetos que proporcionen una funcionalidad idéntica en
tipos de datos diferentes. Para ello, especifique uno o más parámetros de tipo en la definición. Posteriormente, la
clase puede servir de plantilla para los objetos que usan distintos tipos de datos. Una clase definida de esta
manera se denomina clase genérica.
La ventaja de definir una clase genérica es que se define una sola vez y, después, el código puede usarla para crear
muchos objetos que emplean una gran variedad de tipos de datos. El resultado es rendimiento mayor que al
definir la clase con el tipo Object .
Además de clases, también puede definir y usar estructuras genéricas, interfaces, procedimientos y delegados.
Para definir una clase con un parámetro de tipo
1. Defina la clase de la manera normal.
2. Agregue (Of typeparameter ) inmediatamente después del nombre de clase para especificar un
parámetro de tipo.
3. Si tiene más de un parámetro de tipo, realice una lista separada por comas entre paréntesis. No repita la
palabra clave Of .
4. Si el código realiza operaciones en un parámetro de tipo distintas de la asignación simple, siga ese
parámetro de tipo con una cláusula As para agregar una o más restricciones. Una restricción garantiza que
el tipo proporcionado para ese parámetro de tipo satisfaga un requisito como el siguiente:
Admitir una operación, como > , que realice el código.
Admita a un miembro, como un método, al que accede el código.
Exponer un constructor sin parámetros.
Si no especifica ninguna restricción, las únicas operaciones y miembros que el código podrá usar son las
que admite el Object Data Type. Para obtener más información, consulta Type List.
5. Identifique cada miembro de clase que deba declararse con un tipo suministrado y declárelo As
typeparameter . Esto se aplica al almacenamiento interno, los parámetros de procedimiento y los valores
devueltos.
6. Asegúrese de que el código solo usa operaciones y métodos admitidos por cualquier tipo de datos que
pueda proporcionar a itemType .
En el ejemplo siguiente se define una clase que administra una lista muy simple. Contiene la lista de la
matriz interna items y el código que la usa puede declarar el tipo de datos de los elementos de la lista. Un
constructor con parámetros permite que el código de uso establezca el límite superior de items y el
constructor sin parámetros lo establece en 9 (para un total de 10 elementos).
Public Class simpleList(Of itemType)
Private items() As itemType
Private top As Integer
Private nextp As Integer
Public Sub New()
Me.New(9)
End Sub
Public Sub New(ByVal t As Integer)
MyBase.New()
items = New itemType(t) {}
top = t
nextp = 0
End Sub
Public Sub add(ByVal i As itemType)
insert(i, nextp)
End Sub
Public Sub insert(ByVal i As itemType, ByVal p As Integer)
If p > nextp OrElse p < 0 Then
Throw New System.ArgumentOutOfRangeException("p",
" less than 0 or beyond next available list position")
ElseIf nextp > top Then
Throw New System.ArgumentException("No room to insert at ",
"p")
ElseIf p < nextp Then
For j As Integer = nextp To p + 1 Step -1
items(j) = items(j - 1)
Next j
End If
items(p) = i
nextp += 1
End Sub
Public Sub remove(ByVal p As Integer)
If p >= nextp OrElse p < 0 Then
Throw New System.ArgumentOutOfRangeException("p",
" less than 0 or beyond last list item")
ElseIf nextp = 0 Then
Throw New System.ArgumentException("List empty; cannot remove ",
"p")
ElseIf p < nextp - 1 Then
For j As Integer = p To nextp - 2
items(j) = items(j + 1)
Next j
End If
nextp -= 1
End Sub
Public ReadOnly Property listLength() As Integer
Get
Return nextp
End Get
End Property
Public ReadOnly Property listItem(ByVal p As Integer) As itemType
Get
If p >= nextp OrElse p < 0 Then
Throw New System.ArgumentOutOfRangeException("p",
" less than 0 or beyond last list item")
End If
Return items(p)
End Get
End Property
End Class
Puede declarar una clase de simpleList para que contenga una lista de valores Integer , otra para que
contenga una lista de valores String y otra para que contenga valores Date . Excepto para el tipo de datos
de los miembros de la lista, los objetos creados a partir de todas estas clases se comportan exactamente
igual.
El argumento de tipo que el código que lo usa proporciona a itemType puede ser un tipo intrínseco como
Boolean o Double , una estructura, una enumeración o cualquier tipo de clase, incluida una que defina la
aplicación.
Puede probar la clase simpleList con el siguiente código.
Vea también
Tipos de datos
Generic Types in Visual Basic
Independencia del lenguaje y componentes independientes del lenguaje
Of
Lista de tipos
Utilizar una clase genérica
Object Data Type
Cómo: Usar clases genéricas (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Las clases que toman parámetros de tipo se denominan clases genéricas. Si usa una clase genérica, puede
generar una clase construida a partir de ella proporcionando un argumento de tipo para cada uno de estos
parámetros. Después, puede declarar una variable del tipo de clase construida, crear una instancia de la clase
construida y asignarla a esa variable.
Además de clases, también puede definir y usar estructuras genéricas, interfaces, procedimientos y delegados.
En el procedimiento siguiente se toma una clase genérica definida en el .NET Framework y se crea una instancia a
partir de ella.
Para usar una clase que toma un parámetro de tipo
1. Al principio del archivo de código fuente, incluya una instrucción Imports (espacio de nombres de .net y
tipo) para importar el espacio de nombres System.Collections.Generic. Esto le permite hacer referencia a la
clase System.Collections.Generic.Queue<T> sin tener que usar su nombre completo para diferenciarla de
otras clases queue, como System.Collections.Queue.
2. Cree el objeto de la manera normal, pero agregue (Of type) inmediatamente después del nombre de
clase.
En el ejemplo siguiente se usa la misma clase (System.Collections.Generic.Queue<T>) para crear dos
objetos queue que contienen elementos de distintos tipos de datos. Agrega elementos al final de cada cola
y, después, quita y muestra los elementos de la parte delantera de cada cola.
Vea también
Tipos de datos
Generic Types in Visual Basic
Independencia del lenguaje y componentes independientes del lenguaje
Of
Imports (instrucción), espacio de nombres y tipo .NET
Definir una clase que pueda proporcionar la misma funcionalidad en tipos de datos diferentes
Iteradores
Procedimientos genéricos en Visual Basic
27/11/2019 • 5 minutes to read • Edit Online
Un procedimiento genérico, también denominado método genérico, es un procedimiento definido con al menos
un parámetro de tipo. Esto permite que el código de llamada adapte los tipos de datos a sus requisitos cada vez
que llama al procedimiento.
Un procedimiento no es genérico simplemente en virtud de definirse dentro de una clase genérica o en una
estructura genérica. Para que sea genérico, el procedimiento debe tomar al menos un parámetro de tipo, además
de los parámetros normales que puede llevar a cabo. Una clase o estructura genérica puede contener
procedimientos no genéricos, y una clase, estructura o módulo no genéricos pueden contener procedimientos
genéricos.
Un procedimiento genérico puede usar sus parámetros de tipo en su lista de parámetros normal, en su tipo de
valor devuelto si tiene uno, y en su código de procedimiento.
Inferencia de tipos
Puede llamar a un procedimiento genérico sin proporcionar ningún argumento de tipo. Si se llama de esta
manera, el compilador intenta determinar los tipos de datos adecuados que se van a pasar a los argumentos de
tipo del procedimiento. Esto se denomina inferencia de tipos. En el código siguiente se muestra una llamada en la
que el compilador deduce que debe pasar el tipo String al parámetro de tipo t .
Si el compilador no puede inferir los argumentos de tipo del contexto de la llamada, notifica un error. Una posible
causa de este error es que la clasificación de una matriz no coincide. Por ejemplo, supongamos que define un
parámetro normal como una matriz de un parámetro de tipo. Si llama al procedimiento genérico que proporciona
una matriz de un rango diferente (número de dimensiones), la incoherencia provocará un error en la inferencia de
tipos. En el código siguiente se muestra una llamada en la que se pasa una matriz bidimensional a un
procedimiento que espera una matriz unidimensional.
Solo se puede invocar la inferencia de tipos si se omiten todos los argumentos de tipo. Si proporciona un
argumento de tipo, debe proporcionarlos todos.
La inferencia de tipos solo se admite para los procedimientos genéricos. No se puede invocar la inferencia de tipos
en clases, estructuras, interfaces o delegados genéricos.
Ejemplo
Descripción
En el ejemplo siguiente se define un procedimiento genérico Function para buscar un elemento determinado en
una matriz. Define un parámetro de tipo y lo usa para construir los dos parámetros en la lista de parámetros.
Código
Return -1
End Function
Comentarios
En el ejemplo anterior se requiere la capacidad de comparar searchValue con cada elemento de searchArray .
Para garantizar esta capacidad, restringe el parámetro de tipo T para implementar la interfaz de
IComparable<T>. El código utiliza el método CompareTo en lugar del operador = , porque no hay ninguna
garantía de que un argumento de tipo proporcionado para T admita el operador = .
Puede probar el procedimiento findElement con el código siguiente.
Vea también
Generic Types in Visual Basic
Definir una clase que pueda proporcionar la misma funcionalidad en tipos de datos diferentes
Utilizar una clase genérica
Procedimientos
Argumentos y parámetros de procedimiento
Lista de tipos
Lista de parámetros
Tipos que admiten valores null (Visual Basic)
27/03/2020 • 11 minutes to read • Edit Online
A veces se trabaja con un tipo de valor que no tiene un valor definido en determinadas circunstancias. Por
ejemplo, un campo de una base de datos podría tener que distinguir entre tener un valor asignado que sea
significativo y no tener un valor asignado. Los tipos de valor se pueden extender para tomar sus valores normales
o un valor nulo. Dicha extensión se denomina tipo que acepta valores NULL.
Cada tipo de valor que acepta Nullable<T> valores NULL se construye a partir de la estructura genérica.
Considere una base de datos que realiza un seguimiento de las actividades relacionadas con el trabajo. En el
ejemplo siguiente Boolean se construye un tipo que acepta valores NULL y se declara una variable de ese tipo.
Puede escribir la declaración de tres maneras:
La ridesBusToWork variable puede contener True un valor False de , un valor de , o ningún valor en absoluto. Su
valor predeterminado inicial no es ningún valor en absoluto, lo que en este caso podría significar que la
información aún no se ha obtenido para esta persona. Por el False contrario, podría significar que la
información se ha obtenido y la persona no viaja en el autobús al trabajo.
Puede declarar variables y propiedades con tipos de valor que aceptan valores NULL y puede declarar una matriz
con elementos de un tipo de valor que acepta valores NULL. Puede declarar procedimientos con tipos de valor
que aceptan valores NULL Function como parámetros y puede devolver un tipo de valor que acepta valores
NULL de un procedimiento.
No se puede construir un tipo que acepta valores String NULL en un tipo de referencia como una matriz, una o
una clase. El tipo subyacente debe ser un tipo de valor. Para obtener más información, vea Tipos de valor y tiposde
referencia .
Valores predeterminados
Cuando se declara una variable con un HasValue tipo de valor False que acepta valores NULL, su propiedad tiene
un valor predeterminado de . Esto significa que, de forma predeterminada, la variable no tiene ningún valor
definido, en lugar del valor predeterminado de su tipo de valor subyacente. En el ejemplo siguiente, la variable
numberOfChildren inicialmente no tiene ningún Integer valor definido, aunque el valor predeterminado del tipo
es 0.
Un valor nulo es útil para indicar un valor indefinido o desconocido. Si numberOfChildren se hubiera Integer
declarado como , no habría ningún valor que pudiera indicar que la información no está disponible actualmente.
Almacenar valores
Almacenar un valor en una variable o propiedad de un tipo de valor que acepta valores NULL de la manera típica.
En el ejemplo siguiente se numberOfChildren asigna un valor a la variable declarada en el ejemplo anterior.
numberOfChildren = 2
Si una variable o propiedad de un tipo de valor que acepta valores NULL contiene un valor definido, puede hacer
que vuelva a su estado inicial de no tener un valor asignado. Para ello, establezca la variable Nothing o propiedad
en , como se muestra en el ejemplo siguiente.
numberOfChildren = Nothing
NOTE
Aunque puede Nothing asignar a una variable de un tipo de Nothing valor que acepta valores NULL, no puede probarlo
mediante el signo igual. La comparación que someVar = Nothing utiliza el signo Nothing igual, , siempre se evalúa como .
Puede probar la propiedad HasValue de False la variable para Is IsNot , o probar mediante el operador or.
Recuperación de valores
Para recuperar el valor de una variable de un tipo HasValue de valor que acepta valores NULL, primero debe
probar su propiedad para confirmar que tiene un valor. Si intenta leer el HasValue valor False cuando es ,
InvalidOperationException Visual Basic produce una excepción. En el ejemplo siguiente se muestra
numberOfChildren la forma recomendada de leer la variable de los ejemplos anteriores.
If numberOfChildren.HasValue Then
MsgBox("There are " & CStr(numberOfChildren) & " children.")
Else
MsgBox("It is not known how many children there are.")
End If
B1 B2 B1 Y B2 B1 O B2
Cuando el valor de una Nothing variable o true expresión false booleana es , no es ni . Considere el ejemplo
siguiente.
En este b1 And b2 ejemplo, Nothing se evalúa como . Como resultado, Else la cláusula se If ejecuta en cada
instrucción y la salida es la siguiente:
Expression is not true
NOTE
AndAlso y OrElse , que utilizan la evaluación de cortocircuito, deben evaluar Nothing sus segundos operandos cuando
el primero se evalúa como .
Propagación
Si uno o ambos de los operandos de una operación aritmética, de comparación, de desplazamiento o de tipo es
un tipo de valor que acepta valores NULL, el resultado de la operación también es un tipo de valor que acepta
valores NULL. Si ambos operandos tienen Nothing valores que no lo son, la operación se realiza en los valores
subyacentes de los operandos, como si ninguno de los dos fuera un tipo de valor que acepta valores NULL. En el
ejemplo siguiente, las variables compare1 y sum1 se escriben implícitamente. Si descansa el puntero del mouse
sobre ellos, verá que el compilador deduce tipos de valor que aceptan valores NULL para ambos.
' Variable n is a nullable type, but both m and n have proper values.
Dim m As Integer = 3
Dim n? As Integer = 2
' Because the values of n, compare2, and sum2 are all Nothing, the
' following line displays: 3 * <null> * <null> * <null>
Console.WriteLine($"{m} * {If(n, "<null>")} * {If(sum2, "<null>")} * {If(compare2, "<null>")}")
Vea también
InvalidOperationException
HasValue
Tipos de datos
Tipos de valor y tipos de referencia
Solución de problemas de los tipos de datos
Rellenar conjuntos de datos mediante TableAdapters
Operador If
Inferencia de tipo de variable local
Operador Is
Operador IsNot
Tipos de valor que aceptan valores NULL (C-)
Tipos de valor y tipos de referencia
23/10/2019 • 5 minutes to read • Edit Online
Hay dos tipos de tipos en Visual Basic: tipos de referencia y tipos de valor. Las variables de tipos de referencia
almacenan referencias en sus datos (objetos), mientras que las variables de tipos de valor contienen
directamente los datos. Con los tipos de referencia, dos variables pueden hacer referencia al mismo objeto y,
por lo tanto, las operaciones en una variable pueden afectar al objeto al que hace referencia la otra variable.
Con los tipos de valor, cada variable tiene su propia copia de los datos y no es posible que las operaciones en
una variable afecten a la otra (excepto en el caso del modificador ByRef en parámetros).
Tipos de valor
Un tipo de datos es un tipo de valor si contiene los datos dentro de su propia asignación de memoria. Entre los
tipos de valor se incluyen los siguientes:
Todos los tipos de datos numéricos
Boolean , Char y Date
Cada estructura es un tipo de valor, incluso si contiene miembros de tipo de referencia. Por esta razón, las
estructuras .NET Framework implementan tipos de valor como Char y Integer .
Puede declarar un tipo de valor mediante la palabra clave Reserved, por ejemplo, Decimal . También puede usar
la palabra clave New para inicializar un tipo de valor. Esto es especialmente útil si el tipo tiene un constructor
que toma parámetros. Un ejemplo de esto es el constructor de Decimal(Int32, Int32, Int32, Boolean, Byte), que
crea un nuevo valor de Decimal a partir de los elementos proporcionados.
Tipos de referencia
Un tipo de referencia almacena una referencia a sus datos. Entre los tipos de referencia se incluyen los
siguientes:
String
Vea también
Tipos de valor que aceptan valores NULL
Conversiones de tipos en Visual Basic
Structure (instrucción)
Uso eficiente de tipos de datos
Tipo de objeto de datos
Tipos de datos
Conversiones de tipos en Visual Basic
27/11/2019 • 2 minutes to read • Edit Online
El proceso de cambiar un valor de un tipo de datos a otro se denomina conversión. Las conversiones son de
ampliación o de restricción, en función de las capacidades de datos de los tipos implicados. También son
implícitas o explícitas, dependiendo de la sintaxis del código fuente.
Esta sección
Conversiones de ampliación y de restricción
Explica las conversiones clasificadas por si el tipo de destino puede contener los datos.
Conversiones implícitas y explícitas
Describe las conversiones clasificadas por si Visual Basic las realiza automáticamente.
Conversiones entre cadenas y otros tipos
Muestra la conversión entre cadenas y valores numéricos, de Boolean o de fecha y hora.
Cómo: convertir un objeto en otro tipo en Visual Basic
Muestra cómo convertir una variable de Object en cualquier otro tipo de datos.
Conversiones de matriz
Le guía por el proceso de conversión entre matrices de tipos de datos diferentes.
Secciones relacionadas
Tipos de datos
Presenta los tipos de datos Visual Basic y describe cómo usarlos.
Tipos de datos
Enumera los tipos de datos básicos proporcionados por Visual Basic.
Solución de problemas de tipos de datos
Describe algunos problemas comunes que pueden surgir al trabajar con tipos de datos.
Conversiones de ampliación y de restricción (Visual
Basic)
27/11/2019 • 9 minutes to read • Edit Online
Una consideración importante con la conversión de tipos es si el resultado de la conversión está dentro del
intervalo del tipo de datos de destino.
Una conversión de ampliación cambia un valor a un tipo de datos que puede permitir cualquier valor posible de
los datos originales. Las conversiones de ampliación conservan el valor de origen, pero pueden cambiar su
representación. Esto sucede si se convierte de un tipo entero a Decimal , o de Char a String .
Una conversión de restricción cambia un valor a un tipo de datos que no pueda mantener algunos de los
valores posibles. Por ejemplo, un valor fraccionario se redondea cuando se convierte en un tipo entero y un tipo
numérico que se convierte en Boolean se reduce a True o False .
Conversiones de ampliación
En la tabla siguiente se muestran las conversiones de ampliación estándar.
T IP O DE DATO S SE A M P L ÍA A LO S T IP O S DE DATO S 1
Double Double
Cualquier tipo enumerado (enumeración) Su tipo entero subyacente y cualquier tipo al que se amplíe
el tipo subyacente.
T IP O DE DATO S SE A M P L ÍA A LO S T IP O S DE DATO S
Conversiones de restricción
Entre las conversiones de restricción estándar se incluyen las siguientes:
Las direcciones inversas de las conversiones de ampliación en la tabla anterior (excepto en que cada tipo
se amplía a sí mismo)
Conversiones en cualquier dirección entre Boolean y cualquier tipo numérico
Conversiones de cualquier tipo numérico a cualquier tipo enumerado ( Enum )
Conversiones en cualquier dirección entre la cadena y cualquier tipo numérico, Boolean o fecha
Conversiones de un tipo de datos o de un tipo de objeto a un tipo derivado de él
Las conversiones de restricción no siempre se realizan correctamente en tiempo de ejecución y pueden producir
un error o provocar la pérdida de datos. Se produce un error si el tipo de datos de destino no puede recibir el
valor que se está convirtiendo. Por ejemplo, una conversión numérica puede producir un desbordamiento. El
compilador no permite realizar conversiones de restricción implícitamente a menos que la instrucción Option
Strict establezca el modificador de comprobación de tipos en Off .
NOTE
Se suprime el error de conversión de restricción para las conversiones de los elementos de una colección de
For Each…Next a la variable de control de bucle. Para obtener más información y ejemplos, vea la sección acerca de las
conversiones de restricción en for each... Instrucción siguiente.
Cuándo usar las conversiones de restricción
Se usa una conversión de restricción cuando se sabe que el valor de origen se puede convertir al tipo de datos
de destino sin errores o pérdidas de datos. Por ejemplo, si tiene una String que sabe que contiene "true" o
"false", puede utilizar la palabra clave CBool para convertirla en Boolean .
Vea también
Tipos de datos
Conversiones de tipos en Visual Basic
Conversiones implícitas y explícitas
Conversiones entre cadenas y otros tipos
Cómo: convertir un objeto en otro tipo en Visual Basic
Conversiones de matriz
Tipos de datos
Funciones de conversión de tipos
Conversiones implícita y explícita (Visual Basic)
27/11/2019 • 9 minutes to read • Edit Online
Una conversión implícita no requiere ninguna sintaxis especial en el código fuente. En el ejemplo siguiente,
Visual Basic convierte implícitamente el valor de k en un valor de punto flotante de precisión sencilla antes de
asignarlo a q .
Dim k As Integer
Dim q As Double
' Integer widens to Double, so you can do this with Option Strict On.
k = 432
q = k
Una conversión explícita utiliza una palabra clave de conversión de tipos. Visual Basic proporciona varias
palabras clave, que convierten una expresión entre paréntesis en el tipo de datos deseado. Estas palabras clave
actúan como funciones, pero el compilador genera el código insertado, por lo que la ejecución es ligeramente
más rápida que con una llamada de función.
En la siguiente extensión del ejemplo anterior, la palabra clave CInt convierte de nuevo el valor de q en un
entero antes de asignarlo a k .
La función CType
La función ctype funciona con dos argumentos. El primero es la expresión que se va a convertir y el segundo es
el tipo de datos de destino o la clase de objeto. Tenga en cuenta que el primer argumento debe ser una
expresión, no un tipo.
CType es una función insertada, lo que significa que el código compilado realiza la conversión, a menudo sin
generar una llamada de función. Esto mejora el rendimiento.
Para obtener una comparación de CType con las otras palabras clave de conversión de tipos, vea el operador
DirectCast y el operador TryCast.
Tipos elementales
El siguiente ejemplo muestra el uso de CType .
k = CType(q, Integer)
' The following statement coerces w to the specific object class Label.
f = CType(w, Label)
Tipos compuestos
Puede usar CType para convertir valores en tipos de datos compuestos y en tipos elementales. También se
puede utilizar para forzar una clase de objeto al tipo de una de sus interfaces, como en el ejemplo siguiente.
Tipos de matriz
CType también puede convertir tipos de datos de matriz, como en el ejemplo siguiente.
Cau t i on
Si se especifica CType para convertir de un tipo de clase a otro, se produce un error en tiempo de ejecución si el
tipo de origen no se deriva del tipo de destino. Este tipo de error produce una excepción InvalidCastException.
Sin embargo, si uno de los tipos es una estructura o clase definida, y si ha definido CType en esa estructura o
clase, una conversión puede realizarse correctamente si cumple los requisitos de la CType . Vea Cómo: definir un
operador de conversión.
La realización de una conversión explícita también se conoce como convertir una expresión en un tipo de datos
o clase de objeto determinado.
Vea también
Conversiones de tipos en Visual Basic
Conversiones entre cadenas y otros tipos
Cómo: convertir un objeto en otro tipo en Visual Basic
Estructuras
Tipos de datos
Funciones de conversión de tipos
Solución de problemas de tipos de datos
Conversiones entre cadenas y otros tipos (Visual
Basic)
27/11/2019 • 4 minutes to read • Edit Online
Puede convertir un valor numérico, de Boolean o de fecha y hora en un String . También puede convertir en la
dirección inversa, de un valor de cadena a numérico, Boolean o Date , siempre que el contenido de la cadena
pueda interpretarse como un valor válido del tipo de datos de destino. Si no es así, se produce un error en tiempo
de ejecución.
Las conversiones de todas estas asignaciones, en cualquier dirección, son conversiones de restricción. Debe utilizar
las palabras clave de conversión de tipos ( CBool , CByte , CDate , CDbl , CDec , CInt , CLng , CSByte , CShort ,
CSng , CStr , CUInt , CULng , CUShort y CType ). Las funciones Format y Val proporcionan un control adicional
sobre las conversiones entre cadenas y números.
Si ha definido una clase o estructura, puede definir operadores de conversión de tipos entre String y el tipo de la
clase o estructura. Para obtener más información, consulta How to: Define a Conversion Operator.
Cuando Visual Basic convierte una cadena en un valor numérico, usa la configuración de Opciones regionales
especificada en el panel de control de Windows para interpretar el separador de miles, el separador decimal y el
símbolo de moneda. Esto significa que una conversión podría realizarse con una configuración, pero no con otra.
Por ejemplo, "$14.20" es aceptable en la configuración regional de inglés (Estados Unidos), pero no en la
configuración regional en francés.
Vea también
Conversiones de tipos en Visual Basic
Conversiones de ampliación y de restricción
Conversiones implícitas y explícitas
Cómo: convertir un objeto en otro tipo en Visual Basic
Conversiones de matriz
Tipos de datos
Funciones de conversión de tipos
Desarrollo de aplicaciones localizadas y globalizadas
Cómo: Convertir un objeto en otro tipo en Visual
Basic
08/01/2020 • 2 minutes to read • Edit Online
Para convertir una variable de Object en otro tipo de datos, use una palabra clave de conversión como CType
function.
Ejemplo
En el ejemplo siguiente se convierte una variable de Object en un Integer y un String .
Si sabe que el contenido de una variable Object es de un tipo de datos determinado, es mejor convertir la
variable a ese tipo de datos. Si continúa usando la variable Object , incurrirá en la conversión boxing y la
conversión unboxing (para un tipo de valor) o en el enlace en tiempo de ejecución (para un tipo de referencia).
Estas operaciones tienen un tiempo de ejecución adicional y hacen que el rendimiento sea más lento.
Compilar el código
Para este ejemplo se necesita:
Una referencia al espacio de nombres System.
Vea también
Object
Conversiones de tipos en Visual Basic
Conversiones de ampliación y de restricción
Conversiones implícitas y explícitas
Conversiones entre cadenas y otros tipos
Conversiones de matriz
Estructuras
Tipos de datos
Funciones de conversión de tipos
Conversión de matrices (Visual Basic)
27/11/2019 • 4 minutes to read • Edit Online
Puede convertir un tipo de matriz en un tipo de matriz diferente siempre que se cumplan las siguientes
condiciones:
Rango igual. Los rangos de las dos matrices deben ser iguales, es decir, deben tener el mismo número de
dimensiones. Sin embargo, no es necesario que las longitudes de las dimensiones respectivas sean las
mismas.
Tipo de datos de elemento. Los tipos de datos de los elementos de ambas matrices deben ser tipos de
referencia. No se puede convertir una matriz de Integer en una matriz de Long , o incluso en una matriz
de Object , ya que se implica al menos un tipo de valor. Para obtener más información, consulta Value
Types and Reference Types.
Conver tibility. Una conversión, ya sea de ampliación o de restricción, debe ser posible entre los tipos de
elemento de las dos matrices. Un ejemplo en el que se produce un error en este requisito es un intento de
conversión entre una matriz de String y una matriz de una clase derivada de System.Attribute. Estos dos
tipos no tienen nada en común y no existe ninguna conversión de ningún tipo entre ellos.
Una conversión de un tipo de matriz a otro es la ampliación o la restricción, dependiendo de si la conversión de
los elementos respectivos es de ampliación o reducción. Para obtener más información, consulta Widening and
Narrowing Conversions.
Vea también
Tipos de datos
Conversiones de tipos en Visual Basic
Conversiones implícitas y explícitas
Conversiones entre cadenas y otros tipos
Cómo: convertir un objeto en otro tipo en Visual Basic
Tipos de datos
Funciones de conversión de tipos
Matrices
Estructuras (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Una estructura es una generalización del tipo definido por el usuario (UDT) que admiten las versiones
anteriores de Visual Basic. Además de los campos, las estructuras pueden exponer propiedades, métodos y
eventos. Una estructura puede implementar una o más interfaces, y puede declarar niveles de acceso
individuales para cada campo.
Puede combinar elementos de datos de tipos diferentes para crear una estructura. Una estructura asocia uno o
más elementos entre sí y con la propia estructura. Cuando se declara una estructura, se convierte en un tipo de
datos compuestoy se pueden declarar variables de ese tipo.
Las estructuras son útiles cuando se desea que una sola variable contenga varios datos relacionados. Por
ejemplo, puede que desee conservar el nombre de un empleado, la extensión de teléfono y el salario juntos.
Puede usar varias variables para esta información, o puede definir una estructura y utilizarla para una única
variable de empleado. La ventaja de la estructura se hace patente cuando tiene muchos empleados y, por tanto,
muchas instancias de la variable.
Esta sección
Declarar una estructura
Muestra cómo declarar una estructura y sus elementos.
Variables de estructura
Describe la asignación de una estructura a una variable y el acceso a sus elementos.
Estructuras y otros elementos de programación
Resume cómo interactúan las estructuras con matrices, objetos, procedimientos y entre sí.
Estructuras y clases
Describe las similitudes y diferencias entre estructuras y clases.
Secciones relacionadas
Tipos de datos
Presenta los tipos de datos Visual Basic y describe cómo usarlos.
Tipos de datos
Enumera los tipos de datos básicos proporcionados por Visual Basic.
Cómo: Declarar una estructura (Visual Basic)
27/11/2019 • 3 minutes to read • Edit Online
Una declaración de estructura se inicia con la instrucción Structurey finaliza con la instrucción End Structure .
Entre estas dos instrucciones debe declarar al menos un elemento. Los elementos pueden ser de cualquier tipo de
datos, pero al menos uno debe ser una variable no compartida o un evento no personalizado no compartido.
No se puede inicializar ninguno de los elementos de la estructura en la declaración de la estructura. Cuando se
declara una variable para que sea de un tipo de estructura, se asignan valores a los elementos accediendo a ellas a
través de la variable.
Para obtener una explicación de las diferencias entre las estructuras y las clases, vea estructuras y clases.
Para fines de demostración, considere una situación en la que desea realizar un seguimiento del nombre de un
empleado, la extensión de teléfono y el salario. Una estructura le permite hacer esto en una sola variable.
Para declarar una estructura
1. Cree las instrucciones de inicio y finalización de la estructura.
Puede especificar el nivel de acceso de una estructura mediante la palabra clave Public, Protected, Friendo
Private , o puede dejar que se Public de forma predeterminada.
El campo salary del ejemplo anterior es Private , lo que significa que es inaccesible fuera de la estructura,
incluso desde la clase contenedora. Sin embargo, el procedimiento giveRaise es Public , por lo que se
puede llamar desde fuera de la estructura. Del mismo modo, puede generar el evento salaryReviewTime
desde fuera de la estructura.
Además de las variables, los procedimientos de Sub y los eventos, también puede definir constantes,
procedimientos de Function y propiedades en una estructura. Puede designar como máximo una
propiedad como la propiedad predeterminada, siempre que tome al menos un argumento. Puede controlar
un evento con un procedimiento compartido Sub . Para obtener más información, vea Cómo: declarar y
llamar a una propiedad predeterminada en Visual Basic.
Vea también
Tipos de datos
Tipos de datos básicos
Tipos de datos compuestos
Value Types and Reference Types
Estructuras
Solución de problemas de tipos de datos
Variables de estructura
Estructuras y otros elementos de programación
Estructuras y clases
Tipo de datos definido por el usuario
Variables de estructura (Visual Basic)
27/11/2019 • 3 minutes to read • Edit Online
Una vez creada una estructura, puede declarar variables de nivel de procedimiento y de nivel de módulo como ese
tipo. Por ejemplo, puede crear una estructura que registre información sobre un sistema informático. En el
siguiente ejemplo se muestra cómo hacerlo.
Ahora puede declarar variables de ese tipo. La siguiente declaración ilustra esto.
NOTE
En las clases y los módulos, las estructuras declaradas con la instrucción Dim tienen como valor predeterminado el acceso
público. Si desea que una estructura sea privada, asegúrese de que la declara mediante la palabra clave Private .
mySystem.cPU = "486"
Dim tooOld As Boolean
If yourSystem.purchaseDate < #1/1/1992# Then tooOld = True
yourSystem = mySystem
Si un elemento de estructura es un tipo de referencia, como un String , Object o una matriz, se copia el puntero a
los datos. En el ejemplo anterior, si systemInfo hubiera incluido una variable de objeto, el ejemplo anterior habría
copiado el puntero de mySystem a yourSystem y un cambio en los datos del objeto a través de una estructura sería
efectivo al obtener acceso a través de la otra estructura.
Vea también
Tipos de datos
Tipos de datos básicos
Tipos de datos compuestos
Value Types and Reference Types
Estructuras
Solución de problemas de tipos de datos
Declarar una estructura
Estructuras y otros elementos de programación
Estructuras y clases
Structure (instrucción)
Estructuras y otros elementos de programación
(Visual Basic)
21/03/2020 • 4 minutes to read • Edit Online
Puede utilizar estructuras junto con matrices, objetos y procedimientos, así como entre sí. Las interacciones
utilizan la misma sintaxis que estos elementos utilizan individualmente.
NOTE
No se puede inicializar ninguno de los elementos de estructura en la declaración de estructura. Puede asignar valores solo a
elementos de una variable que se ha declarado como de un tipo de estructura.
Estructuras y matrices
Una estructura puede contener una matriz como uno o varios de sus elementos. Esto se ilustra en el siguiente
ejemplo.
Tiene acceso a los valores de una matriz dentro de una estructura de la misma manera que tiene acceso a una
propiedad en un objeto. Esto se ilustra en el siguiente ejemplo.
También puede declarar una matriz de estructuras. Esto se ilustra en el siguiente ejemplo.
Siga las mismas reglas para acceder a los componentes de esta arquitectura de datos. Esto se ilustra en el
siguiente ejemplo.
ReDim allSystems(5).diskDrives(3)
allSystems(5).CPU = "386SX"
allSystems(5).diskDrives(2) = "100M SCSI"
Estructuras y Objetos
Una estructura puede contener un objeto como uno o varios de sus elementos. Esto se ilustra en el siguiente
ejemplo.
Protected Structure userInput
Public userName As String
Public inputForm As System.Windows.Forms.Form
Public userFileNumber As Integer
End Structure
Debe utilizar una clase de objeto específica Object en una declaración de este tipo, en lugar de .
Estructuras y procedimientos
Puede pasar una estructura como argumento de procedimiento. Esto se ilustra en el siguiente ejemplo.
En el ejemplo anterior se pasa la estructura por referencia, lo que permite que el procedimiento modifique sus
elementos para que los cambios surtan efecto en el código de llamada. Si desea proteger una estructura contra
dicha modificación, pásela por valor.
También puede devolver una Function estructura de un procedimiento. Esto se ilustra en el siguiente ejemplo.
También puede utilizar esta técnica para encapsular una estructura definida en un módulo dentro de una
estructura definida en un módulo diferente.
Las estructuras pueden contener otras estructuras a una profundidad arbitraria.
Consulte también
Tipos de datos
Tipos de datos básicos
Tipos de datos compuestos
Tipos de valores y tipos de referencias
Estructuras
Solución de problemas de tipos de datos
Cómo: Declarar una estructura
Variables de estructura
Estructuras y clases
Structure (Instrucción)
Estructuras y clases (Visual Basic)
27/11/2019 • 9 minutes to read • Edit Online
Visual Basic unifica la sintaxis de las estructuras y las clases, con el resultado de que ambas entidades admiten la
mayoría de las mismas características. Sin embargo, también hay diferencias importantes entre estructuras y
clases.
Las clases tienen la ventaja de ser tipos de referencia: pasar una referencia es más eficaz que pasar una variable
de estructura con todos sus datos. Por otro lado, las estructuras no requieren la asignación de memoria en el
montón global.
Dado que no se puede heredar de una estructura, las estructuras deben usarse solo para los objetos que no es
necesario extender. Use estructuras cuando el objeto que desea crear tenga un tamaño de instancia pequeño y
tenga en cuenta las características de rendimiento de clases frente a estructuras.
Similitudes
Las estructuras y clases son similares en los siguientes aspectos:
Ambos son tipos de contenedor , lo que significa que contienen otros tipos como miembros.
Ambos tienen miembros, que pueden incluir constructores, métodos, propiedades, campos, constantes,
enumeraciones, eventos y controladores de eventos. Sin embargo, no confunda estos miembros con los
elementos declarados de una estructura.
Los miembros de ambos pueden tener niveles de acceso individualizados. Por ejemplo, un miembro se
puede declarar Public y otro Private .
Ambos pueden implementar interfaces.
Ambos pueden tener constructores compartidos, con o sin parámetros.
Ambos pueden exponer una propiedad predeterminada, siempre que la propiedad tome al menos un
parámetro.
Ambos pueden declarar y generar eventos y ambos pueden declarar delegados.
Diferencias
Las estructuras y las clases difieren en los siguientes detalles:
Las estructuras son tipos de valor; las clases son tipos de referencia. Una variable de un tipo de estructura
contiene los datos de la estructura, en lugar de contener una referencia a los datos como un tipo de clase.
Las estructuras usan la asignación de la pila; las clases usan la asignación del montón.
De forma predeterminada, todos los elementos de estructura se Public . las variables y constantes de
clase son Private de forma predeterminada, mientras que otros miembros de clase se Public de forma
predeterminada. Este comportamiento para los miembros de clase proporciona compatibilidad con el
sistema Visual Basic de los valores predeterminados 6,0.
Una estructura debe tener al menos una variable no compartida o un elemento de evento no compartido
no personalizado; una clase puede estar completamente vacía.
Los elementos de estructura no se pueden declarar como Protected ; los miembros de clase pueden.
Un procedimiento de estructura solo puede controlar eventos si es un procedimiento compartido de Sub
y solo por medio de la instrucción AddHandler; cualquier procedimiento de clase puede controlar eventos
mediante la palabra clave Handles o la instrucción AddHandler . Para obtener más información, consulta
Eventos.
Las declaraciones de variables de estructura no pueden especificar inicializadores ni tamaños iniciales para
matrices; las declaraciones de variables de clase pueden.
Las estructuras heredan implícitamente de la clase System.ValueType y no pueden heredar de ningún otro
tipo; las clases pueden heredar de cualquier clase o de clases distintas de System.ValueType.
Las estructuras no se pueden heredar; las clases son.
Las estructuras nunca finalizan, por lo que el Common Language Runtime (CLR) nunca llama al método
Finalize en ninguna estructura; el recolector de elementos no utilizados (GC), que llama a Finalize en una
clase, finalizan las clases cuando detecta que no quedan referencias activas.
Una estructura no requiere un constructor; una clase.
Las estructuras pueden tener constructores no compartidos solo si toman parámetros; las clases pueden
tenerlos con o sin parámetros.
Cada estructura tiene un constructor público implícito sin parámetros. Este constructor inicializa todos los
elementos de datos de la estructura en sus valores predeterminados. Este comportamiento no se puede volver a
definir.
Instancias y variables
Dado que las estructuras son tipos de valor, cada variable de estructura se enlaza de forma permanente a una
instancia de la estructura individual. Pero las clases son tipos de referencia y una variable de objeto puede hacer
referencia a varias instancias de clase en momentos diferentes. Esta distinción afecta al uso de estructuras y
clases de las siguientes maneras:
Inicial. Una variable de estructura incluye implícitamente una inicialización de los elementos mediante el
constructor sin parámetros de la estructura. Por lo tanto, Dim s As struct1 es equivalente a
Dim s As struct1 = New struct1() .
Asignación de variables. Cuando se asigna una variable de estructura a otra, o se pasa una instancia de
la estructura a un argumento de procedimiento, los valores actuales de todos los elementos variables se
copian en la nueva estructura. Al asignar una variable de objeto a otra, o pasar una variable de objeto a un
procedimiento, solo se copia el puntero de referencia.
No asignar nada. Puede asignar el valor Nothing a una variable de estructura, pero la instancia continúa
asociada a la variable. Todavía puede llamar a sus métodos y obtener acceso a sus elementos de datos,
aunque la asignación reinicializa los elementos de variable.
Por el contrario, si se establece una variable de objeto en Nothing , se desasocia de cualquier instancia de
clase y no se puede tener acceso a los miembros a través de la variable hasta que se le asigne otra
instancia.
Varias instancias. Una variable de objeto puede tener asignadas instancias de clase diferentes en
momentos diferentes, y varias variables de objeto pueden hacer referencia a la misma instancia de clase al
mismo tiempo. Los cambios que realice en los valores de los miembros de clase afectan a esos miembros
cuando se obtiene acceso a ellos a través de otra variable que apunta a la misma instancia.
Los elementos de la estructura, sin embargo, están aislados dentro de su propia instancia. Los cambios en
sus valores no se reflejan en otras variables de estructura, incluso en otras instancias de la misma
declaración de Structure .
Determinar. Las pruebas de igualdad de dos estructuras deben realizarse con una prueba elemento a
elemento. Se pueden comparar dos variables de objeto mediante el método Equals. Equals indica si las
dos variables apuntan a la misma instancia.
Vea también
Tipos de datos
Tipos de datos compuestos
Value Types and Reference Types
Estructuras
Solución de problemas de tipos de datos
Estructuras y otros elementos de programación
Objetos y clases
Tuplas (Visual Basic)
27/11/2019 • 21 minutes to read • Edit Online
A partir de Visual Basic 2017, el lenguaje de Visual Basic ofrece compatibilidad integrada para tuplas que facilitan
la creación de tuplas y el acceso a los elementos de las tuplas. Una tupla es una estructura de datos ligera que
tiene un número específico y una secuencia de valores. Al crear una instancia de la tupla, se define el número y el
tipo de datos de cada valor (o elemento). Por ejemplo, una tupla de 2 (o par) tiene dos elementos. El primero
podría ser un valor Boolean , mientras que el segundo es un String . Dado que las tuplas facilitan el
almacenamiento de varios valores en un único objeto, a menudo se usan como una manera ligera de devolver
varios valores de un método.
IMPORTANT
La compatibilidad de tupla requiere el tipo de ValueTuple. Si el .NET Framework 4,7 no está instalado, debe agregar el
paquete NuGet System.ValueTuple , que está disponible en la galería de NuGet. Sin este paquete, puede obtener un error
de compilación similar al siguiente: "el tipo predefinido ' ValueTuple (de,,,) ' no está definido ni importado".
De forma predeterminada, el nombre de cada campo de una tupla se compone de la cadena Item junto con la
posición basada en uno de los campos de la tupla. En esta tupla de 3, el campo de Date es Item1 , el campo de
String es Item2 y el campo Boolean es Item3 . En el ejemplo siguiente se muestran los valores de los campos
de la tupla de la que se ha creado una instancia en la línea de código anterior.
Console.WriteLine($"{holiday.Item1} is {holiday.Item2}" +
$"{If(holiday.Item3, ", a national holiday", String.Empty)}")
' Output: 7/4/2017 12:00:00 AM Is Independence Day, a national holiday
Los campos de una tupla Visual Basic son de lectura y escritura; después de haber creado una instancia de una
tupla, puede modificar sus valores. En el ejemplo siguiente se modifican dos de los tres campos de la tupla creada
en el ejemplo anterior y se muestra el resultado.
holiday.Item1 = #01/01/2018#
holiday.Item2 = "New Year's Day"
Console.WriteLine($"{holiday.Item1} is {holiday.Item2}" +
$"{If(holiday.Item3, ", a national holiday", String.Empty)}")
' Output: 1/1/2018 12:00:00 AM Is New Year's Day, a national holiday
Dado que los elementos y las variables tienen el mismo nombre, el compilador Visual Basic puede deducir los
nombres de los campos, como se muestra en el ejemplo siguiente.
Para habilitar los nombres de elementos de tupla inferidos, debe definir la versión del compilador Visual Basic que
se va a usar en el archivo de proyecto Visual Basic (*. vbproj):
<PropertyGroup>
<LangVersion>15.3</LangVersion>
</PropertyGroup>
El número de versión puede ser cualquier versión del compilador Visual Basic a partir de 15,3. En lugar de
codificar de forma rígida una versión específica del compilador, también puede especificar "latest" como valor de
LangVersion para compilar con la versión más reciente del compilador de Visual Basic instalado en el sistema.
Para obtener más información, vea establecer la versión de lenguaje Visual Basic.
En algunos casos, el compilador de Visual Basic no puede inferir el nombre del elemento de tupla a partir del
nombre del candidato y solo se puede hacer referencia al campo de tupla usando su nombre predeterminado,
como Item1 , Item2 , etc. Entre ellas se incluyen:
El nombre del candidato es el mismo que el nombre de un miembro de la tupla, como Item3 , Rest o
ToString .
CompareTo Compara la tupla actual con otra tupla con el mismo número
de elementos.
Asignación y tuplas
Visual Basic admite la asignación entre tipos de tupla que tienen el mismo número de campos. Los tipos de campo
se pueden convertir si se cumple una de las siguientes condiciones:
El campo de origen y de destino son del mismo tipo.
Se define una conversión de ampliación (o implícita) del tipo de origen al tipo de destino.
Option Strict es On y se define una conversión de restricción (o explícita) del tipo de origen al tipo de
destino. Esta conversión puede producir una excepción si el valor de origen está fuera del intervalo del tipo
de destino.
Otras conversiones no se tienen en cuenta para las asignaciones. Echemos un vistazo a los tipos de asignaciones
que se permiten entre los tipos de tupla.
Tenga en cuenta estas variables que se usan en los ejemplos siguientes:
' The number and field types of all these tuples are compatible.
' The only difference Is the field names being used.
Dim unnamed = (42, "The meaning of life")
Dim anonymous = (16, "a perfect square")
Dim named = (Answer:=42, Message:="The meaning of life")
Dim differentNamed = (SecretConstant:=42, Label:="The meaning of life")
Las dos primeras variables, unnamed y anonymous , no tienen nombres semánticos proporcionados para los
campos. Los nombres de campo son los Item1 predeterminados y Item2 . Las dos últimas variables, named y
differentName tienen nombres de campo semánticos. Tenga en cuenta que estas dos tuplas tienen nombres
diferentes para los campos.
Las cuatro de estas tuplas tienen el mismo número de campos (denominado "aridad") y los tipos de esos campos
son idénticos. Por consiguiente, todas estas asignaciones funcionan:
' Despite the assignment, named still has fields that can be referred to as 'answer' and 'message'.
Console.WriteLine($"{named.Answer}, {named.Message}")
' Output: 42, The meaning of life
Observe que los nombres de las tuplas no se asignan. Los valores de los campos se asignan según el orden de los
campos de la tupla.
Por último, observe que podemos asignar la tupla named a la tupla conversion , aunque el primer campo de la
named sea un Integer y el primer campo de conversion sea una Long . Esta asignación se realiza correctamente
porque la conversión de un Integer en un Long es una conversión de ampliación.
' Assign an (Integer, String) tuple to a (Long, String) tuple (using implicit conversion).
Dim conversion As (Long, String) = named
Console.WriteLine($"{conversion.Item1} ({conversion.Item1.GetType().Name}), " +
$"{conversion.Item2} ({conversion.Item2.GetType().Name})")
' Output: 42 (Int64), The meaning of life (String)
Las tuplas con distintos números de campos no son asignables:
Podemos devolver una tupla a partir de la operación de análisis si encapsulamos la llamada al método
Int32.TryParse en nuestro propio método. En el ejemplo siguiente, NumericLibrary.ParseInteger llama al método
Int32.TryParse y devuelve una tupla con nombre con dos elementos.
Imports System.Globalization
Module Example
Sub Main()
Dim cityInfo = (name:="New York", area:=468.5, population:=8_550_405)
Console.WriteLine($"{cityInfo}, type {cityInfo.GetType().Name}")
' Convert the .NET tuple back to a Visual Basic tuple and ensure they are the same.
Dim cityInfo2 = TupleExtensions.ToValueTuple(cityInfoT)
Console.WriteLine($"{cityInfo2}, type {cityInfo2.GetType().Name}")
Console.WriteLine($"{NameOf(cityInfo)} = {NameOf(cityInfo2)}: {cityInfo.Equals(cityInfo2)}")
Console.ReadLine()
End Sub
End Module
' The example displays the following output:
' (New York, 468.5, 8550405), type ValueTuple`3
' (New York, 468.5, 8550405), type Tuple`3
' (New York, 468.5, 8550405), type ValueTuple`3
' cityInfo = cityInfo2 : True
Vea también
Referencia del lenguaje Visual Basic
Uso eficiente de tipos de datos (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
A las variables no declaradas y a las variables declaradas sin un tipo de datos se les asigna el tipo de datos
Object . Esto facilita la escritura rápida de programas, pero puede hacer que se ejecuten más lentamente.
Private x As Double
Protected s As String
Conversión de caracteres
Las funciones AscW y ChrW funcionan en Unicode. Debe utilizarlos en su preferencia Asc y Chr , que deben
traducirse dentro y fuera de Unicode.
Vea también
Asc
AscW
Chr
ChrW
Tipos de datos
Tipos de datos numéricos
Declaración de variables
Usar IntelliSense
Solucionar problemas de tipos de datos (Visual
Basic)
27/11/2019 • 14 minutes to read • Edit Online
En esta página se enumeran algunos problemas comunes que pueden producirse al realizar operaciones en
tipos de datos intrínsecos.
1. Calcule el valor absoluto de su diferencia mediante el método Abs de la clase Math en el espacio de nombres System.
2. determinar una diferencia máxima aceptable, por lo que puede considerar que las dos cantidades son iguales a efectos
prácticos si su diferencia no es mayor.
3. Compare el valor absoluto de la diferencia con la diferencia aceptable.
En el ejemplo anterior se usa el método ToString de la estructura Double para que pueda especificar mejor
precisión de la que utiliza la palabra clave CStr . El valor predeterminado es 15 dígitos, pero el formato
"G17" lo extiende hasta 17 dígitos.
En el ejemplo anterior se usa el método ToString de la estructura Double para que pueda especificar mejor
precisión de la que utiliza la palabra clave CStr . El valor predeterminado es 15 dígitos, pero el formato
"G17" lo extiende hasta 17 dígitos.
Dado que zeroPointTwo es Double , su valor para 0,2 es una fracción binaria repetida infinitamente con un
valor almacenado de 0.20000000000000001. La división de 2,0 por esta cantidad produce
9.9999999999999995 con un resto de 0.19999999999999991.
En la expresión de decimalRemainder , el carácter de tipo literal D obliga a ambos operandos a Decimal y
0,2 tiene una representación precisa. Por lo tanto, el operador Mod produce el resto esperado de 0,0.
Tenga en cuenta que no es suficiente declarar decimalRemainder como Decimal . También debe forzar la
Decimal de los literales, o usar Double de forma predeterminada y decimalRemainder recibe el mismo valor
inexacto que doubleRemainder .
En el ejemplo siguiente se muestran las asignaciones correctas y erróneas de un literal a una variable de
Char .
Siempre hay un riesgo en el uso de conversiones de restricción, ya que pueden producir errores en tiempo
de ejecución. Por ejemplo, una conversión de String a Char puede producir un error si el valor de String
contiene más de un carácter. Por lo tanto, es mejor programar para usar el carácter de tipo C .
Vea también
Tipos de datos
Caracteres de tipo
Value Types and Reference Types
Conversiones de tipos en Visual Basic
Tipos de datos
Funciones de conversión de tipos
Uso eficiente de tipos de datos
Elementos declarados en Visual Basic
27/11/2019 • 2 minutes to read • Edit Online
Un elemento declarado es un elemento de programación que se define en una instrucción de declaración. Entre los
elementos declarados se incluyen variables, constantes, enumeraciones, clases, estructuras, módulos, interfaces,
procedimientos, parámetros de procedimientos, valores devueltos de función, referencias a procedimientos
externos, operadores, propiedades, eventos y delegados.
Entre las instrucciones de declaración se incluyen las siguientes:
Dim (instrucción)
Const (instrucción)
Enum (instrucción)
Class (instrucción)
Structure (instrucción)
Module (instrucción)
Interface (instrucción)
Function (instrucción)
Sub (instrucción)
Declare (instrucción)
Operator Statement
Property (instrucción)
Event (instrucción)
Delegate (instrucción)
Esta sección
Nombres de elementos declarados
Se describe cómo asignar un nombre a elementos y usar mayúsculas o minúsculas.
Características de los elementos declarados
Se tratan características, como el ámbito, que poseen elementos declarados.
Referencias a elementos declarados
Se describe cómo el compilador compara una referencia con una declaración y cómo calificar un nombre.
Secciones relacionadas
Convenciones de código y estructura de programas
Se muestran instrucciones para hacer que el código sea más fácil de leer, comprender y mantener.
Instrucciones
Se describen las instrucciones que asignan un nombre y definen procedimientos, variables, matrices y constantes.
Contextos de declaración y niveles de acceso predeterminados
Se enumeran los tipos de elementos declarados y se muestra para cada uno de ellos su instrucción de declaración,
en qué contexto se pueden declarar y su nivel de acceso predeterminado.
Delegados (Visual Basic)
27/11/2019 • 9 minutes to read • Edit Online
Los delegados son objetos que hacen referencia a métodos. A veces se describen como punteros de función con
seguridad de tipos porque son similares a los punteros de función utilizados en otros lenguajes de programación.
Pero a diferencia de los punteros de función, los delegados Visual Basic son un tipo de referencia basado en la
clase System.Delegate. Los delegados pueden hacer referencia a los métodos compartidos, métodos a los que se
puede llamar sin una instancia específica de una clase, y a los métodos de instancia.
Delegados y eventos
Los delegados son útiles en situaciones donde es necesario un intermediario entre un procedimiento que realiza
la llamada y el procedimiento que la recibe. Por ejemplo, puede que necesite un objeto que provoca que los
eventos puedan llamar a controladores de eventos diferentes en distintas circunstancias. Lamentablemente, el
objeto que provoca los eventos no puede conocer de antemano qué controlador de eventos controla un evento
específico. Visual Basic permite asociar dinámicamente controladores de eventos con eventos mediante la
creación de un delegado cuando se usa la instrucción AddHandler . En tiempo de ejecución, el delegado reenvía las
llamadas al controlador de eventos adecuado.
Aunque puede crear sus propios delegados, en la mayoría de los casos Visual Basic crea el delegado y se encarga
de los detalles. Por ejemplo, una instrucción Event define implícitamente una clase delegada denominada
<EventName>EventHandler como una clase anidada de la clase que contiene la instrucción Event , y con la misma
firma que el evento. La instrucción AddressOf crea implícitamente una instancia de un delegado que hace
referencia a un procedimiento específico. Las dos líneas de código siguientes son equivalentes. En la primera
línea, verá que la creación explícita de una instancia de EventHandler , con una referencia al método
Button1_Click enviada como argumento. La segunda línea es una manera más práctica de conseguir el mismo
resultado.
Puede utilizar la forma abreviada para crear delegados en cualquier lugar en que el compilador puede determinar
el tipo de delegado en función del contexto.
Esto es útil cuando desea enrutar diversos eventos hacia el mismo controlador.
En el ejemplo siguiente se muestran las expresiones lambda y AddressOf usadas para especificar la referencia de
un delegado.
Module Module1
Sub Main()
' Create an instance of InOrderClass and assign values to the properties.
' InOrderClass method ShowInOrder displays the numbers in ascending
' or descending order, depending on the comparison method you specify.
Dim inOrder As New InOrderClass
inOrder.Num1 = 5
inOrder.Num2 = 4
' Use AddressOf to send a reference to the comparison function you want
' to use.
inOrder.ShowInOrder(AddressOf GreaterThan)
inOrder.ShowInOrder(AddressOf LessThan)
Class InOrderClass
' Define the delegate function for the comparisons.
Delegate Function CompareNumbers(ByVal num1 As Integer, ByVal num2 As Integer) As Boolean
' Display properties in ascending or descending order.
Sub ShowInOrder(ByVal compare As CompareNumbers)
If compare(_num1, _num2) Then
Console.WriteLine(_num1 & " " & _num2)
Else
Console.WriteLine(_num2 & " " & _num1)
End If
End Sub
La firma de la función debe coincidir con la del tipo de delegado. Para obtener más información sobre las
expresiones lambda, vea Expresiones lambda. Para obtener más ejemplos de expresión lambda y asignaciones de
AddressOf a delegados, vea Conversión de delegado flexible.
Temas relacionados
T ÍT ULO DESC RIP C IÓ N
Paso de procedimientos a otro procedimiento en Visual Basic Muestra cómo utilizar los delegados para pasar un
procedimiento a otro procedimiento.
El compilador de Visual Basic realiza un proceso denominado binding cuando se asigna un objeto a una variable
de objeto. Un objeto se enlaza de manera anticipada cuando se asigna a una variable que se declara de un tipo de
objeto específico. Los objetos enlazados de manera anticipada permiten al compilador asignar memoria y realizar
otras optimizaciones antes de que se ejecute la aplicación. Por ejemplo, el fragmento de código siguiente declara
que una variable es de tipo FileStream:
Como FileStream es un tipo de objeto específico, la instancia asignada a FS se enlaza de manera anticipada.
Por el contrario, un objeto se enlaza en tiempo de ejecución cuando se asigna a una variable que se declara como
variable de tipo Object . Los objetos de este tipo pueden contener referencias a cualquier objeto, pero carecen de
muchas de las ventajas de los objetos con enlaces anticipados. Por ejemplo, el fragmento de código siguiente
declara una variable de objeto para contener un objeto devuelto por la función CreateObject :
' To use this example, you must have Microsoft Excel installed on your computer.
' Compile with Option Strict Off to allow late binding.
Sub TestLateBinding()
Dim xlApp As Object
Dim xlBook As Object
Dim xlSheet As Object
xlApp = CreateObject("Excel.Application")
' Late bind an instance of an Excel workbook.
xlBook = xlApp.Workbooks.Add
' Late bind an instance of an Excel worksheet.
xlSheet = xlBook.Worksheets(1)
xlSheet.Activate()
' Show the application.
xlSheet.Application.Visible = True
' Place some text in the second row of the sheet.
xlSheet.Cells(2, 2) = "This is column B row 2"
End Sub
Vea también
CreateObject
Duración de los objetos: cómo se crean y destruyen
Object Data Type
Tipos de error (Visual Basic)
27/11/2019 • 3 minutes to read • Edit Online
En Visual Basic, los errores se dividen en una de estas tres categorías: errores de sintaxis, errores en tiempo de
ejecución y errores lógicos.
Errores de sintaxis
Los errores de sintaxis son los que aparecen mientras se escribe código. Si usa Visual Studio, Visual Basic
comprueba el código a medida que lo escribe en la ventana del Editor de código y le alerta Si comete un
error, como la escritura incorrecta de una palabra o el uso de un elemento del lenguaje de forma incorrecta. Si
se compila desde la línea de comandos, Visual Basic muestra un error del compilador con información sobre el
error de sintaxis. Los errores de sintaxis son el tipo más común de errores. Puede corregirlas fácilmente en el
entorno de codificación en cuanto se produzcan.
NOTE
La instrucción Option Explicit es un medio para evitar errores de sintaxis. Obliga a declarar, de antemano, todas las
variables que se van a usar en la aplicación. Por lo tanto, cuando esas variables se usan en el código, los errores
tipográficos se detectan inmediatamente y se pueden corregir.
Errores lógicos
Los errores lógicos son los que aparecen una vez que la aplicación está en uso. Suelen ser suposiciones
defectuosas realizadas por el desarrollador o resultados no deseados o inesperados en respuesta a las acciones
del usuario. Por ejemplo, una clave mal escrita podría proporcionar información incorrecta a un método, o
puede suponer que siempre se suministra un valor válido a un método cuando no es el caso. Aunque los
errores lógicos se pueden controlar mediante el control de excepciones (por ejemplo, comprobando si un
argumento es Nothing e iniciando una ArgumentNullException), lo más habitual es que se solucionen
corrigiendo el error en la lógica y volviendo a compilar la aplicación.
Vea también
Try...Catch...Finally (instrucción)
Conceptos básicos del depurador
Eventos (Visual Basic)
21/03/2020 • 13 minutes to read • Edit Online
Aunque puede visualizar un proyecto de Visual Studio como una serie de procedimientos que se ejecutan en una
secuencia, en realidad, la mayoría de los programas están controlados por eventos, lo que significa que el flujo
de ejecución está determinado por ocurrencias externas denominadas eventos.
Un evento es una señal que comunica a una aplicación que ha sucedido algo importante. Por ejemplo, cuando un
usuario hace clic en un control en un formulario, el formulario puede provocar un evento Click y llamar a un
procedimiento que controla el evento. Los eventos también permiten que las tareas independientes se
comuniquen. Por ejemplo, supongamos que la aplicación realiza una tarea de ordenación de manera
independiente a la aplicación principal. Si un usuario cancela la ordenación, la aplicación puede enviar un evento
de cancelación que indica al proceso de ordenación que se detenga.
Provocar eventos
Un evento es como un mensaje que anuncia que ha sucedido algo importante. La acción de difundir el mensaje
se denomina generar el evento. En Visual Basic, se RaiseEvent generan eventos con la instrucción, como en el
ejemplo siguiente:
RaiseEvent AnEvent(EventNumber)
Los eventos deben generarse dentro del ámbito de la clase, del módulo o de la estructura donde se declaran. Por
ejemplo, una clase derivada no puede generar eventos heredados de una clase base.
Remitentes de eventos
Cualquier objeto capaz de generar un evento es un remitente del evento, lo que también se conoce como origen
del evento. Los formularios, controles y objetos definidos por el usuario son ejemplos de remitentes de eventos.
Controladores de eventos
Los controladores de eventos son procedimientos que se invocan cuando se produce un evento correspondiente.
Puede utilizar cualquier subrutina válida con una firma coincidente como un controlador de eventos. Sin
embargo, no se puede utilizar una función como un controlador de eventos, porque no devolverá un valor al
origen del evento.
Visual Basic usa una convención de nomenclatura estándar para los controladores de eventos que combina el
nombre del remitente del evento, un carácter de subrayado y el nombre del evento. Por ejemplo, el evento
Click de un botón con nombre button1 se denominaría Sub button1_Click .
NOTE
Se recomienda utilizar esta convención de nomenclatura al definir controladores de eventos para sus propios eventos, pero
no es necesario; puede utilizar cualquier nombre de subrutina válido.
Class EventClass
Public Event XEvent()
Public Event YEvent()
' RaiseEvents raises both events.
Sub RaiseEvents()
RaiseEvent XEvent()
RaiseEvent YEvent()
End Sub
End Class
La instrucción WithEvents y la cláusula Handles suelen ser la mejor opción para controladores de eventos,
porque la sintaxis declarativa que utilizan hace que el control de eventos sea más fácil de codificar, leer y depurar.
Sin embargo, tenga en cuenta las siguientes limitaciones en el uso de variables WithEvents :
No puede usar una variable WithEvents como una variable de objeto. Es decir, no puede declararla como
Object : debe especificar el nombre de clase al declarar la variable.
Dado que los eventos compartidos no están WithEvents vinculados a instancias de clase, no se puede
usar para controlar mediante declaración los eventos compartidos. De forma similar, no puede usar
WithEvents o Handles para controlar eventos desde Structure . En ambos casos, puede usar la
instrucción AddHandler para controlar dichos eventos.
No puede crear matrices de las variables WithEvents .
Las variables WithEvents permiten que un único controlador de eventos controle uno o varios tipos de eventos,
o bien que uno o varios controladores de eventos controlen el mismo tipo de eventos.
Aunque la cláusula Handles es la forma estándar de asociar un evento con un controlador de eventos, tiene la
limitación de que solo puede asociar eventos con controladores de eventos en tiempo de compilación.
En algunos casos, como con eventos asociados con formularios o controles, Visual Basic elimina
automáticamente un controlador de eventos vacío y lo asocia a un evento. Por ejemplo, al hacer doble clic en un
botón de comando de un WithEvents formulario en modo de diseño, Visual Basic crea un controlador de
eventos vacío y una variable para el botón de comando, como en el código siguiente:
AddHandler y RemoveHandler
La instrucción AddHandler es similar a la cláusula Handles por el hecho de que ambas permiten especificar un
controlador de eventos. Sin embargo, AddHandler , que se utiliza con RemoveHandler , aporta más flexibilidad que
la cláusula Handles , ya que permite agregar, eliminar y cambiar de forma dinámica el controlador de eventos
asociado con un evento. Si desea controlar eventos compartidos o eventos de una estructura, debe utilizar
AddHandler .
AddHandler adopta dos argumentos: el nombre de un evento de un remitente de eventos como un control y una
expresión que evalúa a un delegado. No es necesario especificar explícitamente la clase delegada al utilizar
AddHandler , puesto que la instrucción AddressOf siempre devuelve una referencia al delegado. En el ejemplo
siguiente se asocia un controlador de eventos a un evento generado por un objeto:
RemoveHandler , que desconecta un evento de un controlador de eventos, utiliza la misma sintaxis que
AddHandler . Por ejemplo:
Sub Main()
Dim c1 As New Class1
' Associate an event handler with an event.
AddHandler c1.AnEvent, AddressOf EventHandler1
' Call a method to raise the event.
c1.CauseTheEvent()
' Stop handling the event.
RemoveHandler c1.AnEvent, AddressOf EventHandler1
' Now associate a different event handler with the event.
AddHandler c1.AnEvent, AddressOf EventHandler2
' Call a method to raise the event.
c1.CauseTheEvent()
' Stop handling the event.
RemoveHandler c1.AnEvent, AddressOf EventHandler2
' This event will not be handled.
c1.CauseTheEvent()
End Sub
Sub EventHandler1()
' Handle the event.
MsgBox("EventHandler1 caught event.")
End Sub
Sub EventHandler2()
' Handle the event.
MsgBox("EventHandler2 caught event.")
End Sub
End Module
Tutorial: Declarar y provocar eventos Proporciona una descripción detallada de cómo declarar y
generar eventos para una clase.
Cómo: Declarar eventos personalizados para evitar bloqueos Muestra cómo definir un evento personalizado que permite
invocar a sus controladores de eventos de forma asincrónica.
Cómo: Declarar eventos personalizados para conservar Muestra cómo definir un evento personalizado que utiliza la
memoria memoria solo cuando se controla el evento.
Solucionar problemas de controladores de eventos Enumera los problemas habituales que se producen con los
heredados en Visual Basic controladores de eventos en componentes heredados.
Crear controladores de eventos en Windows Forms Describe cómo trabajar con eventos asociados a objetos de
Windows Forms.
Las interfaces definen las propiedades, los métodos y los eventos que pueden implementar las clases. Las
interfaces permiten definir características como grupos pequeños de propiedades, métodos y eventos
estrechamente relacionados; esto reduce los problemas de compatibilidad porque se pueden desarrollar
implementaciones mejoradas para las interfaces sin comprometer el código existente. En cualquier momento se
pueden agregar nuevas características mediante el desarrollo de implementaciones e interfaces adicionales.
Hay otras razones por las que se podrían usar las interfaces en vez de la herencia de clases:
Las interfaces se adaptan mejor a situaciones en las que las aplicaciones necesitan que muchos tipos de
objetos posiblemente no relacionados proporcionen una funcionalidad determinada.
Las interfaces son más flexibles que las clases base porque se puede definir una sola implementación que
implemente varias interfaces.
Las interfaces funcionan mejor en situaciones en las que no es necesario heredar la implementación de
una clase base.
Las interfaces son útiles cuando no se puede usar la herencia de clases. Por ejemplo, las estructuras no
pueden heredar de clases, pero pueden implementar interfaces.
Declarar interfaces
Las definiciones de interfaz se encuentran dentro de las instrucciones Interface y End Interface . Después de la
instrucción Interface , puede agregar una instrucción Inherits opcional que muestra una o varias interfaces
heredadas. Las instrucciones Inherits deben preceder a todas las demás instrucciones de la declaración a
excepción de los comentarios. El resto de instrucciones de la definición de interfaz deben ser instrucciones
Event , Sub , Function , Property , Interface , Class , Structure y Enum . Las interfaces no pueden contener
código de implementación ni instrucciones asociadas al código de implementación, como End Sub o
End Property .
En un espacio de nombres, las instrucciones de interfaz son Friend de forma predeterminada, pero también se
pueden declarar explícitamente como Public o Friend . Las interfaces definidas dentro de clases, módulos,
interfaces y estructuras son Public de forma predeterminada, pero también se pueden declarar explícitamente
como Public , Friend , Protected o Private .
NOTE
La palabra clave Shadows puede aplicarse a todos los miembros de interfaz. La palabra clave Overloads puede aplicarse
a las instrucciones Sub , Function y Property que se declaran en una definición de interfaz. Además, las instrucciones
Property pueden tener los modificadores Default , ReadOnly o WriteOnly . No se permite ningún otro modificador (
Public , Private , Friend , Protected , Shared , Overrides , MustOverride o Overridable ). Para obtener más
información, vea Declaration Contexts and Default Access Levels (Contextos de declaración y niveles de acceso
predeterminados).
Por ejemplo, el código siguiente define una interfaz con una función, una propiedad y un evento.
Interface IAsset
Event ComittedChange(ByVal Success As Boolean)
Property Division() As String
Function GetID() As Integer
End Interface
Implementar interfaces
La Visual Basic palabra reservada Implements se usa de dos maneras. La instrucción Implements significa que
una clase o estructura implementa una interfaz. La palabra clave Implements significa que un miembro de clase
o de estructura implementa un miembro de interfaz específico.
Implements (Instrucción)
Si una clase o estructura implementa una o más interfaces, debe incluir la instrucción Implements
inmediatamente después de la instrucción Class o Structure . La instrucción Implements requiere una lista
separada por comas de las interfaces que implementará una clase. La clase o estructura debe implementar todos
los miembros de interfaz mediante la palabra clave Implements .
Implements (palabra clave )
La palabra clave Implements requiere una lista separada por comas de los miembros de interfaz que se
implementarán. Por lo general solo se especifica un miembro de interfaz, pero pueden especificarse varios. La
especificación de un miembro de interfaz consta del nombre de la interfaz —que debe especificarse en una
instrucción implements dentro de la clase—, un punto y el nombre de la función miembro, propiedad o evento
que se va a implementar. El nombre de un miembro que implementa un miembro de interfaz puede usar
cualquier identificador legal y no se limita a la Convención de InterfaceName_MethodName utilizada en versiones
anteriores de Visual Basic.
Por ejemplo, el código siguiente muestra cómo declarar una subrutina denominada Sub1 que implementa un
método de una interfaz:
Class Class1
Implements interfaceclass.interface2
Los tipos de parámetro y los tipos devueltos del miembro implementador deben coincidir con la declaración de
miembro o de propiedad de interfaz de la interfaz. La manera más habitual de implementar un elemento de una
interfaz es mediante un miembro que tenga el mismo nombre que la interfaz, tal como se muestra en el ejemplo
anterior.
Para declarar la implementación de un método de interfaz, puede usar cualquier atributo permitido en las
declaraciones de método de instancia, incluidos Overloads , Overrides , Overridable , Public , Private ,
Protected , Friend , Protected Friend , MustOverride , Default y Static . El atributo Shared no está permitido,
ya que define una clase en lugar de un método de instancia.
Con Implements también se puede escribir un único método que implemente varios métodos definidos en una
interfaz, como en el ejemplo siguiente:
Class Class2
Implements I1, I2
Se puede usar un miembro privado para implementar un miembro de interfaz. Cuando un miembro privado
implementa un miembro de una interfaz, ese miembro pasa a estar disponible por medio de la interfaz incluso si
no está disponible directamente en las variables de objeto de la clase.
Ejemplos de implementación de interfaces
Las clases que implementan una interfaz deben implementar todas sus propiedades, métodos y eventos.
En el ejemplo siguiente se definen dos interfaces. La segunda interfaz, Interface2 , hereda Interface1 y define
un método y una propiedad adicionales.
Interface Interface1
Sub sub1(ByVal i As Integer)
End Interface
Puede implementar una propiedad de solo lectura con una propiedad de lectura y escritura (es decir, no tiene
que declararla de solo lectura en la clase implementadora). Al implementar una interfaz, se implementarán al
menos los miembros que declara la interfaz, pero se puede ofrecer más funcionalidad como, por ejemplo,
permitir que se pueda escribir en la propiedad.
Temas relacionados
T ÍT ULO DESC RIP C IÓ N
Tutorial: Crear e implementar interfaces Proporciona un procedimiento detallado que le guiará por el
proceso de definición e implementación de su propia interfaz.
Las interfaces describen las características de las propiedades, los métodos y los eventos, pero dejan los detalles de
la implementación hasta estructuras o clases.
En este tutorial se muestra cómo declarar e implementar una interfaz.
NOTE
En este tutorial no se proporciona información sobre cómo crear una interfaz de usuario.
NOTE
Es posible que el equipo muestre nombres o ubicaciones diferentes para algunos de los elementos de la interfaz de usuario
de Visual Studio en las siguientes instrucciones. La edición de Visual Studio que se tenga y la configuración que se utilice
determinan estos elementos. Para obtener más información, vea Personalizar el IDE.
Implementación
Es posible que observe que la sintaxis usada para declarar miembros de interfaz es diferente de la sintaxis utilizada
para declarar miembros de clase. Esta diferencia refleja el hecho de que las interfaces no pueden contener código
de implementación.
Para implementar la interfaz
1. Agregue una clase denominada ImplementationClass agregando la siguiente instrucción a Module1 ,
después de la instrucción End Interface , pero antes de la instrucción End Module y, a continuación,
presione ENTRAR:
Class ImplementationClass
Si está trabajando en el entorno de desarrollo integrado, el Editor de código proporciona una instrucción
End Class coincidente al presionar entrar.
2. Agregue la siguiente instrucción Implements a ImplementationClass , que nombra la interfaz que la clase
implementa:
Implements TestInterface
Cuando se enumeran por separado de otros elementos en la parte superior de una clase o estructura, la
instrucción Implements indica que la clase o estructura implementa una interfaz.
Si está trabajando en el entorno de desarrollo integrado, el Editor de código implementa los miembros de
clase requeridos por TestInterface al presionar entrar y puede omitir el paso siguiente.
3. Si no está trabajando en el entorno de desarrollo integrado, debe implementar todos los miembros de la
interfaz MyInterface . Agregue el código siguiente a ImplementationClass para implementar Event1 ,
Method1 y Prop1 :
Return pval
pval = value
Al declarar testInstance como WithEvents , la clase Form1 puede controlar sus eventos.
3. Agregue el siguiente controlador de eventos a la clase Form1 para controlar los eventos generados por
testInstance :
4. Agregue una subrutina denominada Test a la clase Form1 para probar la clase de implementación:
Sub Test()
' Create an instance of the class.
Dim T As New ImplementationClass
' Assign the class instance to the interface.
' Calls to the interface members are
' executed through the class instance.
testInstance = T
' Set a property.
testInstance.Prop1 = 9
' Read the property.
MsgBox("Prop1 was set to " & testInstance.Prop1)
' Test the method and raise an event.
testInstance.Method1(5)
End Sub
El procedimiento Test crea una instancia de la clase que implementa MyInterface , asigna esa instancia al
campo testInstance , establece una propiedad y ejecuta un método a través de la interfaz.
5. Agregue código para llamar al procedimiento Test desde el procedimiento Form1 Load del formulario de
Inicio:
6. Ejecute el procedimiento Test presionando F5. Se muestra el mensaje "Prop1 se estableció en 9". Después
de hacer clic en aceptar, se muestra el mensaje "el parámetro X de method1 es 5". Haga clic en aceptar y se
mostrará el mensaje "el controlador de eventos detectó el evento".
Vea también
Implements (instrucción)
Interfaces
Interface (instrucción)
Event (instrucción)
LINQ en Visual Basic
08/01/2020 • 3 minutes to read • Edit Online
Esta sección contiene información general, ejemplos e información general que le ayudará a entender y usar
Visual Basic y Language-Integrated Query (LINQ).
Esta sección
Introducción a LINQ en Visual Basic
Proporciona una introducción a los proveedores, operadores, estructuras de consulta y características de lenguaje
de LINQ.
Cómo: Consultar una base de datos
Proporciona un ejemplo de cómo conectarse a una base de datos de SQL Server y ejecutar una consulta mediante
LINQ.
Cómo: Llamar a un procedimiento almacenado
Proporciona un ejemplo de cómo conectarse a una base de datos de SQL Server y llamar a un procedimiento
almacenado mediante LINQ.
Cómo: Modificar datos en una bases de datos
Proporciona un ejemplo de cómo conectarse a una base de datos de SQL Server y recuperar y modificar datos
mediante LINQ.
Cómo: Combinar datos con cláusulas Join
Proporciona ejemplos de cómo combinar datos de una manera similar a las combinaciones de la base de datos
mediante LINQ.
Cómo: Ordenar los resultados de una consulta
Proporciona un ejemplo de cómo ordenar los resultados de una consulta mediante LINQ.
Cómo: Filtrar los resultados de una consulta
Proporciona un ejemplo de cómo incluir criterios de búsqueda en una consulta mediante LINQ.
Cómo: Hacer el recuento, la suma o el promedio de datos
Proporciona ejemplos de cómo incluir funciones de agregado para realizar el recuento, la suma o el promedio de
los datos devueltos por una consulta mediante LINQ.
Cómo: Buscar los valores máximo y mínimo en el resultado de una consulta
Proporciona ejemplos de cómo incluir funciones de agregado para determinar los valores mínimo y máximo de
los datos devueltos por una consulta mediante LINQ.
Devolver el resultado de una consulta con LINQ como tipo específico
Proporciona un ejemplo de cómo devolver los resultados de una consulta LINQ como un tipo específico en lugar
de como un tipo anónimo.
Vea también
LINQ (Language Integrated Query)
Información general sobre LINQ to XML en Visual Basic
Información general de LINQ to DataSet
LINQ to SQL
Objetos y clases de Visual Basic
08/01/2020 • 24 minutes to read • Edit Online
Un objeto es una combinación de código y datos que se pueden tratar como una unidad. Un objeto puede ser
una parte de una aplicación, como un control o un formulario. Toda la aplicación también puede ser un objeto.
Cuando se crea una aplicación en Visual Basic, se trabaja constantemente con objetos. Puede usar los objetos
proporcionados por Visual Basic, como los controles, los formularios y los objetos de acceso a datos. También
puede utilizar objetos de otras aplicaciones dentro de la aplicación Visual Basic. Incluso puede crear sus propios
objetos y definir propiedades y métodos adicionales para ellos. Los objetos actúan como bloques de
compilación prefabricados que permiten escribir un fragmento de código de una vez y utilizarlo una y otra vez.
En este tema se proporciona información detallada sobre los objetos.
Objetos y clases
Cada objeto de Visual Basic se define mediante una clase. Una clase describe las variables, las propiedades, los
procedimientos y los eventos de un objeto. Los objetos son instancias de clases; puede crear tantos objetos
como sean necesarios una vez que haya definido una clase.
Para comprender la relación entre un objeto y su clase, piense en las galletas y en su molde. El molde de la
galleta es la clase. Define las características de cada galleta, por ejemplo, tamaño y forma. La clase se usa para
crear objetos. Los objetos son las galletas.
Debe crear un objeto para poder acceder a sus miembros.
Para crear un objeto a partir de una clase
1. Determine en qué clase desea crear un objeto.
2. Escriba una instrucción Dim para crear una variable a la que pueda asignar una instancia de clase. La
variable debe ser del tipo de la clase deseada.
3. Agregue la palabra clave Nuevo operador para inicializar la variable en una nueva instancia de la clase.
4. Ahora puede tener acceso a los miembros de la clase a través de la variable de objeto.
nextCustomer.accountNumber = lastAccountNumber + 1
NOTE
Siempre que sea posible, debe declarar la variable para que sea del tipo de clase al que pretende asignarla. Esto se
denomina enlace anticipado. Si no conoce el tipo de clase en tiempo de compilación, puede invocar el enlace en tiempo
de ejecución mediante la declaración de la variable para que sea del tipo de datos de objeto. Sin embargo, el enlace en
tiempo de ejecución puede ralentizar el rendimiento y limitar el acceso a los miembros del objeto de tiempo de ejecución.
Para más información, vea Declaración de variables de objeto.
Varias instancias
Los objetos recién creados a partir de una clase suelen ser idénticos entre sí. Una vez que existen como objetos
individuales, sin embargo, sus variables y propiedades se pueden cambiar independientemente de las otras
instancias. Por ejemplo, si agrega tres casillas a un formulario, cada objeto de casilla es una instancia de la clase
CheckBox. Los objetos CheckBox individuales comparten un conjunto común de características y funciones
(propiedades, variables, procedimientos y eventos) que define la clase. Sin embargo, cada uno tiene su propio
nombre, pueden habilitarse y deshabilitarse por separado y se pueden colocar en una ubicación distinta en el
formulario.
Miembros de objetos
Un objeto es un elemento de una aplicación, que representa una instancia de una clase. Los campos, las
propiedades, los métodos y los eventos son los bloques de compilación de objetos y constituyen sus
miembros.
Acceso a miembros
Para acceder al miembro de un objeto, especifique, en este mismo orden, el nombre de la variable de objeto, un
punto ( . ) y el nombre del miembro. En el ejemplo siguiente se establece la propiedad Text de un objeto Label.
La configuración de la propiedad provoca cambios en otras variables internas o en los valores de otras
propiedades.
Es necesario realizar una serie de pasos antes de que la propiedad se pueda establecer o recuperar.
Utilice campos cuando:
El valor sea de un tipo de autovalidación. Por ejemplo, se produce un error o una conversión de datos
automática si un valor distinto de True o False se asigna a una variable Boolean .
Cualquier valor del intervalo admitido por el tipo de datos es válido. Esto mismo sucede con muchas
propiedades del tipo Single o Double .
La propiedad es un tipo de datos String , y no hay ninguna restricción del tamaño o el valor de la
cadena.
Para más información, vea Procedimientos de propiedad.
Métodos
Un método es una acción que un objeto puede realizar. Por ejemplo, Add es un método del objeto ComboBox
que agrega una entrada nueva al cuadro combinado.
En el ejemplo siguiente se muestra el método Start de un objeto Timer.
Tenga en cuenta que un método es simplemente un procedimiento que se expone mediante un objeto.
Para más información, vea Procedimientos en Visual Basic.
eventos
Un evento es una acción reconocida por un objeto, como hacer clic con el ratón o presionar una tecla, para la
que puede escribir código para que responda. Los eventos pueden producirse como resultado de una acción
del usuario o código de programa, o puede provocarlos el sistema. Se dice que el código que señala un evento
genera el evento y el código que responde a él se dice que lo controla.
También puede desarrollar sus propios eventos personalizados para que los generen sus objetos y los
controlen otros objetos. Para más información, vea Eventos.
Miembros de instancia y miembros compartidos
Cuando se crea un objeto de una clase, el resultado es una instancia de esa clase. Los miembros no declarados
con la palabra clave Shared son miembros de instancia, que pertenecen estrictamente a esa instancia concreta.
Un miembro de instancia en una instancia es independiente del mismo miembro en otra instancia de la misma
clase. Por ejemplo, una variable de miembro de instancia puede tener valores diferentes en instancias distintas.
Los miembros declarados con la palabra clave Shared son miembros compartidos, que pertenecen a la clase
como un todo y no a una instancia determinada. Un miembro compartido existe solo una vez,
independientemente del número de instancias de su clase, o incluso si no crea ninguna. Una variable de
miembro compartido, por ejemplo, tiene un único valor, que está disponible para todo el código que puede
tener acceso a la clase.
Acceso a miembros no compartidos
Par a ac c eder a u n m i em br o n o c o m par t i do de u n o bj et o
1. Asegúrese de que el objeto se crea a partir de su clase y de que se asigna a una variable de objeto.
2. En la instrucción que tiene acceso al miembro, coloque detrás del nombre de la variable de objeto el
operador de acceso a miembro ( . ) y, a continuación, el nombre del miembro.
secondForm.Show()
Acceso a miembros compartidos
Par a ac c eder a u n m i em br o c o m par t i do de u n o bj et o
NOTE
Cuando el modificador Shared se aplica a un miembro de clase, se asocia a la propia clase, en lugar de a una instancia
particular de una clase. Al miembro se accede directamente con el nombre de clase, de la misma forma que se accede a
los miembros del módulo.
Las clases y los módulos también emplean ámbitos diferentes para sus miembros. Los miembros definidos
dentro de una clase tienen el ámbito de una instancia específica de la clase y solo durante la vigencia del
objeto. Para acceder a miembros de clase desde fuera de una clase, debe utilizar nombres completos con el
formato de Objeto.Miembro.
Por otro lado, los miembros declarados dentro de un módulo son de acceso público de forma predeterminada
a través de cualquier código que pueda tener acceso al módulo. Esto significa que las variables de un módulo
estándar son variables globales porque son visibles desde cualquier parte del proyecto y, además, existen
durante la vigencia del programa.
En el ejemplo anterior, la primera instrucción Dim declara una variable de objeto del tipo TimeZone y le asigna
un objeto TimeZone que devuelve la propiedad CurrentTimeZone.
Asegúrese de que una instrucción End Class sigue a la última línea de código de la clase. De forma
predeterminada, el entorno de desarrollo integrado (IDE) genera automáticamente End Class al escribir
una instrucción Class .
2. Siga a la instrucción Class inmediatamente con una instrucción Inherits. Especifique la clase de la que
deriva la nueva clase.
Inherits System.Windows.Forms.Button
La nueva clase hereda todos los miembros definidos por la clase base.
3. Agregue el código para los miembros adicionales que la clase derivada expone. Por ejemplo, puede
agregar un método reverseColors y la clase derivada podría tener el aspecto siguiente:
Las clases derivadas heredan miembros de la clase en que se basan, lo que permite agregar complejidad a
medida que progresa en una jerarquía de clases. Para más información, vea Fundamentos de la herencia.
Compilar el código
Asegúrese de que el compilador puede tener acceso a la clase de la que pretende derivar la nueva clase. Esto
puede conllevar su nombre completo, como en el ejemplo anterior, o la identificación de su espacio de
nombres en una Instrucción Imports (Tipo y espacio de nombres de .NET). Si la clase está en un proyecto
diferente, tendrá que agregar una referencia a ese proyecto. Para más información, vea Administrar referencias
en un proyecto.
Relaciones de contención
Otra forma de relacionar ese objeto es mediante una relación de contención. Los objetos contenedores
lógicamente encapsulan otros objetos. Por ejemplo, el objeto OperatingSystem contiene lógicamente un objeto
Version, el cual devuelve a través de su propiedad Version. Tenga en cuenta que el objeto contenedor no
contiene ningún otro objeto físicamente.
Colecciones
Un tipo concreto de contención de objeto se representa mediante colecciones. Las colecciones son grupos de
objetos similares que se pueden enumerar. Visual Basic admite una sintaxis específica en la ... Instrucción
siguiente que permite recorrer en iteración los elementos de una colección. Además, las colecciones suelen
permitir usar un Item[String] para recuperar elementos en función de su índice o asociándolos con una cadena
única. Las colecciones pueden ser más fáciles de utilizar que las matrices puesto que permiten agregar o quitar
elementos sin utilizar índices. Debido a su facilidad de uso, las colecciones se utilizan a menudo para almacenar
formularios y controles.
Temas relacionados
Tutorial: definir clases
Proporciona una descripción detallada sobre cómo crear una clase.
Propiedades y métodos sobrecargados
Propiedades y métodos sobrecargados
Fundamentos de la herencia
Se tratan los modificadores de herencia, con la sustitución de métodos y propiedades, MyClass y MyBase.
Duración de los objetos: cómo se crean y destruyen
Describe cómo crear y eliminar instancias de clase.
Tipos anónimos
Describe cómo crear y usar tipos anónimos que permiten crear objetos sin escribir una definición de clase para
el tipo de datos.
Inicializadores de objeto: Tipos con nombre y anónimos
Explica los inicializadores de objeto, que se usan para crear instancias de tipos con nombre y anónimos
mediante una sola expresión.
Cómo: deducir tipos y nombres de propiedades en declaraciones de tipos anónimos
Explica cómo deducir tipos y nombres de propiedades en declaraciones de tipos anónimos. Proporciona
ejemplos de inferencia correcta e incorrecta.
Operadores y expresiones en Visual Basic
27/11/2019 • 3 minutes to read • Edit Online
Un operador es un elemento de código que realiza una operación en uno o más elementos de código que
contienen valores. Los elementos de valor incluyen variables, constantes, literales, propiedades, devoluciones de
procedimientos Function y Operator y expresiones.
Una expresión es una serie de elementos de valor combinados con operadores, lo que produce un nuevo valor.
Los operadores actúan en los elementos de valor mediante cálculos, comparaciones y otras operaciones.
Tipos de operadores
Visual Basic proporciona los siguientes tipos de operadores:
Los operadores aritméticos realizan cálculos familiares en valores numéricos, incluido el desplazamiento
de los patrones de bits.
Los operadores de comparación comparan dos expresiones y devuelven un valor Boolean que representa
el resultado de la comparación.
Los operadores de concatenación unen varias cadenas en una sola.
Los operadores lógicos y bit a bit de Visual Basic combinan valores Boolean o numéricos y devuelven un
resultado del mismo tipo de datos que los valores.
Los elementos de valor que se combinan con un operador se denominan operandos de ese operador. Los
operadores combinados con elementos de valor forman expresiones, salvo el operador de asignación, que forma
una instrucción. Para obtener más información, vea Instrucciones (Guía de programación de C#).
Evaluación de expresiones
El resultado final de una expresión representa un valor, que suele ser de un tipo de datos conocido, como un tipo
Boolean , String o numérico.
15 * System.Math.Sqrt(9) + x
763 < 23
Varios operadores pueden realizar acciones en una sola expresión o instrucción, como se muestra en el ejemplo
siguiente.
x = 45 + y * z ^ 2
En el ejemplo anterior, Visual Basic realiza las operaciones en la expresión del lado derecho del operador de
asignación ( = ) y, a continuación, asigna el valor resultante a la variable x a la izquierda. No hay ningún límite
práctico al número de operadores que se pueden combinar en una expresión, pero es necesario conocer la
prioridad de operadores en Visual Basic para asegurarse de que se obtienen los resultados esperados.
Vea también
Operadores
Combinación eficaz de operadores
Instrucciones
Procedimientos en Visual Basic
27/11/2019 • 7 minutes to read • Edit Online
Un procedimiento es un bloque de instrucciones Visual Basic delimitadas por una instrucción de declaración (
Function , Sub , Operator , Get , Set ) y una declaración End coincidente. Todas las instrucciones ejecutables en
Visual Basic deben estar dentro de algún procedimiento.
Llamada a un procedimiento
Cuando invoca un procedimiento desde otra parte del código, está realizando una llamada a procedimiento.
Cuando el procedimiento termina de ejecutarse, devuelve el control al código que lo ha invocado, el cual se
conoce como código de llamada. El código de llamada es una instrucción, o una expresión de una instrucción, que
especifica el procedimiento por el nombre y le transfiere el control.
Parámetros y argumentos
En la mayoría de los casos, un procedimiento necesita operar en datos diferentes cada vez que se llama. Puede
pasar esta información al procedimiento como parte de la llamada a procedimiento. El procedimiento define cero
o más parámetros, cada uno de los cuales representa un valor que espera que le pase. Cada parámetro de la
definición del procedimiento tiene un argumento correspondiente en la llamada a procedimiento. Un argumento
representa el valor que pasa al parámetro correspondiente en una llamada a procedimiento determinada.
Tipos de procedimientos
Visual Basic usa varios tipos de procedimientos:
Los procedimientos Sub realizan acciones, pero no devuelven un valor al código de llamada.
Los procedimientos de control de eventos son procedimientos Sub que se ejecutan en respuesta a un
evento debido a las acciones del usuario o a un incidente en un programa.
Los procedimientos Function devuelven un valor al código de llamada. Pueden realizar otras acciones
antes de devolver el valor.
Algunas funciones escritas en C# devuelven un valor devuelto de referencia. Los autores de llamadas a
funciones pueden modificar el valor devuelto. Esta modificación se refleja en el estado del objeto al que se
ha llamado. A partir de Visual Basic 2017, el código de Visual Basic puede consumir referencias de valores
devueltos, aunque no puede devolver un valor por la referencia. Para obtener más información, consulte
Valores devueltos de referencia.
Los procedimientos Property devuelven y asignan valores de propiedades en objetos o módulos.
Los procedimientos Operator definen el comportamiento de un operador estándar cuando uno de los
operandos (o ambos) es una clase definida recientemente o una estructura.
Los procedimientos genéricos de Visual Basic definen uno o varios parámetros de tipo además de sus
parámetros normales, por lo que el código de llamada puede pasar tipos de datos determinados cada vez
que se hace una llamada.
Vea también
Crear un procedimiento
Subprocedimientos
Procedimientos de función
Procedimientos de propiedades
Procedimientos de operadores
Argumentos y parámetros de procedimiento
Procedimientos recursivos
Sobrecarga de procedimientos
Generic Procedures in Visual Basic
Objetos y clases
Instrucciones en Visual Basic
21/03/2020 • 23 minutes to read • Edit Online
Una instrucción en Visual Basic es una instrucción completa. Puede contener palabras clave, operadores,
variables, constantes y expresiones. Cada instrucción pertenece a una de las siguientes categorías:
Declaraciones , que nombran una variable, constante o procedimiento, y también pueden especificar un
tipo de datos.
Executable Statements , que inician acciones. Estas instrucciones pueden llamar a un método o
función, y pueden recorrer en bucle o bifurcar a través de bloques de código. Las instrucciones
ejecutables incluyen instrucciones de asignación , que asignan un valor o una expresión a una
variable o constante.
En este tema se describe cada categoría. Además, en este tema se describe cómo combinar varias instrucciones
en una sola línea y cómo continuar una instrucción en varias líneas.
Instrucciones de declaración
Las instrucciones de declaración se utilizan para asignar un nombre y definir procedimientos, variables,
propiedades, matrices y constantes. Al declarar un elemento de programación, también puede definir su tipo de
datos, nivel de acceso y ámbito. Para obtener más información, vea Características de elementos declarados.
El ejemplo siguiente contiene tres declaraciones.
La primera declaración es la Sub declaración. Junto con End Sub su instrucción coincidente, applyFormat
declara un procedimiento denominado . También especifica que applyFormat Public es , lo que significa que
cualquier código que puede hacer referencia a él puede llamarlo.
La segunda declaración es la Const instrucción, que declara la constante, limit especificando el Integer tipo
de datos y un valor de 33.
La tercera declaración es la Dim instrucción, que declara la variable thisWidget . El tipo de datos es un objeto
específico, es decir, un objeto creado a partir de la Widget clase. Puede declarar una variable para que sea de
cualquier tipo de datos elemental o de cualquier tipo de objeto que se expone en la aplicación que está
utilizando.
Valores iniciales
Cuando se ejecuta el código que contiene una instrucción de declaración, Visual Basic reserva la memoria
necesaria para el elemento declarado. Si el elemento contiene un valor, Visual Basic lo inicializa en el valor
predeterminado para su tipo de datos. Para obtener más información, consulte "Comportamiento" en Dim
(instrucción).
Puede asignar un valor inicial a una variable como parte de su declaración, como se muestra en el ejemplo
siguiente.
Dim m As Integer = 45
' The preceding declaration creates m and assigns the value 45 to it.
Si una variable es una variable de objeto, puede crear explícitamente una instancia de su clase cuando la declare
mediante la palabra clave New Operator, como se muestra en el ejemplo siguiente.
Tenga en cuenta que el valor inicial que especifique en una instrucción de declaración no se asigna a una
variable hasta que la ejecución alcanza su instrucción de declaración. Hasta ese momento, la variable contiene
el valor predeterminado para su tipo de datos.
Declaraciones ejecutables
Una instrucción ejecutable realiza una acción. Puede llamar a un procedimiento, bifurcara a otro lugar del
código, recorrer varias instrucciones o evaluar una expresión. Una instrucción de asignación es un caso especial
de una instrucción ejecutable.
En el ejemplo If...Then...Else siguiente se utiliza una estructura de control para ejecutar diferentes bloques
de código en función del valor de una variable. Dentro de cada bloque For...Next de código, un bucle ejecuta
un número especificado de veces.
La instrucción del ejemplo anterior comprueba el clockwise valor del parámetro . Si el True valor es
If
spinClockwise , aWidget llama al método de . Si el False valor es spinCounterClockwise , aWidget llama al
método de . La If...Then...Else estructura de End If control termina con .
El For...Next bucle dentro de cada bloque llama al método adecuado revolutions un número de veces igual
al valor del parámetro.
Declaraciones de asignación
Las instrucciones de asignación llevan a cabo operaciones de asignación, = que consisten en tomar el valor en
el lado derecho del operador de asignación ( ) y almacenarlo en el elemento de la izquierda, como en el ejemplo
siguiente.
v = 42
x = y + z + FindResult(3)
Dim a, b As String
a = "String variable assignment"
b = "Con" & "cat" & "enation"
' The preceding statement assigns the value "Concatenation" to b.
También puede Boolean asignar valores, Boolean mediante un Boolean literal o una expresión, como se
muestra en el ejemplo siguiente.
Dim r, s, t As Boolean
r = True
s = 45 > 1003
t = 45 > 1003 Or 45 > 17
' The preceding statements assign False to s and True to t.
Del mismo modo, puede asignar valores Char Date adecuados Object a los elementos de programación del
tipo de datos , , o . También puede asignar una instancia de objeto a un elemento declarado como de la clase
desde la que se crea esa instancia.
Declaraciones de asignación compuesta
Las instrucciones de asignación compuesta realizan primero una operación en una expresión antes de asignarla
a un elemento de programación. En el ejemplo siguiente se += muestra uno de estos operadores, , que
incrementa el valor de la variable en el lado izquierdo del operador por el valor de la expresión de la derecha.
n += 1
n = n + 1
Se puede realizar una variedad de operaciones de asignación de compuestos utilizando operadores de este
tipo. Para obtener una lista de estos operadores y más información sobre ellos, consulte Operadores de
asignación.
El operador de &= asignación de concatenación ( ) es útil para agregar una cadena al final de cadenas ya
existentes, como se muestra en el ejemplo siguiente.
Aunque ocasionalmente es conveniente, esta forma de sintaxis hace que el código sea difícil de leer y mantener.
Por lo tanto, se recomienda que mantenga una instrucción en una línea.
Return username.Split(delimiter)(position)
End Function
Después de una { llave abierta ( ) o } antes de una llave de cierre ( ). Por ejemplo:
Para obtener más información, vea Inicializadores de objeto: tipos con nombre y anónimos o
inicializadores de colección.
Después de una <%= expresión incrustada abierta ( ) o %> antes del cierre de una expresión incrustada ( )
dentro de un literal XML. Por ejemplo:
cmd.CommandText =
"SELECT * FROM Titles JOIN Publishers " &
"ON Publishers.PubId = Titles.PubID " &
"WHERE Publishers.State = 'CA'"
Dim memoryInUse =
My.Computer.Info.TotalPhysicalMemory +
My.Computer.Info.TotalVirtualMemory -
My.Computer.Info.AvailablePhysicalMemory -
My.Computer.Info.AvailableVirtualMemory
If TypeOf inStream Is
IO.FileStream AndAlso
inStream IsNot
Nothing Then
ReadFile(inStream)
End If
Dim fileStream =
My.Computer.FileSystem.
OpenTextFileReader(filePath)
Sin embargo, debe incluir un _ carácter de continuación de línea With ( ) después de un carácter
calificador de miembro cuando utilice la instrucción o proporcione valores en la lista de inicialización
para un tipo. Considere la posibilidad de romper la = línea después With del operador de asignación
(por ejemplo, ) cuando utilice instrucciones o listas de inicialización de objetos. Por ejemplo:
' Not allowed:
' Dim aType = New With { .
' PropertyName = "Value"
' Allowed:
Dim aType = New With {.PropertyName =
"Value"}
' Allowed:
With log
.Source =
"Application"
End With
Para obtener más información, consulte Con... Finalizar con inicializadores de instrucción u objeto: tipos
con nombre y anónimos.
Después de un . calificador de propiedad de eje XML ( o .@ o ... ). Sin embargo, debe incluir un _
carácter de continuación de línea With ( ) cuando especifique un calificador de miembro cuando utilice
la palabra clave. Por ejemplo:
<
Serializable()
>
Public Class Customer
Public Property Name As String
Public Property Company As String
Public Property Email As String
End Class
For Each p In
vsProcesses
Adición de comentarios
El código fuente no siempre se explica por sí mismo, incluso para el programador que lo escribió. Para ayudar a
documentar su código, por lo tanto, la mayoría de los programadores hacen uso liberal de los comentarios
incrustados. Los comentarios en el código pueden explicar un procedimiento o una instrucción particular a
cualquier persona que lo lea o trabaje con él más adelante. Visual Basic omite los comentarios durante la
compilación y no afectan al código compilado.
Las líneas de comentario comienzan ' con REM un apóstrofo ( ) o seguido de un espacio. Se pueden agregar
en cualquier parte del código, excepto dentro de una cadena. Para anexar un comentario a una instrucción,
inserte un apóstrofo o REM después de la instrucción, seguido del comentario. Los comentarios también
pueden ir en su propia línea separada. En el ejemplo siguiente se muestran estas posibilidades.
Secciones relacionadas
T ÉRM IN O DEF IN IC IÓ N
Interrumpir y combinar instrucciones en código Muestra cómo dividir una sola instrucción en varias líneas y
cómo colocar varias instrucciones en la misma línea.
Aplicar etiquetas a las instrucciones Muestra cómo etiquetar una línea de código.
Cadenas en Visual Basic
27/11/2019 • 2 minutes to read • Edit Online
En esta sección se describen los conceptos básicos del uso de cadenas en Visual Basic.
Esta sección
Introducción a las cadenas en Visual Basic
Muestra temas en los que se describen los conceptos básicos del uso de cadenas en Visual Basic.
Cómo: Crear cadenas mediante un objeto StringBuilder en Visual Basic
Muestra cómo crear eficazmente una cadena larga a partir de varias cadenas más pequeñas.
Buscar en una cadena
Muestra cómo se determina el índice de la primera aparición de una subcadena.
Conversión entre cadenas y otros tipos de datos en Visual Basic
Enumera temas en los que se describe cómo convertir cadenas en otros tipos de datos.
Validar cadenas en Visual Basic
Enumera temas en los que se explica cómo validar cadenas.
Tutorial: Cifrar y descifrar cadenas en Visual Basic
Muestra cómo cifrar y descifrar cadenas mediante la versión del proveedor de servicios criptográficos del
algoritmo 3DES (Triple Data Encryption Standard).
Vea también
Características del lenguaje Visual Basic
Variables en Visual Basic
27/11/2019 • 3 minutes to read • Edit Online
A menudo tiene que almacenar valores al realizar cálculos con Visual Basic. Por ejemplo, tal vez le interese calcular
varios valores, compararlos y realizar diversas operaciones con ellos, según el resultado de la comparación. Para
poder compararlos, debe conservar los valores.
Uso
Visual Basic, al igual que la mayoría de los lenguajes de programación, utiliza variables para almacenar valores. Las
variables tienen un nombre (la palabra que se usa para hacer referencia al valor contenido por la variable). Las
variables también tienen un tipo de datos (que determina el tipo de datos que puede almacenar la variable). Las
variables pueden representar una matriz si tienen que almacenar un conjunto indexado de elementos de datos
estrechamente relacionados.
La inferencia de tipo de variable local permite declarar variables sin especificar explícitamente un tipo de datos. En
su lugar, el compilador deduce el tipo de la variable a partir del tipo de la expresión de inicialización. Para obtener
más información, vea Local Type Inference (Inferencia de tipo de variable local) y Option Infer Statement
(Instrucción Option Infer).
Asignar valores
Para realizar cálculos y asignar el resultado a una variable debe usar instrucciones de asignación, como se muestra
en el ejemplo siguiente.
NOTE
El signo igual ( = ) de este ejemplo es un operador de asignación, no un operador de igualdad. El valor se asigna a la variable
applesSold .
Para obtener más información, vea How to: Move Data Into and Out of a Variable (Cómo: Introducir y extraer los
datos de una variable).
Variables y propiedades
Al igual que una variable, una propiedad representa un valor al que se puede tener acceso, pero es más compleja
que una variable. Una propiedad usa bloques de código que controlan cómo establecer y recuperar su valor. Para
obtener más información, vea Differences Between Properties and Variables in Visual Basic (Diferencias entre
propiedades y variables en Visual Basic).
Vea también
Declaración de variables
Variables de objeto
Solución de problemas de variables
Introducir y extraer los datos de una variable
Diferencias entre propiedades y variables en Visual Basic
Inferencia de tipo de variable local
XML en Visual Basic
27/11/2019 • 2 minutes to read • Edit Online
Visual Basic proporciona compatibilidad con lenguajes integrados que le permite interactuar con LINQ to XML.
En esta sección
En los temas de esta sección se presenta el uso de LINQ to XML con Visual Basic.
T EM A DESC RIP C IÓ N
Información general sobre LINQ to XML en Visual Basic Describe cómo Visual Basic admite LINQ to XML.
Crear XML en Visual Basic Describe cómo crear objetos de literales XML mediante el uso
de LINQ to XML.
Manipular XML en Visual Basic Describe cómo cargar y analizar XML mediante Visual Basic.
Obtener acceso a XML en Visual Basic Describe las propiedades de eje XML y los métodos LINQ to
XML para tener acceso a elementos y atributos XML.
Vea también
System.Xml.Linq
Literales XML
Propiedades del eje XML
LINQ to XML
Interoperabilidad COM (Visual Basic)
27/11/2019 • 3 minutes to read • Edit Online
El Modelo de objetos componentes (COM) permite que un objeto exponga su funcionalidad a otros componentes
y aplicaciones host. La mayoría del software actual incluye objetos COM. Aunque los ensamblados .NET son la
mejor opción para las aplicaciones nuevas, en ocasiones deberá usar objetos COM. En esta sección se tratan
algunos de los problemas asociados con la creación y el uso de objetos COM con Visual Basic.
Esta sección
Introducción a la interoperabilidad COM
Proporciona información general sobre la interoperabilidad COM.
Cómo: Hacer referencia a objetos COM desde Visual Basic
Describe cómo agregar referencias a objetos COM que tienen bibliotecas de tipos.
Trabajar con controles ActiveX
Muestra cómo usar los controles ActiveX existentes para agregar características al cuadro de herramientas de
Visual Studio.
Tutorial: Llamar a las API de Windows
Describe el proceso de llamar a las API que forman parte del sistema operativo Windows.
Llamar a las API de Windows
Muestra cómo definir y llamar a la función MessageBox en User32.dll.
Llamar a una función de Windows que adopta tipos sin signo
Muestra cómo llamar a una función de Windows que tiene un parámetro de un tipo sin signo.
Tutorial: Crear objetos COM con Visual Basic
Describe el proceso de crear objetos COM con y sin la plantilla de clase COM.
Solución de problemas de interoperabilidad
Trata algunos de los problemas que pueden producirse al usar COM.
Interoperabilidad COM en aplicaciones .NET Framework
Proporciona información general sobre cómo usar objetos COM y .NET Framework en la misma aplicación.
Tutorial: Implementación de la herencia mediante objetos COM
Describe cómo usar objetos COM existentes como base para nuevos objetos.
Secciones relacionadas
Interoperating with Unmanaged Code (Interoperar con código no administrado)
Describe los servicios de interoperabilidad proporcionados por Common Language Runtime.
Exponer componentes COM en .NET Framework
Describe el proceso de llamar a tipos COM mediante la interoperabilidad COM.
Exponer componentes de .NET Framework en COM
Describe la preparación y el uso de tipos administrados desde COM.
Aplicar atributos de interoperabilidad
Describe los atributos que se pueden usar al trabajar con código no administrado.
Información general sobre la interoperabilidad COM
(Visual Basic)
27/11/2019 • 6 minutes to read • Edit Online
El modelo de objetos componentes (COM) permite a un objeto exponer su funcionalidad a otros componentes y a
las aplicaciones host. Aunque los objetos COM son fundamentales para la programación de Windows durante
muchos años, las aplicaciones diseñadas para el Common Language Runtime (CLR) ofrecen muchas ventajas.
.NET Framework aplicaciones reemplazarán finalmente a las que se desarrollaron con COM. Hasta entonces, puede
que tenga que usar o crear objetos COM mediante Visual Studio. La interoperabilidad con COM, o la
interoperabilidad com, le permite usar objetos com existentes mientras realiza la transición al .NET Framework a su
propio ritmo.
Mediante el .NET Framework para crear componentes COM, puede usar la interoperabilidad COM sin registro. Esto
le permite controlar qué versión de DLL está habilitada cuando se instala más de una versión en un equipo y
permite a los usuarios finales usar XCOPY o FTP para copiar la aplicación en un directorio adecuado en su equipo
donde se puede ejecutar. Para obtener más información, consulte interoperabilidad com sin registro.
Assemblies
Un ensamblado es el bloque de creación principal de una aplicación .NET Framework. Se trata de una colección de
funciones que se compila, se versionan e implementan como una sola unidad de implementación que contiene
uno o varios archivos. Cada ensamblado contiene un manifiesto de ensamblado.
Ensamblados de interoperabilidad
Los ensamblados de interoperabilidad son .NET Framework ensamblados que se enlazan entre código
administrado y no administrado, asignando miembros de objetos COM a miembros administrados de .NET
Framework equivalentes. Los ensamblados de interoperabilidad creados por Visual Basic .NET controlan muchos
de los detalles del trabajo con objetos COM, como el cálculo de referencias de interoperabilidad.
Serialización de interoperabilidad
Todas las aplicaciones .NET Framework comparten un conjunto de tipos comunes que permiten la
interoperabilidad de objetos, independientemente del lenguaje de programación que se use. Los parámetros y los
valores devueltos de los objetos COM a veces utilizan tipos de datos que difieren de los usados en código
administrado. El cálculo de referencias de interoperabilidad es el proceso de empaquetar parámetros y devolver
valores en tipos de datos equivalentes a medida que se mueven a objetos com y desde ellos. Para obtener más
información, consulte serialización de interoperabilidad.
Vea también
Interoperabilidad COM
Tutorial: Implementación de la herencia mediante objetos COM
Interoperating with Unmanaged Code (Interoperar con código no administrado)
Solución de problemas de interoperabilidad
Ensamblados de .NET
TlbImp.exe (Importador de la biblioteca de tipos)
Tlbexp.exe (Exportador de la biblioteca de tipos)
Serialización de interoperabilidad
Interoperabilidad COM sin registro
Cómo: Hacer referencia a objetos COM desde Visual
Basic
23/10/2019 • 4 minutes to read • Edit Online
En Visual Basic, la adición de referencias a objetos COM que tienen bibliotecas de tipos requiere la creación de un
ensamblado de interoperabilidad para la biblioteca COM. Las referencias a los miembros del objeto COM se
enrutan al ensamblado de interoperabilidad y, a continuación, se reenvían al objeto COM real. Las respuestas del
objeto COM se enrutan al ensamblado de interoperabilidad y se reenvían a la aplicación .NET Framework.
Puede hacer referencia a un objeto COM sin utilizar un ensamblado de interoperabilidad incrustando la
información de tipo para el objeto COM en un ensamblado .NET. Para insertar información de tipo, establezca la
propiedad Embed Interop Types en True para la referencia al objeto COM. Si va a compilar mediante el
compilador de línea de comandos, utilice la opción /link para hacer referencia a la biblioteca COM. Para obtener
más información, vea -Link (Visual Basic).
Visual Basic crea automáticamente ensamblados de interoperabilidad al agregar una referencia a una biblioteca de
tipos desde el entorno de desarrollo integrado (IDE). Al trabajar desde la línea de comandos, puede usar la utilidad
TlbImp para crear manualmente ensamblados de interoperabilidad.
Para agregar referencias a objetos COM
1. En el menú proyecto , elija Agregar referencia y, a continuación, haga clic en la pestaña com del cuadro
de diálogo.
2. Seleccione el componente que desea usar en la lista de objetos COM.
3. Para simplificar el acceso al ensamblado de interoperabilidad, agregue una instrucción Imports a la parte
superior de la clase o módulo en el que va a usar el objeto COM. Por ejemplo, en el ejemplo de código
siguiente se importa el espacio de nombres INKEDLib para los objetos a los que se hace referencia en la
biblioteca de Microsoft InkEdit Control 1.0 .
Imports INKEDLib
Class Sample
Private s As IInkCursor
End Class
Puede usar TlbImp para crear ensamblados de interoperabilidad para bibliotecas de tipos, incluso para
objetos COM no registrados. Sin embargo, los objetos COM a los que hacen referencia los ensamblados de
interoperabilidad deben estar registrados correctamente en el equipo en el que se van a utilizar. Puede
registrar un objeto COM mediante la utilidad regsvr32 incluida en el sistema operativo Windows.
Vea también
Interoperabilidad COM
TlbImp.exe (Importador de la biblioteca de tipos)
Tlbexp.exe (Exportador de la biblioteca de tipos)
Tutorial: Implementación de la herencia mediante objetos COM
Solución de problemas de interoperabilidad
Imports (instrucción), espacio de nombres y tipo .NET
Cómo: Trabajar con controles ActiveX (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Los controles ActiveX son componentes COM u objetos que se pueden insertar en una página web o en otra
aplicación para reutilizar la funcionalidad empaquetada que otra persona ha programado. Puede usar controles
ActiveX desarrollados para Visual Basic 6,0 y versiones anteriores para agregar características al cuadro de
herramientas de Visual Studio.
Para agregar controles ActiveX al cuadro de herramientas
1. En el menú herramientas , haga clic en elegir elementos del cuadro de herramientas .
Aparece el cuadro de diálogo elegir cuadro de herramientas .
2. Haga clic en la pestaña componentes com .
3. Active la casilla situada junto al control ActiveX que desee usar y, a continuación, haga clic en Aceptar .
El nuevo control aparece con las demás herramientas del cuadro de herramientas .
NOTE
Puede utilizar la utilidad Aximp para crear manualmente un ensamblado de interoperabilidad para los controles
ActiveX. Para obtener más información, vea Aximp. exe (Windows Forms importador de controles ActiveX).
Vea también
Interoperabilidad COM
Procedimiento para agregar controles ActiveX a formularios Windows Forms
Aximp.exe (Importador de controles ActiveX de Windows Forms)
Consideraciones al hospedar un control ActiveX en Windows Forms
Solución de problemas de interoperabilidad
Tutorial: Llamar a las API de Windows (Visual Basic)
27/11/2019 • 18 minutes to read • Edit Online
Las API de Windows son bibliotecas de vínculos dinámicos (dll) que forman parte del sistema operativo Windows.
Se usan para realizar tareas cuando es difícil escribir procedimientos equivalentes propios. Por ejemplo, Windows
proporciona una función denominada FlashWindowEx que le permite hacer que la barra de título de una aplicación
alterne entre sombras claras y oscuras.
La ventaja de usar las API de Windows en el código es que pueden ahorrar tiempo de desarrollo porque contienen
docenas de funciones útiles que ya están escritas y en espera de usarse. El inconveniente es que las API de
Windows pueden ser difíciles de trabajar con y Unforgiving cuando hay algún problema.
Las API de Windows representan una categoría especial de interoperabilidad. Las API de Windows no usan código
administrado, no tienen bibliotecas de tipos integrados y usan tipos de datos que son diferentes de los que se
usan con Visual Studio. Debido a estas diferencias, y dado que las API de Windows no son objetos COM, la
interoperabilidad con las API de Windows y el .NET Framework se realiza mediante la invocación de plataforma o
PInvoke. La invocación de plataforma es un servicio que permite al código administrado llamar a funciones no
administradas implementadas en archivos dll. Para obtener más información, vea consumir funciones dll no
administradas. Puede usar PInvoke en Visual Basic mediante la instrucción Declare o aplicando el atributo
DllImport a un procedimiento vacío.
Las llamadas a la API de Windows eran una parte importante de la programación de Visual Basic en el pasado,
pero rara vez son necesarias con Visual Basic .NET. Siempre que sea posible, debe usar código administrado desde
el .NET Framework para realizar tareas, en lugar de llamadas a la API de Windows. En este tutorial se proporciona
información sobre las situaciones en las que es necesario usar las API de Windows.
NOTE
Es posible que el equipo muestre nombres o ubicaciones diferentes para algunos de los elementos de la interfaz de usuario
de Visual Studio en las siguientes instrucciones. La edición de Visual Studio que se tenga y la configuración que se utilice
determinan estos elementos. Para obtener más información, vea Personalizar el IDE.
NOTE
Para obtener información completa sobre las API de Windows, consulte la documentación del SDK de Win32 en la
API de Windows de Platform SDK. Para obtener más información sobre las constantes que usan las API de Windows,
examine los archivos de encabezado como Windows. h incluido con el SDK de la plataforma.
2. Abra un nuevo proyecto de aplicación para Windows; para ello, haga clic en nuevo en el menú archivo y, a
continuación, haga clic en proyecto . Aparece el cuadro de diálogo Nuevo proyecto .
3. Seleccione aplicación de Windows en la lista de plantillas de proyecto de Visual Basic. Se muestra el
nuevo proyecto.
4. Agregue la siguiente función de Declare a la clase o módulo en el que desea utilizar el archivo DLL:
NOTE
Las versiones anteriores de Visual Basic permitían declarar parámetros As Any , lo que significa que se pueden usar datos
de cualquier tipo de datos. Visual Basic requiere que se use un tipo de datos específico para todas las instrucciones de
Declare .
3. Agregue instrucciones de Const equivalentes a la clase o módulo para que estas constantes estén
disponibles para la aplicación. Por ejemplo:
P a ra l l a ma r a l p ro c e d i mi e n t o DL L
1. Agregue un botón denominado Button1 al formulario de inicio del proyecto y, a continuación, haga doble
clic en él para ver su código. Se muestra el controlador de eventos para el botón.
2. Agregue código al controlador de eventos Click para el botón que agregó, para llamar al procedimiento y
proporcione los argumentos adecuados:
3. Ejecute el proyecto presionando F5. El cuadro de mensaje se muestra con los botones sí y sin respuesta.
Haga clic en cualquiera de ellas.
Serialización de datos
Visual Basic convierte automáticamente los tipos de datos de los parámetros y los valores devueltos para las
llamadas a la API de Windows, pero puede usar el atributo MarshalAs para especificar explícitamente los tipos de
datos no administrados que una API espera. Para obtener más información sobre el cálculo de referencias de
interoperabilidad, vea serialización de interoperabilidad.
P a r a u sa r d e c l a r e y M a r sh a l A s e n u n a l l a m a d a A P I
1. Determine el nombre de la función a la que desea llamar, además de sus argumentos, tipos de datos y valor
devuelto.
2. Para simplificar el acceso al MarshalAs atributo, agregue una instrucción Imports a la parte superior del
código de la clase o módulo, como en el ejemplo siguiente:
Imports System.Runtime.InteropServices
3. Agregue un prototipo de función para la función importada a la clase o módulo que está usando y aplique
el atributo MarshalAs a los parámetros o al valor devuelto. En el ejemplo siguiente, una llamada API que
espera el tipo void* se serializa como AsAny :
Imports System.Runtime.InteropServices
6. Declare una función vacía que preceda a la instrucción End Class del formulario y asigne a la función el
nombre MoveFile .
7. Aplique los modificadores Public y Shared a la declaración de función y establezca los parámetros para
MoveFile en función de los argumentos que utiliza la función de la API de Windows:
La función puede tener cualquier nombre de procedimiento válido; el atributo DllImport especifica el
nombre en el archivo DLL. También controla el cálculo de referencias de interoperabilidad para los
parámetros y los valores devueltos, por lo que puede elegir los tipos de datos de Visual Studio que son
similares a los tipos de datos que usa la API.
8. Aplique el atributo DllImport a la función vacía. El primer parámetro es el nombre y la ubicación del
archivo DLL que contiene la función a la que se está llamando. No es necesario especificar la ruta de acceso
de los archivos que se encuentran en los directorios del sistema de Windows. El segundo parámetro es un
argumento con nombre que especifica el nombre de la función en la API de Windows. En este ejemplo, el
atributo DllImport fuerza que las llamadas a MoveFile se reenvíen a MoveFileW en KERNEL32. DLL. El
método MoveFileW copia un archivo de la ruta de acceso src a la ruta de acceso dst .
10. Cree un archivo denominado test. txt y colóquelo en el directorio C:\Tmp del disco duro. Cree el directorio
tmp si es necesario.
11. Presione F5 para iniciar la aplicación. Aparece el formulario principal.
12. Haga clic en BUTTON2 . Se muestra el mensaje "el archivo se ha despasado correctamente" si se puede
cambiar el archivo.
Vea también
DllImportAttribute
MarshalAsAttribute
Declare (instrucción)
Auto
Alias
Interoperabilidad COM
Crear prototipos en código administrado
Serialización de un delegado como un método de devolución de llamada
Cómo: Llamar a las API de Windows (Visual Basic)
08/01/2020 • 2 minutes to read • Edit Online
En este ejemplo se define y se llama a la función MessageBox en user32. dll y, a continuación, se le pasa una cadena.
Ejemplo
' Defines the MessageBox function.
Public Class Win32
Declare Auto Function MessageBox Lib "user32.dll" (
ByVal hWnd As Integer, ByVal txt As String,
ByVal caption As String, ByVal Type As Integer
) As Integer
End Class
Compilar el código
Para este ejemplo se necesita:
Una referencia al espacio de nombres System.
Programación sólida
Las condiciones siguientes pueden provocar una excepción:
El método no es estático, es abstracto o se ha definido previamente. El tipo primario es una interfaz o la
longitud del nombre o DllName es cero. (ArgumentException)
El nombre o DllName es Nothing . (ArgumentNullException)
Tipo contenedor que se ha creado anteriormente mediante CreateType . (InvalidOperationException)
Vea también
Aproximación a la invocación de plataforma
Ejemplos de invocación de plataforma
Consumir funciones DLL no administradas
Definir un método con la emisión de la reflexión
Tutorial: Llamar a las API de Windows
Interoperabilidad COM
Cómo: Llamar a una función de Windows que
adopta tipos sin signo (Visual Basic)
27/11/2019 • 3 minutes to read • Edit Online
Si está consumiendo una clase, un módulo o una estructura que tiene miembros de tipos enteros sin signo, puede
tener acceso a estos miembros con Visual Basic.
Para llamar a una función de Windows que toma un tipo sin signo
1. Use una instrucción Declare para indicar Visual Basic qué biblioteca contiene la función, cuál es su nombre
en esa biblioteca, cuál es la secuencia de llamada y cómo convertir cadenas al llamarla.
2. En la instrucción Declare , use UInteger , ULong , UShort o Byte según corresponda para cada parámetro
con un tipo sin signo.
3. Consulte la documentación de la función de Windows a la que está llamando para buscar los nombres y
valores de las constantes que usa. Muchos de ellos se definen en el archivo WinUser. h.
4. Declare las constantes necesarias en el código. Muchas constantes de Windows son valores sin signo de 32
bits y debe declarar estas As UInteger .
5. Llame a la función de la forma normal. En el ejemplo siguiente se llama a la función de Windows
MessageBox , que toma un argumento de entero sin signo.
Cau t i on
Los tipos de datos UInteger , ULong , UShort y SByte no forman parte de la independencia del lenguaje y
de los componentes independientes del lenguaje (CLS), por lo que el código conforme a CLS no puede
consumir un componente que los utiliza.
IMPORTANT
La realización de una llamada a código no administrado, como la interfaz de programación de aplicaciones (API) de
Windows, expone el código a posibles riesgos de seguridad.
IMPORTANT
La llamada a la API de Windows requiere el permiso del código no administrado, lo que puede afectar a su ejecución
en situaciones de confianza parcial. Para obtener más información, vea SecurityPermission y permisos de acceso del
código.
Vea también
Tipos de datos
Integer (tipo de datos)
UInteger (tipo de datos)
Declare (instrucción)
Tutorial: Llamar a las API de Windows
Tutorial: Crear objetos COM con Visual Basic
27/11/2019 • 8 minutes to read • Edit Online
Al crear nuevas aplicaciones o componentes, es mejor crear ensamblados de .NET Framework. Sin embargo, Visual
Basic también facilita la exposición de un componente de .NET Framework a COM. Esto le permite proporcionar
nuevos componentes para conjuntos de aplicaciones anteriores que requieren componentes COM. En este tutorial
se muestra cómo usar Visual Basic para exponer objetos .NET Framework como objetos COM, con y sin la plantilla
de clase COM.
La forma más fácil de exponer objetos COM es usar la plantilla de clase COM. La plantilla de clase COM crea una
nueva clase y, a continuación, configura el proyecto para generar la clase y el nivel de interoperabilidad como un
objeto COM y registrarlo en el sistema operativo.
NOTE
Aunque también puede exponer una clase creada en Visual Basic como un objeto COM para el uso de código no
administrado, no es un objeto COM verdadero y Visual Basic no puede usar. Para obtener más información, consulte
interoperabilidad com en aplicaciones .NET Framework.
NOTE
Es posible que el equipo muestre nombres o ubicaciones diferentes para algunos de los elementos de la interfaz de usuario
de Visual Studio en las siguientes instrucciones. La edición de Visual Studio que se tenga y la configuración que se utilice
determinan estos elementos. Para obtener más información, vea Personalizar el IDE.
4. En el menú Herramientas , haga clic en Crear GUID . En el cuadro de diálogo Crear GUID , haga clic en
Formato de Registro y luego en Copiar . Haga clic en Salir .
5. Reemplace la cadena vacía del ClassId por el GUID y quite las llaves iniciales y finales. Por ejemplo, si el
GUID proporcionado por Guidgen es "{2C8B0AEE-02C9-486e-B809-C780A11530FE}" , el código debería aparecer
de la siguiente manera.
6. Repita los pasos anteriores para las constantes InterfaceId y EventsId , como en el ejemplo siguiente.
NOTE
Asegúrese de que los GUID son nuevos y únicos; de lo contrario, el componente COM podría estar en conflicto con
otros componentes COM.
7. Agregue el atributo ComClass a ComClass1 , especificando los GUID para el identificador de clase, el
identificador de interfaz y el identificador de eventos, como en el ejemplo siguiente:
8. Las clases COM deben tener un constructor de Public Sub New() sin parámetros o la clase no se registrará
correctamente. Agregue un constructor sin parámetros a la clase:
Public Sub New()
MyBase.New()
End Sub
9. Agregue propiedades, métodos y eventos a la clase, y finalice con una instrucción End Class . Seleccione
compilar solución en el menú compilar . Visual Basic crea el ensamblado y registra el objeto COM con el
sistema operativo.
NOTE
Los objetos COM generados con Visual Basic no pueden ser utilizados por otras aplicaciones Visual Basic porque no
son objetos COM verdaderos. Los intentos de agregar referencias a estos objetos COM producirán un error. Para
obtener más información, consulte interoperabilidad com en aplicaciones .NET Framework.
Vea también
ComClassAttribute
Interoperabilidad COM
Tutorial: Implementación de la herencia mediante objetos COM
#Region (directiva)
Interoperabilidad COM en aplicaciones .NET Framework
Solución de problemas de interoperabilidad
Solucionar problemas de interoperabilidad (Visual
Basic)
27/11/2019 • 18 minutes to read • Edit Online
Al interoperar entre COM y el código administrado del .NET Framework, puede encontrar uno o varios de los
siguientes problemas comunes.
Serialización de interoperabilidad
En ocasiones, puede que tenga que usar tipos de datos que no forman parte de la .NET Framework. Los
ensamblados de interoperabilidad controlan la mayor parte del trabajo de los objetos COM, pero puede que
tenga que controlar los tipos de datos que se utilizan cuando los objetos administrados se exponen a COM. Por
ejemplo, las estructuras de las bibliotecas de clases deben especificar el BStr tipo no administrado en las cadenas
enviadas a los objetos COM creados por Visual Basic 6,0 y versiones anteriores. En tales casos, puede usar el
atributo MarshalAsAttribute para que los tipos administrados se expongan como tipos no administrados.
Métodos sobrecargados
Aunque puede crear métodos sobrecargados con Visual Basic, no son compatibles con COM. Cuando una clase
que contiene métodos sobrecargados se expone como un objeto COM, se generan nuevos nombres de método
para los métodos sobrecargados.
Por ejemplo, considere una clase que tiene dos sobrecargas del método Synch . Cuando la clase se expone como
un objeto COM, los nuevos nombres de método generados podrían ser Synch y Synch_2 .
El cambio de nombre puede producir dos problemas para los consumidores del objeto COM.
1. Es posible que los clientes no esperen los nombres de método generados.
2. Los nombres de método generados en la clase expuesta como un objeto COM pueden cambiar cuando se
agregan nuevas sobrecargas a la clase o a su clase base. Esto puede producir problemas de control de
versiones.
Para resolver ambos problemas, asigne a cada método un nombre único, en lugar de usar sobrecarga, al
desarrollar objetos que se expondrán como objetos COM.
Uso de objetos COM mediante ensamblados de interoperabilidad
Los ensamblados de interoperabilidad se usan casi como si fueran reemplazos de código administrados para los
objetos COM que representan. Sin embargo, dado que son contenedores y no objetos COM reales, existen
algunas diferencias entre el uso de ensamblados de interoperabilidad y ensamblados estándar. Estas áreas de
diferencia incluyen la exposición de las clases y los tipos de datos de los parámetros y los valores devueltos.
Sin embargo, si usa la clase COM como base para una clase derivada, debe usar la clase de interoperabilidad que
representa la clase COM, como en el código siguiente:
Class DerivedCommand
Inherits ADODB.CommandClass
End Class
NOTE
Los ensamblados de interoperabilidad implementan implícitamente interfaces que representan clases COM. No debe
intentar usar la instrucción Implements para implementar estas interfaces o se producirá un error.
Dim db As DAO.Database
' Open the database.
Set db = DBEngine.OpenDatabase("C:\nwind.mdb")
' Use the database object.
Visual Basic .NET requiere que siempre se creen instancias de objetos COM antes de poder usar sus métodos. Para
usar estos métodos en Visual Basic, declare una variable de la clase deseada y use la palabra clave New para
asignar el objeto a la variable de objeto. La palabra clave Shared se puede usar cuando se desea asegurarse de
que solo se crea una instancia de la clase.
Sub DAOOpenRecordset()
Dim db As DAO.Database
Dim rst As DAO.Recordset
Dim fld As DAO.Field
' Open the database.
db = DBEngine.OpenDatabase("C:\nwind.mdb")
ADODBConnect()
End Sub
' This is the event handler for the cn_ConnectComplete event raised
' by the ADODB.Connection object when a database is opened.
Dim x As Integer = 6
Dim y As Integer = 0
Try
x = CInt(x / y) ' Attempt to divide by zero.
' This procedure would fail silently without exception handling.
Catch ex As Exception
MsgBox("There was an error: " & ex.Message)
End Try
End Sub
Este ejemplo genera un error según lo esperado. Sin embargo, si intenta usar el mismo ejemplo sin el bloque
Try...Catch...Finally , el error se omite como si utilizara la instrucción OnError Resume Next . Sin el control de
errores, se produce un error en la división por cero de forma silenciosa. Dado que tales errores nunca generan
errores de excepción no controlados, es importante usar algún tipo de control de excepciones en los
controladores de eventos que controlan los eventos de los objetos COM.
Descripción de los errores de interoperabilidad COM
Sin el control de errores, las llamadas de interoperabilidad a menudo generan errores que proporcionan poca
información. Siempre que sea posible, utilice el control de errores estructurado para proporcionar más
información acerca de los problemas cuando se producen. Esto puede ser especialmente útil al depurar
aplicaciones. Por ejemplo:
Try
' Place call to COM object here.
Catch ex As Exception
' Display information about the failed call.
End Try
Puede encontrar información como la descripción del error, HRESULT y el origen de los errores COM mediante el
examen del contenido del objeto de excepción.
Si no tiene acceso al código fuente para el procedimiento al que se llama, puede forzar que la propiedad se pase
por valor agregando un conjunto adicional de corchetes alrededor del procedimiento que realiza la llamada. Por
ejemplo, en un proyecto que tenga una referencia al objeto COM de la biblioteca de Microsoft Objetos de datos
ActiveX 2,8, puede usar:
Si desea usar objetos COM y .NET Framework objetos en la misma aplicación, debe abordar las diferencias en la
forma en que los objetos existen en la memoria. Un objeto de .NET Framework se encuentra en la memoria
administrada (la memoria controlada por el Common Language Runtime) y puede moverse por el tiempo de
ejecución según sea necesario. Un objeto COM se encuentra en la memoria no administrada y no se espera que
se mueva a otra ubicación de memoria. Visual Studio y el .NET Framework proporcionan herramientas para
controlar la interacción de estos componentes administrados y no administrados. Para obtener más información
sobre el código administrado, vea Common Language Runtime.
Además de usar objetos COM en aplicaciones .NET, puede que también desee usar Visual Basic para desarrollar
objetos accesibles desde código no administrado a través de COM.
Los vínculos de esta página proporcionan detalles sobre las interacciones entre los objetos COM y .NET
Framework.
Secciones relacionadas
Interoperating with Unmanaged Code (Interoperar con Describe brevemente algunos de los problemas de
código no administrado) interacción entre el código administrado y no administrado, y
proporciona vínculos para seguir estudiando.
TlbImp.exe (Importador de la biblioteca de tipos) Describe la herramienta que se puede usar para convertir las
definiciones de tipos que se encuentran en una biblioteca de
tipos COM en definiciones equivalentes en un ensamblado
de Common Language Runtime.
Tutorial: Implementar la herencia mediante objetos
COM (Visual Basic)
27/11/2019 • 11 minutes to read • Edit Online
Puede derivar Visual Basic clases de Public clases de objetos COM, incluso las creadas en versiones anteriores
de Visual Basic. Las propiedades y los métodos de las clases heredadas de objetos COM se pueden invalidar o
sobrecargar del mismo modo que las propiedades y los métodos de cualquier otra clase base se pueden invalidar
o sobrecargar. La herencia de objetos COM resulta útil cuando tiene una biblioteca de clases existente que no
desea volver a compilar.
En el procedimiento siguiente se muestra cómo utilizar Visual Basic 6,0 para crear un objeto COM que contenga
una clase y, a continuación, utilizarlo como clase base.
NOTE
Es posible que el equipo muestre nombres o ubicaciones diferentes para algunos de los elementos de la interfaz de usuario
de Visual Studio en las siguientes instrucciones. La edición de Visual Studio que se tenga y la configuración que se utilice
determinan estos elementos. Para obtener más información, vea Personalizar el IDE.
Function AddNumbers(
ByVal SomeNumber As Integer,
ByVal AnotherNumber As Integer) As Integer
10. Cree y registre el objeto COM; para ello, haga clic en crear ComObject1. dll en el menú archivo .
NOTE
Aunque también puede exponer una clase creada con Visual Basic como un objeto COM, no es un objeto COM
verdadero y no se puede usar en este tutorial. Para obtener más información, consulte interoperabilidad com en
aplicaciones .NET Framework.
Ensamblados de interoperabilidad
En el procedimiento siguiente, creará un ensamblado de interoperabilidad, que actúa como un puente entre el
código no administrado (por ejemplo, un objeto COM) y el código administrado que usa Visual Studio. El
ensamblado de interoperabilidad que Visual Basic crea controla muchos de los detalles del trabajo con objetos
COM, como el cálculo de referencias de interoperabilidad, el proceso de empaquetado de parámetros y valores
devueltos en tipos de datos equivalentes a medida que se mueven a objetos com y desde ellos. La referencia de la
aplicación Visual Basic apunta al ensamblado de interoperabilidad, no al objeto COM real.
Para usar un objeto COM con Visual Basic 2005 y versiones posteriores
1. Abra un proyecto Aplicación Windows de Visual Basic nuevo.
2. En el menú Proyecto , haga clic en Agregar referencia .
Aparecerá el cuadro de diálogo Agregar referencia .
3. En la pestaña com , haga doble clic en ComObject1 en la lista nombre de componente y haga clic en
Aceptar .
4. En el menú Proyecto , haga clic en Agregar nuevo elemento .
Se abrirá el cuadro de diálogo Agregar nuevo elemento .
5. En el panel plantillas , haga clic en clase .
El nombre de archivo predeterminado, Class1.vb , aparece en el campo nombre . Cambie este campo a
MathClass. VB y haga clic en Agregar . Esto crea una clase denominada MathClass y muestra su código.
6. Agregue el código siguiente al principio de MathClass para heredar de la clase COM.
' The inherited class is called MathFunctions in the base class,
' but the interop assembly appends the word Class to the name.
Inherits ComObject1.MathFunctionsClass
' This method overloads the method AddNumbers from the base class.
Overloads Function AddNumbers(
ByVal SomeNumber As Integer,
ByVal AnotherNumber As Integer) As Integer
La nueva clase hereda las propiedades de la clase base en el objeto COM, sobrecarga un método y define un
nuevo método para extender la clase.
Para probar la clase heredada
1. Agregue un botón al formulario de inicio y, a continuación, haga doble clic en él para ver su código.
2. En el procedimiento del controlador de eventos Click del botón, agregue el código siguiente para crear
una instancia de MathClass y llamar a los métodos sobrecargados:
Vea también
Interoperabilidad COM en aplicaciones .NET Framework
Inherits (instrucción)
Short (tipo de datos)
Referencia del lenguaje Visual Basic
08/01/2020 • 3 minutes to read • Edit Online
En esta sección se proporciona información de referencia sobre diversos aspectos del lenguaje Visual Basic.
Esta sección
Convenciones tipográficas y de código
Resume la forma en que se da formato a las palabras clave, los marcadores de posición y otros elementos del
lenguaje en la documentación de Visual Basic.
Miembros de la biblioteca en tiempo de ejecución de Visual Basic
Enumera las clases y los módulos del espacio de nombres Microsoft.VisualBasic, con vínculos a sus funciones
miembro, métodos, propiedades, constantes y enumeraciones.
Palabras clave
Enumera todas las palabras clave de Visual Basic y proporciona vínculos a más información.
Atributos (Visual Basic)
Documenta los atributos disponibles en Visual Basic.
Constantes y enumeraciones
Documenta las constantes y enumeraciones disponibles en Visual Basic.
Tipos de datos
Documenta los tipos de datos disponibles en Visual Basic.
Directivas
Documenta las directivas de compilador disponibles en Visual Basic.
Funciones
Documenta las funciones en tiempo de ejecución disponibles en Visual Basic.
Modificadores
Enumera los modificadores en tiempo de ejecución de Visual Basic y proporciona vínculos a más información.
Módulos
Documenta los módulos disponibles en Visual Basic y sus miembros.
Nothing
Describe el valor predeterminado de cualquier tipo de datos.
Objects
Documenta los objetos disponibles en Visual Basic y sus miembros.
Operadores
Documenta los operadores disponibles en Visual Basic.
Propiedades
Documenta las propiedades disponibles en Visual Basic.
Consultas
Proporciona información de referencia sobre el uso de expresiones LINQ (Language-Integrated Query) en el
código.
Instrucciones
Documenta la declaración y las instrucciones ejecutables disponibles en Visual Basic.
Etiquetas XML para comentarios
Describe los comentarios de documentación para los que se proporciona IntelliSense en el editor de código de
Visual Basic.
Propiedades del eje XML
Proporciona vínculos a información sobre el uso de propiedades de eje XML para tener acceso a XML
directamente en el código.
Literales XML
Proporciona vínculos a información sobre el uso de literales XML para incorporar XML directamente en el
código.
Mensajes de error
Proporciona una lista de Visual Basic los mensajes de error del compilador y en tiempo de ejecución, y ayuda
para controlarlos.
Secciones relacionadas
Compilador de línea de comandos de Visual Basic
Describe cómo usar el compilador de línea de comandos como alternativa a la compilación de programas desde
el entorno de desarrollo integrado (IDE) de Visual Studio.
Seleccione la versión de idioma de Visual Basic
23/10/2019 • 5 minutes to read • Edit Online
Valor predeterminado es la última versión principal del lenguaje que se ha liberado el compilador de Visual
Basic. Puede elegir compilar cualquier proyecto con una versión nueva del lenguaje. Elegir la versión más
reciente del lenguaje permite que el proyecto use las últimas características de ese lenguaje. En otros
escenarios, puede ser necesario validar que un proyecto se compile correctamente cuando se usa una versión
anterior del lenguaje.
Esta capacidad hace que la decisión de instalar nuevas versiones del SDK y las herramientas en el entorno de
desarrollo no esté vinculada a la decisión de incorporar nuevas características del lenguaje en un proyecto.
Puede instalar el SDK y las herramientas más recientes en el equipo de compilación. Cada proyecto se puede
configurar para que, durante su compilación, se use una versión de lenguaje específica.
Hay tres maneras de establecer la versión de idioma:
Editar manualmente el .vbproj archivo
Establezca la versión de idioma para varios proyectos en un subdirectorio
Configurar la -langversion opción del compilador
<PropertyGroup>
<LangVersion>latest</LangVersion>
</PropertyGroup>
El valor latest usa la versión secundaria más reciente del lenguaje Visual Basic. Los valores válidos son:
VA LO R SIGN IF IC A DO
Las cadenas especiales default y latest se resuelven en las versiones de lenguaje principal y secundaria
respectivamente más recientes que haya instaladas en el equipo de compilación.
<Project>
<PropertyGroup>
<LangVersion>15.5</LangVersion>
</PropertyGroup>
</Project>
Ahora, las compilaciones en cada subdirectorio del directorio que contiene ese archivo usará la sintaxis de la
versión 15.5 de Visual Basic. Para obtener más información, consulte el artículo Personalizar una compilación.
Convenciones tipográficas
E JEM P LO DESC RIP C IÓ N
Sub , If , ChDir , Print , True , Debug Las palabras clave específicas del lenguaje y los miembros en
tiempo de ejecución tienen letras mayúsculas iniciales y tienen
el formato que se muestra en este ejemplo.
SmallProject , ButtonCollection Las palabras y frases que se le indiquen que escriba tienen el
formato que se muestra en este ejemplo.
Module (instrucción) Los vínculos en los que puede hacer clic para ir a otra página
de ayuda tienen el formato que se muestra en este ejemplo.
{ Public | Friend | Private } En la sintaxis, cuando debe elegir entre dos o más elementos,
los elementos se incluyen entre llaves y se separan mediante
barras verticales.
ESC, ENTRAR Los nombres de clave y las secuencias de teclas del teclado
aparecen en todas las letras mayúsculas.
ALT+F1 Cuando aparecen signos más (+) entre los nombres de clave,
se debe mantener presionada una tecla mientras se presiona
la otra. Por ejemplo, ALT + F1 significa mantener presionada la
tecla ALT mientras se presiona la tecla F1.
Convenciones de código
E JEM P LO DESC RIP C IÓ N
sampleString = "Hello, world!" Los ejemplos de código aparecen en una fuente de punto fijo
y tienen el formato que se muestra en este ejemplo.
La instrucción anterior establece el valor de sampleString Los elementos de código del texto explicativo aparecen en una
en "Hello, World!" fuente de punto fijo, tal como se muestra en este ejemplo.
Vea también
Referencia del lenguaje Visual Basic
Palabras clave
Miembros de la biblioteca en tiempo de ejecución de Visual Basic
Convenciones de nomenclatura de Visual Basic
Interrumpir y combinar instrucciones en código
Comentarios en código
Miembros de la biblioteca en tiempo de ejecución
de Visual Basic
27/11/2019 • 2 minutes to read • Edit Online
El espacio de nombres Microsoft.VisualBasic contiene las clases, los módulos, las constantes y las
enumeraciones que constituyen la biblioteca en tiempo de ejecución de Visual Basic. Estos miembros de
Biblioteca proporcionan procedimientos, propiedades y valores constantes que puede usar en el código. Cada
módulo y clase representa una categoría determinada de funcionalidad.
Tab VerticalTab
vbYesNo vbYesNoCancel
WeekdayName Year
Raise Raise
Write WriteLine
SYD
HideModuleNameAttribute
VbTypeName
Shell Switch
Bounds Length
Length
Randomize Rnd
Vea también
Constantes y enumeraciones
Palabras clave
Palabras clave de Visual Basic
27/11/2019 • 7 minutes to read • Edit Online
En las tablas siguientes se enumeran todas las palabras clave del lenguaje Visual Basic.
NOTE
No se recomienda usar nombres con carácter de escape, ya que puede hacer que el código sea complicado de leer y
producir pequeños errores difíciles de detectar.
NotOverridable Objeto Of On
&= * *= /
/= \ \= ^
^= + += -
<<=
NOTE
EndIf , GoSub , Variant y Wend se conservan como palabras clave reservadas, aunque ya no se usan en Visual
Basic. El significado de la palabra clave Let ha cambiado. Ahora se usa Let en las consultas LINQ. Para obtener
más información, vea Let Clause (Cláusula Let).
#Region
Temas relacionados
T ÍT ULO DESC RIP C IÓ N
Resumen de matrices Enumera los elementos del lenguaje que se usan para
crear, definir y usar matrices.
Resumen de objetos de colección Enumera los elementos del lenguaje que se usan para las
colecciones.
Resumen de flujo de control Enumera las instrucciones que se usan para crear bucles y
controlar el flujo del procedimiento.
Data Types Summary Enumera tipos de datos. También enumera las funciones
que se usan para convertir entre tipos de datos y
comprobar tipos de datos.
Resumen de fechas y horas Enumera los elementos del lenguaje que se usan para las
fechas y horas.
Resumen de constantes y declaraciones Enumera las instrucciones que se usan para declarar
variables, constantes, clases, módulos y otros elementos
de programación. También enumera los elementos del
lenguaje que se usan para obtener información sobre los
objetos, controlar eventos e implementar la herencia.
Resumen de archivos y directorios Enumera las funciones que se usan para controlar el
sistema de archivos y procesar archivos.
Resumen de errores Enumera los elementos del lenguaje que se usan para
detectar y devolver valores de errores en tiempo de
ejecución.
Resumen financiero Enumera las funciones que se usan para realizar cálculos
financieros.
Resumen de entrada y salida Enumera las funciones que se usan para leer y escribir en
archivos, administrar archivos e imprimir la salida.
Resumen de información e interacción Enumera las funciones que se usan para ejecutar otros
programas, obtener argumentos de línea de comandos,
manipular objetos COM, recuperar información de color y
usar cuadros de diálogo de control.
Resumen de funciones matemáticas Enumera las funciones que se usan para realizar cálculos
trigonométricos y otros cálculos matemáticos.
Resumen del Registro Enumera las funciones que se usan para leer, guardar y
eliminar la configuración del programa.
Resumen de manipulación de cadenas Enumera las funciones que se usan para manipular
cadenas.
Vea también
Miembros de la biblioteca en tiempo de ejecución de Visual Basic
Resumen de matrices (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Las palabras clave del lenguaje Visual Basic y los miembros de las bibliotecas en tiempo de ejecución están
organizados por uso y propósito.
A C C IÓ N L A N GUA GE, EL EM EN TO
Vea también
Palabras clave
Miembros de la biblioteca en tiempo de ejecución de Visual Basic
Resumen de objetos de colección (Visual Basic)
10/01/2020 • 2 minutes to read • Edit Online
Las palabras clave del lenguaje Visual Basic y los miembros de las bibliotecas en tiempo de ejecución están
organizados por uso y propósito.
A C C IÓ N DE L A N GUA GE, EL EM EN TO
Vea también
Palabras clave
Miembros de la biblioteca en tiempo de ejecución de Visual Basic
Resumen de flujos de control (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Las palabras clave del lenguaje Visual Basic y los miembros de las bibliotecas en tiempo de ejecución están
organizados por uso y propósito.
A C C IÓ N L A N GUA GE, EL EM EN TO
Vea también
Palabras clave
Miembros de la biblioteca en tiempo de ejecución de Visual Basic
Resumen de conversión (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Las palabras clave del lenguaje Visual Basic y los miembros de las bibliotecas en tiempo de ejecución están
organizados por uso y propósito.
A C C IÓ N L A N GUA GE, EL EM EN TO
Convierte un tipo de datos en otro. CBool, CByte, CDate, CDbl, CDEC, cint, CLng, CSng, CShort,
CStr, CType, Fix, Int
Convertir la fecha a día, mes, día de la semana o año. Day, Month, Weekday, Year
Vea también
Palabras clave
Miembros de la biblioteca en tiempo de ejecución de Visual Basic
Resumen de tipos de datos (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Las palabras clave del lenguaje Visual Basic y los miembros de las bibliotecas en tiempo de ejecución están
organizados por uso y propósito.
A C C IÓ N L A N GUA GE, EL EM EN TO
Convertir entre tipos de datos CBool, CByte, CChar, CDate, CDbl, CDEC, cint, CLng, CObj,
CShort, CSng, CStr, Fix, Int
Establecer tipos de datos intrínsecos Boolean, byte, Char, Date, decimal, Double, Integer, Long,
Object, Short, Single, String
Vea también
Palabras clave
Miembros de la biblioteca en tiempo de ejecución de Visual Basic
Resumen de fechas y horas (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Las palabras clave del lenguaje Visual Basic y los miembros de las bibliotecas en tiempo de ejecución están
organizados por uso y propósito.
A C C IÓ N L A N GUA GE, EL EM EN TO
Vea también
Palabras clave
Miembros de la biblioteca en tiempo de ejecución de Visual Basic
Resumen de constantes y declaraciones (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Las palabras clave del lenguaje Visual Basic y los miembros de las bibliotecas en tiempo de ejecución están
organizados por uso y propósito.
A C C IÓ N L A N GUA GE, EL EM EN TO
Declarar variables o constantes. Const, Dim, Private, Protected, Public, Shadows, Sharedy static
Declarar una clase, un delegado, una enumeración, un Clase, delegado, enumeración, módulo, espacio de nombres,
módulo, un espacio de nombres o una estructura. estructura
Obtener información acerca de un objeto. GetType, IsArray, IsDate, IsDBNull, IsError, IsNothing,
IsNumeric, IsReference, SystemTypeName, TypeName,
VarTypeVbTypeName
Vea también
Palabras clave
Miembros de la biblioteca en tiempo de ejecución de Visual Basic
Resumen de directorios y archivos (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Las palabras clave del lenguaje Visual Basic y los miembros de las bibliotecas en tiempo de ejecución están
organizados por uso y propósito.
La característica My proporciona una mayor productividad y rendimiento en las operaciones de E/S de archivo que
si se utilizan estos miembros. Para obtener más información, consulta FileSystem.
A C C IÓ N EL EM EN TO DEL L EN GUA JE
Vea también
Palabras clave
Miembros de la biblioteca en tiempo de ejecución de Visual Basic
Leer archivos
Escritura en archivos
Creación, eliminación y movimiento de archivos y directorios
Análisis de archivos de texto con el objeto TextFieldParser
Resumen de errores (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Las palabras clave del lenguaje Visual Basic y los miembros de las bibliotecas en tiempo de ejecución están
organizados por uso y propósito.
A C C IÓ N L A N GUA GE, EL EM EN TO
Interceptar errores en tiempo de ejecución. En el error, reanudar, probar... Detectar... Por último
Vea también
Palabras clave
Miembros de la biblioteca en tiempo de ejecución de Visual Basic
Resumen financiero (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Las palabras clave del lenguaje Visual Basic y los miembros de las bibliotecas en tiempo de ejecución están
organizados por uso y propósito.
A C C IÓ N L A N GUA GE, EL EM EN TO
Vea también
Palabras clave
Miembros de la biblioteca en tiempo de ejecución de Visual Basic
Resumen de información e interacción (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Las palabras clave del lenguaje Visual Basic y los miembros de las bibliotecas en tiempo de ejecución están
organizados por uso y propósito.
A C C IÓ N L A N GUA GE, EL EM EN TO
Vea también
Palabras clave
Miembros de la biblioteca en tiempo de ejecución de Visual Basic
Resumen de entrada y salida (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Las palabras clave del lenguaje Visual Basic y los miembros de las bibliotecas en tiempo de ejecución están
organizados por uso y propósito.
A C C IÓ N L A N GUA GE, EL EM EN TO
Obtener información acerca de un archivo. EOF, FileAttr, FileDateTime, FileLen, FreeFile, GetAttr, Loc, LOF,
Seek
Vea también
Palabras clave
Miembros de la biblioteca en tiempo de ejecución de Visual Basic
Resumen de funciones matemáticas (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Las palabras clave del lenguaje Visual Basic y los miembros de las bibliotecas en tiempo de ejecución están
organizados por uso y propósito.
A C C IÓ N L A N GUA GE, EL EM EN TO
Vea también
Funciones matemáticas derivadas
Palabras clave
Miembros de la biblioteca en tiempo de ejecución de Visual Basic
Funciones matemáticas derivadas (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
En la tabla siguiente se muestran las funciones matemáticas no intrínsecas que se pueden derivar de las funciones
matemáticas intrínsecas del objeto System.Math. Puede tener acceso a las funciones matemáticas intrínsecas
agregando Imports System.Math al archivo o proyecto.
F UN C IÓ N EQ UIVA L EN T ES DERIVA DO S
Coseno inverso (ACOS (x)) Atan (-x/sqrt (-x * x + 1)) + 2 * atan (1)
Secante inversa (ASEC (x)) 2 * atan (1) – atan (signo (x)/raiz (x * x – 1))
Tangente hiperbólica (tanh (x)) (Exp (x) – exp (-x))/(exp (x) + exp (-x))
Cotangente hiperbólica (coth (x)) (Exp (x) + exp (-x))/(exp (x) – exp (-x))
Cosecante hiperbólica inversa (Acsch (x)) Log ((signo (x) * sqrt (x * x + 1) + 1)/x)
La característica My hace que la programación sea más rápida y sencilla, ya que le proporciona acceso intuitivo a
métodos, propiedades y eventos de uso frecuente. En esta tabla se enumeran los objetos incluidos en My y las
acciones que se pueden realizar con cada uno.
A C C IÓ N O B JETO
Obtener acceso a la información y los servicios de la El objeto My.Application consta de las clases siguientes:
aplicación.
ApplicationBase proporciona miembros que están disponibles
en todos los proyectos.
Obtener acceso a los servicios Web XML a los que hace My.WebServices (objeto)
referencia el proyecto actual.
Vea también
Información general sobre el modelo de aplicaciones de Visual Basic
Desarrollo con la función My
Resumen de operadores (Visual Basic)
19/12/2019 • 2 minutes to read • Edit Online
Las palabras clave del lenguaje Visual Basic y los miembros de las bibliotecas en tiempo de ejecución están
organizados por uso y propósito.
. EL EM EN TO DEL L EN GUA JE
Concatenación &, +
Operadores lógicos y bit a bit Not, and, or, XOR, AndAlso, OrElse
Vea también
Palabras clave
Miembros de la biblioteca en tiempo de ejecución de Visual Basic
Resumen del Registro (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Las palabras clave del lenguaje de Visual Studio y los miembros de la biblioteca en tiempo de ejecución se
organizan por propósito y uso.
Si utiliza la característica My , consigue una mayor productividad y rendimiento en las operaciones del Registro que
con estos elementos. Para obtener más información, consulta RegistryProxy.
A C C IÓ N EL EM EN TO DEL L EN GUA JE
Vea también
Palabras clave
Miembros de la biblioteca en tiempo de ejecución de Visual Basic
Leer y escribir en el Registro
Resumen de manipulaciones de cadenas (Visual
Basic)
27/11/2019 • 2 minutes to read • Edit Online
Las palabras clave del lenguaje Visual Basic y los miembros de las bibliotecas en tiempo de ejecución están
organizados por uso y propósito.
A C C IÓ N L A N GUA GE, EL EM EN TO
Vea también
Palabras clave
Miembros de la biblioteca en tiempo de ejecución de Visual Basic
Atributos de Visual Basic
27/11/2019 • 2 minutes to read • Edit Online
Visual Basic proporciona varios atributos que permiten a los objetos interoperar con código no administrado y un
atributo que permite tener acceso a los miembros de módulo sin el nombre de módulo. En la tabla siguiente se
enumeran los atributos usados por Visual Basic.
VBFixedStringAttribute Indica que una cadena se debe tratar como si fuera una
longitud fija.
Vea también
Información general de atributos
Constantes y enumeraciones (Visual Basic)
10/01/2020 • 7 minutes to read • Edit Online
Visual Basic proporciona varias constantes y enumeraciones predefinidas para los desarrolladores. Las constantes
almacenan valores que permanecen constantes a lo largo de la ejecución de una aplicación. Las enumeraciones
proporcionan una forma cómoda de trabajar con conjuntos de constantes relacionadas y asociar valores
constantes con nombres.
Constantes
Constantes de compilación condicional
En la tabla siguiente se enumeran las constantes predefinidas disponibles para la compilación condicional.
Enumeraciones
En la tabla siguiente se enumeran y se describen las enumeraciones proporcionadas por Visual Basic.
Vea también
Referencia del lenguaje Visual Basic
Información general sobre las constantes
Información general sobre las enumeraciones
Resumen de tipos de datos (Visual Basic)
27/11/2019 • 7 minutes to read • Edit Online
En la tabla siguiente se muestran los tipos de datos de Visual Basic, sus tipos de Common Language
Runtime de soporte, su asignación de almacenamiento nominal y sus intervalos de valores.
4.94065645841246544
e-324 a
1.79769313486231570 E
+ 308 † para valores
positivos
401298e e-45 a
3.4028235 E + 38 † para
los valores positivos
†En notación científica, "E" hace referencia a una potencia de 10. Por tanto, 3.56 E + 2 significa 3,56 x 102 o
356 y 3.56 e-2 significa 3,56/102 o 0,0356.
NOTE
Para las cadenas que contienen texto, utilice la función StrConv para convertir de un formato de texto a otro.
Además de especificar un tipo de datos en una instrucción de declaración, puede forzar el tipo de datos de
algunos elementos de programación mediante el uso de un carácter de tipo. Vea caracteres de tipo.
Consumo de memoria
Cuando se declara un tipo de datos elemental, no es seguro suponer que el consumo de memoria es el
mismo que su asignación de almacenamiento nominal. Esto se debe a las siguientes consideraciones:
Asignación de almacenamiento. El Common Language Runtime puede asignar
almacenamiento basado en las características actuales de la plataforma en la que se ejecuta la
aplicación. Si la memoria está casi llena, puede empaquetar los elementos declarados lo más juntos
posible. En otros casos, puede alinear sus direcciones de memoria con límites de hardware
naturales para optimizar el rendimiento.
Ancho de la plataforma. La asignación de almacenamiento en una plataforma de 64 bits es
diferente de la asignación en una plataforma de 32 bits.
Tipos de datos compuestos
Las mismas consideraciones se aplican a cada miembro de un tipo de datos compuesto, como una
estructura o una matriz. No se puede confiar simplemente en sumar las asignaciones de almacenamiento
nominal de los miembros del tipo. Además, hay otras consideraciones, como las siguientes:
Administrativos. Algunos tipos compuestos tienen requisitos de memoria adicionales. Por
ejemplo, una matriz utiliza memoria adicional para la propia matriz y también para cada
dimensión. En una plataforma de 32 bits, esta sobrecarga es actualmente de 12 bytes más 8 bytes
para cada dimensión. En una plataforma de 64 bits, se duplica este requisito.
Diseño de almacenamiento. No se puede suponer de forma segura que el orden de
almacenamiento en memoria es el mismo que el orden de declaración. No puede incluso hacer
suposiciones sobre la alineación de bytes, como un límite de 2 o 4 bytes. Si va a definir una clase o
estructura y necesita controlar el diseño de almacenamiento de sus miembros, puede aplicar el
atributo StructLayoutAttribute a la clase o estructura.
Sobrecarga de objetos
Un Object que hace referencia a cualquier tipo de datos elemental o compuesto usa 4 bytes además de
los datos contenidos en el tipo de datos.
Vea también
StrConv
StructLayoutAttribute
Funciones de conversión de tipos
Resumen de conversión
Caracteres de tipo
Uso eficiente de tipos de datos
Boolean (Tipo de datos, Visual Basic)
27/11/2019 • 3 minutes to read • Edit Online
Contiene valores que solo pueden ser True o False . Las palabras clave True y False corresponden a los
dos Estados de las variables Boolean .
Comentarios
Utilice el tipo de datos booleano (Visual Basic) para contener valores de dos Estados como true/false, yes/no
o ON/OFF.
El valor predeterminado de Boolean es False .
Boolean valores no se almacenan como números y los valores almacenados no están diseñados para ser
equivalentes a números. Nunca debe escribir código que se base en valores numéricos equivalentes para
True y False . Siempre que sea posible, debe restringir el uso de Boolean variables a los valores lógicos
para los que están diseñadas.
Conversiones de tipos
Cuando Visual Basic convierte valores de tipos de datos numéricos en Boolean , 0 se convierte en False y
todos los demás valores se True . Cuando Visual Basic convierte Boolean valores en tipos numéricos, False
se convierte en 0 y True se convierte en-1.
Al convertir entre Boolean valores y tipos de datos numéricos, tenga en cuenta que los métodos de
conversión .NET Framework no siempre producen los mismos resultados que las palabras clave de
conversión Visual Basic. Esto se debe a que la conversión de Visual Basic conserva el comportamiento
compatible con versiones anteriores. Para obtener más información, vea el tema sobre el tipo Boolean no se
convierte a un tipo numérico con precisión en los tipos de datos de solución de problemas.
Sugerencias de programación
Números negativos. Boolean no es un tipo numérico y no puede representar un valor negativo. En
cualquier caso, no debe utilizar Boolean para contener valores numéricos.
Caracteres de tipo. Boolean no tiene un carácter de tipo literal o un carácter de tipo de identificador.
Tipo de marco. El tipo correspondiente en .NET Framework es la estructura System.Boolean.
Ejemplo
En el ejemplo siguiente, runningVB es una variable de Boolean , que almacena un valor de sí/no simple.
Vea también
System.Boolean
Tipos de datos
Funciones de conversión de tipos
Resumen de conversión
Uso eficiente de tipos de datos
Solución de problemas de tipos de datos
Función CType
Tipo de datos byte (Visual Basic)
21/03/2020 • 5 minutes to read • Edit Online
Contiene enteros sin signo de 8 bits (1 byte) que oscilan en valor de 0 a 255.
Observaciones
Utilice Byte el tipo de datos para contener datos binarios.
El valor predeterminado de Byte es 0.
Asignaciones literales
Puede declarar e Byte inicializar una variable asignándole un literal decimal, un literal hexadecimal, un literal
octal o (a partir de Visual Basic 2017) un literal binario. Si el literal entero está Byte fuera del intervalo de a
Byte.MinValue (es Byte.MaxValuedecir, si es menor o mayor que ), se produce un error de compilación.
En el ejemplo siguiente, los enteros iguales a 201 que se representan como Integer literales byte decimales,
hexadecimales y binarios se convierten implícitamente de Entero a valores.
NOTE
Utilice el &h prefijo &H o para denotar un &b &B literal hexadecimal, el prefijo o &o &O para denotar un literal
binario, y el prefijo o para denotar un literal octal. Los literales decimales no tienen prefijo.
A partir de Visual Basic 2017, también _ puede usar el carácter de subrayado, , como separador de dígitos para
mejorar la legibilidad, como se muestra en el ejemplo siguiente.
A partir de Visual Basic 15.5, también _ puede usar el carácter de subrayado ( ) como separador inicial entre el
prefijo y los dígitos hexadecimales, binarios u octales. Por ejemplo:
<PropertyGroup>
<LangVersion>15.5</LangVersion>
</PropertyGroup>
Para obtener más información, consulte configuración de la versióndel lenguaje Visual Basic .
sugerencias de programación
Números negativos. Dado Byte que es un tipo sin signo, no puede representar un número negativo.
Si utiliza el operador - unario menos ( ) en Byte una expresión que se Short evalúa como tipo , Visual
Basic convierte la expresión en primer lugar.
Conversiones de formato. Cuando Visual Basic lee o escribe archivos, o cuando llama a archivos DLL,
métodos y propiedades, puede convertir automáticamente entre formatos de datos. Los datos Byte
binarios almacenados en variables y matrices se conservan durante dichas conversiones de formato. No
debe utilizar String una variable para los datos binarios, ya que su contenido puede dañarse durante la
conversión entre formatos ANSI y Unicode.
Ampliación. El Byte tipo de datos Short UShort se Integer UInteger amplía Long ULong a Decimal
Single , Double , , , , , , o . Esto significa que Byte puede convertir a cualquiera
System.OverflowException de estos tipos sin encontrar un error.
Escriba Caracteres. Byte no tiene ningún carácter de tipo literal o carácter de tipo identificador.
Tipo de Framework . El tipo correspondiente en .NET Framework es la estructura System.Byte.
Ejemplo
En el ejemplo b siguiente, es una Byte variable. Las instrucciones muestran el rango de la variable y la
aplicación de operadores de desplazamiento de bits a ella.
Contiene puntos de código sin signo de 16 bits (2 bytes) con un valor comprendido entre 0 y 65535. Cada
punto de código, o código de carácter, representa un único carácter Unicode.
Comentarios
Utilice el tipo de datos Char cuando necesite contener un solo carácter y no necesite la sobrecarga de String .
En algunos casos, puede usar Char() , una matriz de elementos Char , para contener varios caracteres.
El valor predeterminado de Char es el carácter con un punto de código de 0.
Caracteres Unicode
Los primeros 128 puntos de código (0 – 127) de Unicode corresponden a las letras y símbolos de un teclado
estándar de EE. UU. Estos primeros 128 puntos de código son los mismos que los que define el juego de
caracteres ASCII. Los dos puntos de código 128 (128 – 255) representan caracteres especiales, como Letras de
alfabetos basados en latín, acentos, símbolos de moneda y fracciones. Unicode usa los puntos de código
restantes (256-65535) para una amplia variedad de símbolos, incluidos los caracteres de texto en todo el
mundo, los signos diacríticos y los símbolos matemáticos y técnicos.
Puede usar métodos como IsDigit y IsPunctuation en una variable de Char para determinar su clasificación
Unicode.
Conversiones de tipos
Visual Basic no convierte directamente entre Char y los tipos numéricos. Puede usar la función Asc o AscW
para convertir un valor de Char en un Integer que representa su punto de código. Puede usar la función Chr
o ChrW para convertir un valor de Integer en un Char que tenga ese punto de código.
Si el modificador de comprobación de tipo ( Option Strict Statement) está activado, debe anexar el carácter de
tipo literal a un literal de cadena de un solo carácter para identificarlo como el tipo de datos Char . En el ejemplo
siguiente se ilustra esto. La primera asignación a la variable charVar genera el error del compilador BC30512
porque Option Strict está activada. La segunda se compila correctamente porque el carácter de tipo literal c
identifica el literal como un valor de Char .
Option Strict On
Module CharType
Public Sub Main()
Dim charVar As Char
' This statement generates compiler error BC30512 because Option Strict is On.
charVar = "Z"
Caracteres de tipo. Si se anexa el carácter de tipo literal C a un literal de cadena de un solo carácter, se
convierte al tipo de datos Char . Char no tiene ningún carácter de tipo de identificador.
Tipo de marco. El tipo correspondiente en .NET Framework es la estructura System.Char.
Vea también
System.Char
Asc
AscW
Chr
ChrW
Tipos de datos
String (tipo de datos)
Funciones de conversión de tipos
Resumen de conversión
Llamar a una función de Windows que adopta tipos sin signo
Uso eficiente de tipos de datos
Date (Tipo de datos, Visual Basic)
27/11/2019 • 6 minutes to read • Edit Online
Contiene los valores IEEE de 64 bits (8 bytes) que representan fechas comprendidas entre el 1 de enero del año
0001 hasta el 31 de diciembre del año 9999, y las horas comprendidas entre las 00:00:00 (medianoche) y las
23:59:59.9999999. Cada incremento representa 100 nanosegundos de tiempo transcurrido desde el comienzo
del 1 de enero del año 1 del calendario gregoriano. El valor máximo representa 100 nanosegundos antes del
comienzo del 1 de enero del año 10000.
Comentarios
Utilice el tipo de datos Date para contener valores de fecha, valores de hora o valores de fecha y hora.
El valor predeterminado de Date es 0:00:00 (medianoche) del 1 de enero de 0001.
Puede obtener la fecha y hora actuales desde la clase DateAndTime.
Requisitos de formato
Debe delimitar cualquier literal Date con signos de número ( # # ). Debe especificar el valor de fecha en el
formato M/d/aaaa, por ejemplo #5/31/1993# , o aaaa-MM-dd, por ejemplo #1993-5-31# . Puede usar barras
diagonales al especificar el año en primer lugar. Este requisito es independiente de la configuración regional y de
la configuración de formato de fecha y hora del equipo.
El motivo de esta restricción es que el significado del código nunca debe cambiar en función de la configuración
regional en que se ejecuta la aplicación. Suponga que codifica un literal Date de #3/4/1998# con la intención de
que signifique el 4 de marzo de 1998. En una configuración regional que use el formato mm/dd/aaaa, 3/4/1998
se compila tal como desea. Pero supongamos que implementa la aplicación en muchos países o regiones. En
una configuración regional que use el formato dd/mm/aaaa, el literal incluido en el código se compilará como 3
de abril de 1998. En una configuración local que utilice el formato aaaa/mm/dd, el literal no sería válido (1998
de abril de 0003) y generaría un error de compilación.
Soluciones
Para convertir un literal Date al formato de la configuración regional o a un formato personalizado,
proporcione el literal a la función Format especificando un formato de fecha predefinido o uno especificado por
el usuario. En el siguiente ejemplo se muestra cómo hacerlo.
Si lo desea, también puede utilizar uno de los constructores sobrecargados de la estructura DateTime para
ensamblar un valor de fecha y hora. En el ejemplo siguiente se crea un valor para representar 31 de mayo de
1993 a las 12:14 del mediodía.
Formato de hora
Puede especificar el valor de hora en formato de 12 horas o de 24 horas, por ejemplo, #1:15:30 PM# o
#13:15:30# . Sin embargo, si no especifica los minutos o los segundos, debe especificar AM o PM.
Conversiones de tipos
Si convierte un valor Date al tipo String , Visual Basic representa la fecha en función del formato corto de
fecha especificado por la configuración regional en tiempo de ejecución y representa la hora de acuerdo con el
formato de hora (12 o 24 horas) especificado por la configuración regional en tiempo de ejecución.
Sugerencias de programación
Consideraciones de interoperabilidad. Si interactúa con componentes que no se han escrito para
.NET Framework, por ejemplo, objetos de automatización o COM, tenga presente que los tipos de fecha y
hora definidos en otros entornos no son compatibles con el tipo Date de Visual Basic. Al pasar un
argumento de fecha y hora a esos componentes, declárelo en el código de Visual Basic como Double en
lugar de como Date , y use los métodos de conversión DateTime.FromOADate y DateTime.ToOADate.
Caracteres de tipo. Date no tiene un carácter de tipo literal o un carácter de tipo de identificador. Sin
embargo, el compilador trata los literales incluidos entre caracteres de signo de número ( # # ) como
Date .
Ejemplo
Una variable o constante del tipo de datos Date contiene la fecha y la hora. En el ejemplo siguiente se ilustra
esto.
Vea también
System.DateTime
Tipos de datos
Standard Date and Time Format Strings
Custom Date and Time Format Strings
Funciones de conversión de tipos
Resumen de conversión
Uso eficiente de tipos de datos
Decimal (Tipo de datos, Visual Basic)
27/11/2019 • 5 minutes to read • Edit Online
Contiene valores de 128 bits (16 bytes) firmados que representan números enteros de 96 bits (12 bytes)
escalados por una potencia variable de 10. El factor de escala especifica el número de dígitos a la derecha del
separador decimal; está comprendido entre 0 y 28. Con una escala de 0 (sin posiciones decimales), el mayor
valor posible es +/-79.228.162.514.264.337.593.543.950.335 (+/-7.9228162514264337593543950335E +
28). Con 28 posiciones decimales, el valor más grande es +/-7,9228162514264337593543950335 y el menor
valor distinto de cero es +/-0,0000000000000000000000000001 (+/-1E-28).
Comentarios
El tipo de datos Decimal proporciona el mayor número de dígitos significativos para un número. Admite hasta
29 dígitos significativos y puede representar valores que superan los 7,9228 x 10 ^ 28. Es especialmente
adecuado para los cálculos, como finanzas, que requieren un gran número de dígitos, pero no pueden tolerar
errores de redondeo.
El valor predeterminado de Decimal es 0.
Sugerencias de programación
Precisión. Decimal no es un tipo de datos de punto flotante. La estructura Decimal contiene un valor
entero binario, junto con un bit de signo y un factor de escala entero que especifica qué parte del valor
es una fracción decimal. Por este motivo, los números Decimal tienen una representación más precisa
en la memoria que los tipos de punto flotante ( Single y Double ).
Rendimiento. El tipo de datos Decimal es el más lento de todos los tipos numéricos. Debe sopesar la
importancia de la precisión respecto al rendimiento antes de elegir un tipo de datos.
Ampliación. El tipo de datos Decimal se amplía a Single o Double . Esto significa que puede
convertir Decimal en cualquiera de estos tipos sin encontrar un error de System.OverflowException.
Ceros a la derecha. Visual Basic no almacena ceros finales en un literal Decimal . Sin embargo, una
variable Decimal conserva los ceros finales adquiridos de cálculo. En el ejemplo siguiente se ilustra
esto.
Caracteres de tipo. Al agregar el carácter de tipo literal D a un literal, el tipo de datos se convierte
forzosamente en el tipo de datos Decimal . Si se agrega el carácter de tipo identificador @ a cualquier
identificador, se convierte forzosamente al tipo Decimal .
Tipo de marco. El tipo correspondiente en .NET Framework es la estructura System.Decimal.
Intervalo
Es posible que deba usar el carácter de tipo D para asignar un valor grande a una variable o constante de
Decimal . Este requisito se debe a que el compilador interpreta un literal como Long a menos que un carácter
de tipo literal siga el literal, como se muestra en el ejemplo siguiente.
La declaración de bigDec1 no produce un desbordamiento porque el valor asignado a él está dentro del
intervalo de Long . El valor Long se puede asignar a la variable Decimal .
La declaración de bigDec2 genera un error de desbordamiento porque el valor asignado a él es demasiado
grande para Long . Dado que el literal numérico no se puede interpretar primero como Long , no se puede
asignar a la variable Decimal .
Por bigDec3 , el carácter de tipo literal D soluciona el problema obligando al compilador a interpretar el literal
como Decimal en lugar de como Long .
Vea también
System.Decimal
Decimal.Decimal
Math.Round
Tipos de datos
Single (tipo de datos)
Double (tipos de datos)
Funciones de conversión de tipos
Resumen de conversión
Uso eficiente de tipos de datos
Double (Tipo de datos, Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Contiene números de punto flotante de precisión doble de IEEE 64 bits (8 bytes) que van del valor de-
1.79769313486231570 E + 308 a-4.94065645841246544 E-324 para los valores negativos y de
4.94065645841246544 E-324 a 1.79769313486231570 E + 308 para valores positivos. Los números de
precisión doble almacenan una aproximación de un número real.
Comentarios
El tipo de datos Double proporciona las magnitudes más grandes y pequeñas posibles para un número.
El valor predeterminado de Double es 0.
Sugerencias de programación
Precisión. Al trabajar con números de punto flotante, recuerde que no siempre tienen una
representación precisa en la memoria. Esto podría dar lugar a resultados inesperados de ciertas
operaciones, como la comparación de valores y el operador Mod . Para obtener más información, vea
solución de problemas de tipos de datos.
Ceros a la derecha. Los tipos de datos de punto flotante no tienen ninguna representación interna
de los caracteres cero finales. Por ejemplo, no distinguen entre 4,2000 y 4,2. Por lo tanto, los
caracteres cero finales no aparecen al mostrar o imprimir valores de punto flotante.
Caracteres de tipo. Al agregar el carácter de tipo literal R a un literal, el tipo de datos se convierte
forzosamente en el tipo de datos Double . Por ejemplo, si un valor entero va seguido de R , el valor se
cambia a un Double .
' Visual Basic expands the 4 in the statement Dim dub As Double = 4R to 4.0:
Dim dub As Double = 4.0R
Dim num# = 3
Vea también
System.Double
Tipos de datos
Decimal (tipo de datos)
Single (tipo de datos)
Funciones de conversión de tipos
Resumen de conversión
Uso eficiente de tipos de datos
Solución de problemas de tipos de datos
Caracteres de tipo
Tipo de datos entero (Visual Basic)
21/03/2020 • 6 minutes to read • Edit Online
Contiene enteros de 32 bits con signo (4 bytes) comprendidos en el intervalo entre -2.147.483.648 y
2.147.483.647.
Observaciones
El tipo de datos Integer proporciona un rendimiento óptimo en un procesador de 32 bits. Los demás tipos
enteros son más lentos a la hora de cargarse y almacenarse en la memoria.
El valor predeterminado de Integer es 0.
Asignaciones literales
Puede declarar e Integer inicializar una variable asignándole un literal decimal, un literal hexadecimal, un
literal octal o (a partir de Visual Basic 2017) un literal binario. Si el literal entero está fuera del intervalo de
Integer (es decir, si es inferior a Int32.MinValue o mayor que Int32.MaxValue, se produce un error de
compilación.
En el ejemplo siguiente, los enteros que equivalen a 90 946 que se representan como literales binarios,
hexadecimales y decimales se asignan a valores Integer .
NOTE
Utilice el &h prefijo &H o para denotar un &b &B literal hexadecimal, el prefijo o &o &O para denotar un literal
binario, y el prefijo o para denotar un literal octal. Los literales decimales no tienen prefijo.
A partir de Visual Basic 2017, también _ puede usar el carácter de subrayado, , como separador de dígitos
para mejorar la legibilidad, como se muestra en el ejemplo siguiente.
Dim intValue1 As Integer = 90_946
Console.WriteLine(intValue1)
A partir de Visual Basic 15.5, también _ puede usar el carácter de subrayado ( ) como separador inicial entre el
prefijo y los dígitos hexadecimales, binarios u octales. Por ejemplo:
Para usar el carácter de subrayado como separador inicial, debe agregar el elemento siguiente al archivo del
proyecto de Visual Basic (*.vbproj):
<PropertyGroup>
<LangVersion>15.5</LangVersion>
</PropertyGroup>
Para obtener más información, consulte configuración de la versióndel lenguaje Visual Basic .
Los literales numéricos I también pueden incluir Integer el carácter de tipo para denotar el tipo de datos,
como se muestra en el ejemplo siguiente.
sugerencias de programación
Consideraciones de interoperabilidad. Si está interactuando con componentes no escritos para
.NET Framework, como objetos de automatización o COM, recuerde que Integer tiene un ancho de
datos diferente (16 bits) en otros entornos. Al pasar un argumento de 16 bits a esos componentes,
declárelo en el código de Visual Basic como Short en lugar de como Integer .
Ampliación. El tipo de datos Integer se amplía a Long , Decimal , Single o Double . Esto significa
que puede convertir un tipo de datos Integer en cualquiera de estos tipos sin que se produzca un
error System.OverflowException.
Escriba Caracteres. Al agregar el carácter de tipo literal I a un literal, el tipo de datos se convierte
forzosamente en el tipo de datos Integer . Si se agrega el carácter de tipo identificador % a cualquier
identificador, se convierte forzosamente al tipo Integer .
Tipo de Framework . El tipo correspondiente en .NET Framework es la estructura System.Int32.
Intervalo
Si intenta establecer una variable de un tipo entero en un número que está fuera del intervalo
correspondiente a ese tipo, se produce un error. Si intenta establecerlo en una fracción, el número se redondea
hacia arriba o hacia abajo al valor entero más cercano. Si el número está equidistante a dos valores enteros, el
valor se redondea al entero par más próximo. Este comportamiento minimiza los errores de redondeo que se
derivan de redondear de forma consistente un valor de punto medio en una dirección única. En el código
siguiente se muestran ejemplos de redondeo.
Consulte también
System.Int32
Tipos de datos
Long (tipo de datos)
Short (tipo de datos)
Funciones de conversión de tipos
Resumen de conversión
Uso eficiente de tipos de datos
Tipo de datos long (Visual Basic)
21/03/2020 • 4 minutes to read • Edit Online
Observaciones
Utilice Long el tipo de datos para contener números Integer enteros que son demasiado grandes para caber
en el tipo de datos.
El valor predeterminado de Long es 0.
Asignaciones literales
Puede declarar e Long inicializar una variable asignándole un literal decimal, un literal hexadecimal, un literal
octal o (a partir de Visual Basic 2017) un literal binario. Si el literal entero está fuera del intervalo de Long (es
decir, si es inferior a Int64.MinValue o mayor que Int64.MaxValue, se produce un error de compilación.
En el ejemplo siguiente, los enteros que equivalen a 4 294 967 296 que se representan como literales binarios,
hexadecimales y decimales se asignan a valores Long .
NOTE
Utilice el &h prefijo &H o para denotar un &b &B literal hexadecimal, el prefijo o &o &O para denotar un literal
binario, y el prefijo o para denotar un literal octal. Los literales decimales no tienen prefijo.
A partir de Visual Basic 2017, también _ puede usar el carácter de subrayado, , como separador de dígitos
para mejorar la legibilidad, como se muestra en el ejemplo siguiente.
Dim longValue1 As Long = 4_294_967_296
Console.WriteLine(longValue1)
A partir de Visual Basic 15.5, también _ puede usar el carácter de subrayado ( ) como separador inicial entre el
prefijo y los dígitos hexadecimales, binarios u octales. Por ejemplo:
Para usar el carácter de subrayado como separador inicial, debe agregar el elemento siguiente al archivo del
proyecto de Visual Basic (*.vbproj):
<PropertyGroup>
<LangVersion>15.5</LangVersion>
</PropertyGroup>
Para obtener más información, consulte configuración de la versióndel lenguaje Visual Basic .
Los literales numéricos L también pueden incluir Long el carácter de tipo para denotar el tipo de datos,
como se muestra en el ejemplo siguiente.
sugerencias de programación
Consideraciones de interoperabilidad. Si está interactuando con componentes no escritos para
.NET Framework, por ejemplo, objetos de automatización o COM, recuerde que Long tiene un ancho de
datos diferente (32 bits) en otros entornos. Si va a pasar un argumento de 32 bits Integer a Long un
componente de este tipo, declárelo como en lugar de en el nuevo código de Visual Basic.
Ampliación. El Long tipo de datos Decimal Single se Double amplía a , , o . Esto significa que puede
convertir un tipo de datos Long en cualquiera de estos tipos sin que se produzca un error
System.OverflowException.
Escriba Caracteres. Al agregar el carácter de tipo literal L a un literal, el tipo de datos se convierte
forzosamente en el tipo de datos Long . Si se agrega el carácter de tipo identificador & a cualquier
identificador, se convierte forzosamente al tipo Long .
Tipo de Framework . El tipo correspondiente en .NET Framework es la estructura System.Int64.
Consulte también
Int64
Tipos de datos
Tipo de datos enteros
Short (tipo de datos)
Funciones de conversión de tipos
Resumen de conversión
Uso eficiente de tipos de datos
Object Data Type
27/11/2019 • 5 minutes to read • Edit Online
Contiene direcciones que hacen referencia a objetos. Puede asignar cualquier tipo de referencia (cadena,
matriz, clase o interfaz) a una variable de Object . Una variable Object también puede hacer referencia a
datos de cualquier tipo de valor (Numeric, Boolean , Char , Date , Structure o Enumeration).
Comentarios
El tipo de datos Object puede apuntar a datos de cualquier tipo de datos, incluida cualquier instancia de
objeto que la aplicación reconozca. Use Object cuando no conozca en tiempo de compilación a qué tipo de
datos puede apuntar la variable.
El valor predeterminado de Object es Nothing (una referencia nula).
Tipos de datos
Puede asignar una variable, una constante o una expresión de cualquier tipo de datos a una variable de
Object . Para determinar el tipo de datos al que hace referencia una variable Object actualmente, puede usar
el método GetTypeCode de la clase System.Type. En el ejemplo siguiente se ilustra esto.
El tipo de datos Object es un tipo de referencia. Sin embargo, Visual Basic trata una variable Object como un
tipo de valor cuando hace referencia a los datos de un tipo de valor.
Almacenamiento
Sea cual sea el tipo de datos al que haga referencia, una variable Object no contenga el propio valor de datos,
sino un puntero al valor. Siempre usa cuatro bytes en la memoria del equipo, pero no incluye el
almacenamiento de los datos que representan el valor de la variable. Debido al código que usa el puntero para
ubicar los datos, Object variables que contienen tipos de valor son ligeramente más lentas de tener acceso
que las variables de tipo explícito.
Sugerencias de programación
Consideraciones de interoperabilidad. Si interactúa con componentes que no se han escrito para
el .NET Framework, por ejemplo, objetos de automatización o COM, tenga en cuenta que los tipos de
puntero en otros entornos no son compatibles con el tipo de Object Visual Basic.
Rendimiento. Una variable que se declara con el tipo Object es lo suficientemente flexible como para
contener una referencia a cualquier objeto. Sin embargo, cuando se invoca un método o una propiedad
en este tipo de variable, siempre se incurre en el enlace en tiempo de ejecución (en tiempo de
ejecución). Para forzar el enlace anticipado (en tiempo de compilación) y un mejor rendimiento, declare
la variable con un nombre de clase específico o conviértala en el tipo de datos específico.
Al declarar una variable de objeto, intente usar un tipo de clase concreto, por ejemplo
OperatingSystem, en lugar del tipo de Object generalizado. También debe utilizar la clase más
específica disponible, como TextBox en lugar de Control, de modo que pueda tener acceso a sus
propiedades y métodos. Normalmente, puede usar la lista clases de la Examinador de objetos para
buscar los nombres de clase disponibles.
Ampliación. Todos los tipos de datos y todos los tipos de referencia se amplían al tipo de datos
Object . Esto significa que puede convertir cualquier tipo en Object sin encontrar un error de
System.OverflowException.
Sin embargo, si se convierte entre tipos de valor y Object , Visual Basic realiza operaciones
denominadas conversión boxing y conversión unboxing, lo que ralentiza la ejecución.
Caracteres de tipo. Object no tiene un carácter de tipo literal o un carácter de tipo de identificador.
Tipo de marco. El tipo correspondiente en el .NET Framework es la clase System.Object.
Ejemplo
En el ejemplo siguiente se muestra una variable de Object que apunta a una instancia de objeto.
Vea también
Object
Tipos de datos
Funciones de conversión de tipos
Resumen de conversión
Uso eficiente de tipos de datos
Determinar si dos objetos están relacionados
Determinar si dos objetos son idénticos
Tipo de datos SByte (Visual Basic)
21/03/2020 • 5 minutes to read • Edit Online
Contiene enteros de 8 bits (1 byte) con signo que oscilan en valor de -128 a 127.
Observaciones
Utilice SByte el tipo de datos para contener valores enteros Integer que no requieren Short el ancho de datos
completo o incluso el medio ancho de datos de . En algunos casos, Common Language Runtime podría SByte
empaquetar las variables estrechamente juntas y ahorrar consumo de memoria.
El valor predeterminado de SByte es 0.
Asignaciones literales
Puede declarar e SByte inicializar una variable asignándole un literal decimal, un literal hexadecimal, un literal
octal o (a partir de Visual Basic 2017) un literal binario.
En el ejemplo siguiente, los enteros iguales a -102 que se representan SByte como literales decimales,
hexadecimales y binarios se asignan a los valores. En este ejemplo es necesario /removeintchecks compilar con
el modificador del compilador.
NOTE
Utilice el &h prefijo &H o para denotar un &b &B literal hexadecimal, el prefijo o &o &O para denotar un literal
binario, y el prefijo o para denotar un literal octal. Los literales decimales no tienen prefijo.
A partir de Visual Basic 2017, también _ puede usar el carácter de subrayado, , como separador de dígitos para
mejorar la legibilidad, como se muestra en el ejemplo siguiente.
A partir de Visual Basic 15.5, también _ puede usar el carácter de subrayado ( ) como separador inicial entre el
prefijo y los dígitos hexadecimales, binarios u octales. Por ejemplo:
Dim number As SByte = &H_F9
Para usar el carácter de subrayado como separador inicial, debe agregar el elemento siguiente al archivo del
proyecto de Visual Basic (*.vbproj):
<PropertyGroup>
<LangVersion>15.5</LangVersion>
</PropertyGroup>
Para obtener más información, consulte configuración de la versióndel lenguaje Visual Basic .
Si el literal entero está fuera del intervalo de SByte (es decir, si es inferior a SByte.MinValue o mayor que
SByte.MaxValue, se produce un error de compilación. Cuando un literal entero no tiene sufijo, se deduce un
entero. Si el literal entero está Integer fuera del intervalo del tipo, se deduce un Long. Esto significa que, en los
ejemplos 0x9A anteriores, los literales numéricos y 0b10011010 se interpretan como enteros
SByte.MaxValuecon signo de 32 bits con un valor de 156, que supera . Para compilar correctamente código
como este que asigna un SByte entero no decimal a un , puede realizar una de las siguientes acciones:
Deshabilite las comprobaciones de límites /removeintchecks enteros compilando con el modificador del
compilador.
Utilice un carácter de tipo para definir explícitamente SByte el valor literal que desea asignar al archivo .
En el ejemplo siguiente Short se asigna SByte un valor literal negativo a un archivo . Tenga en cuenta
que, para los números negativos, se debe establecer el bit de orden superior de la palabra de orden
superior del literal numérico. En el caso de nuestro ejemplo, este Short es el bit 15 del valor literal.
sugerencias de programación
Cumplimiento de CLS. El SByte tipo de datos no forma parte de Common Language Specification
(CLS), por lo que el código compatible con CLS no puede consumir un componente que lo utilice.
Ampliación. El SByte tipo de datos Short Integer se Long Decimal amplía Single a Double , , , , y .
Esto significa que SByte puede convertir a cualquiera System.OverflowException de estos tipos sin
encontrar un error.
Escriba Caracteres. SByte no tiene ningún carácter de tipo literal o carácter de tipo identificador.
Tipo de Framework . El tipo correspondiente en .NET Framework es la estructura System.SByte.
Consulte también
System.SByte
Tipos de datos
Funciones de conversión de tipos
Resumen de conversión
Short (tipo de datos)
Tipo de datos enteros
Long (tipo de datos)
Uso eficiente de tipos de datos
Tipo de datos corto (Visual Basic)
21/03/2020 • 4 minutes to read • Edit Online
Contiene enteros de 16 bits (2 bytes) con signo que oscilan en valor de -32.768 a 32.767.
Observaciones
Utilice Short el tipo de datos para contener valores enteros Integer que no requieren el ancho de datos
completo de . En algunos casos, Common Language Short Runtime puede empaquetar las variables
estrechamente juntas y ahorrar consumo de memoria.
El valor predeterminado de Short es 0.
Asignaciones literales
Puede declarar e Short inicializar una variable asignándole un literal decimal, un literal hexadecimal, un literal
octal o (a partir de Visual Basic 2017) un literal binario. Si el literal entero está fuera del intervalo de Short (es
decir, si es inferior a Int16.MinValue o mayor que Int16.MaxValue, se produce un error de compilación.
En el ejemplo siguiente, los enteros iguales a 1.034 que se representan como Integer literales Short
decimales, hexadecimales y binarios se convierten implícitamente de Entero a valores.
NOTE
Utilice el &h prefijo &H o para denotar un &b &B literal hexadecimal, el prefijo o &o &O para denotar un literal
binario, y el prefijo o para denotar un literal octal. Los literales decimales no tienen prefijo.
A partir de Visual Basic 2017, también _ puede usar el carácter de subrayado, , como separador de dígitos
para mejorar la legibilidad, como se muestra en el ejemplo siguiente.
Para usar el carácter de subrayado como separador inicial, debe agregar el elemento siguiente al archivo del
proyecto de Visual Basic (*.vbproj):
<PropertyGroup>
<LangVersion>15.5</LangVersion>
</PropertyGroup>
Para obtener más información, consulte configuración de la versióndel lenguaje Visual Basic .
Los literales numéricos S también pueden incluir Short el carácter de tipo para denotar el tipo de datos,
como se muestra en el ejemplo siguiente.
sugerencias de programación
Ampliación. El Short tipo de datos Integer Long se Decimal Single amplía Double a , , , o . Esto
significa que puede convertir un tipo de datos Short en cualquiera de estos tipos sin que se produzca
un error System.OverflowException.
Escriba Caracteres. Al agregar el carácter de tipo literal S a un literal, el tipo de datos se convierte
forzosamente en el tipo de datos Short . Short no tiene ningún carácter de tipo identificador.
Tipo de Framework . El tipo correspondiente en .NET Framework es la estructura System.Int16.
Consulte también
System.Int16
Tipos de datos
Funciones de conversión de tipos
Resumen de conversión
Tipo de datos enteros
Long (tipo de datos)
Uso eficiente de tipos de datos
Single (Tipo de datos, Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Contiene números de punto flotante de precisión sencilla (4 bytes) de IEEE 32 bits con signo que van en el
valor de-3.4028235 E + 38 a-401298e E-45 para los valores negativos y desde 401298e E-45 hasta
3.4028235 E + 38 para los valores positivos. Los números de precisión sencilla almacenan una aproximación
de un número real.
Comentarios
Utilice el tipo de datos Single para contener valores de punto flotante que no requieran el ancho completo
de los datos de Double . En algunos casos, es posible que el Common Language Runtime pueda empaquetar
las variables de Single en estrecha colaboración y ahorrar consumo de memoria.
El valor predeterminado de Single es 0.
Sugerencias de programación
Precisión. Al trabajar con números de punto flotante, tenga en cuenta que no siempre tienen una
representación precisa en la memoria. Esto podría dar lugar a resultados inesperados de ciertas
operaciones, como la comparación de valores y el operador Mod . Para obtener más información, vea
solución de problemas de tipos de datos.
Ampliación. El tipo de datos Single se amplía a Double . Esto significa que puede convertir Single
a Double sin encontrar un error de System.OverflowException.
Ceros a la derecha. Los tipos de datos de punto flotante no tienen ninguna representación interna
de 0 caracteres finales. Por ejemplo, no distinguen entre 4,2000 y 4,2. Por lo tanto, los caracteres 0
finales no aparecen al mostrar o imprimir valores de punto flotante.
Caracteres de tipo. Al agregar el carácter de tipo literal F a un literal, el tipo de datos se convierte
forzosamente en el tipo de datos Single . Si se agrega el carácter de tipo identificador ! a cualquier
identificador, se convierte forzosamente al tipo Single .
Tipo de marco. El tipo correspondiente en .NET Framework es la estructura System.Single.
Vea también
System.Single
Tipos de datos
Decimal (tipo de datos)
Double (tipos de datos)
Funciones de conversión de tipos
Resumen de conversión
Uso eficiente de tipos de datos
Solución de problemas de tipos de datos
String (Tipo de datos, Visual Basic)
27/11/2019 • 6 minutes to read • Edit Online
Contiene secuencias de puntos de código sin signo de 16 bits (2 bytes) que van desde 0 hasta 65535. Cada
punto de código, o código de carácter, representa un único carácter Unicode. Una cadena puede contener entre
0 y aproximadamente 2 mil millones (2 ^ 31) caracteres Unicode.
Comentarios
Utilice el tipo de datos String para contener varios caracteres sin la sobrecarga de administración de la
matriz de Char() , una matriz de elementos Char .
El valor predeterminado de String es Nothing (una referencia nula). Tenga en cuenta que esto no es lo
mismo que la cadena vacía (valor "" ).
Caracteres Unicode
Los primeros 128 puntos de código (0 – 127) de Unicode corresponden a las letras y símbolos de un teclado
estándar de EE. UU. Estos primeros 128 puntos de código son los mismos que los que define el juego de
caracteres ASCII. Los dos puntos de código 128 (128 – 255) representan caracteres especiales, como Letras de
alfabetos basados en latín, acentos, símbolos de moneda y fracciones. Unicode utiliza el resto de puntos de
código (256-65535) para una amplia variedad de símbolos. Esto incluye los caracteres de texto, los signos
diacríticos y los símbolos matemáticos y técnicos del mundo.
Puede utilizar métodos como IsDigit y IsPunctuation en un carácter individual de una variable de String para
determinar su clasificación Unicode.
Requisitos de formato
Debe incluir un literal de String entre comillas ( " " ). Si debe incluir una comilla tipográfica como uno de los
caracteres de la cadena, utilice dos comillas contiguas ( "" ). En el ejemplo siguiente se ilustra esto.
Tenga en cuenta que las comillas contiguas que representan una comilla en la cadena son independientes de
las comillas que comienzan y finalizan el literal String .
Manipulaciones de cadenas
Una vez que se asigna una cadena a una variable String , esa cadena es inmutable, lo que significa que no se
puede cambiar su longitud o su contenido. Al modificar una cadena de alguna manera, Visual Basic crea una
nueva cadena y abandona la anterior. A continuación, la variable String señala a la nueva cadena.
Puede manipular el contenido de una variable de String mediante una variedad de funciones de cadena. En
el ejemplo siguiente se muestra la función Left
Dim S As String = "Database"
' The following statement sets S to a new string containing "Data".
S = Microsoft.VisualBasic.Left(S, 4)
Una cadena creada por otro componente se puede rellenar con espacios iniciales o finales. Si recibe este tipo
de cadena, puede usar las funciones Trim, LTrimy RTrim para quitar estos espacios.
Para obtener más información sobre las manipulaciones de cadenas, vea cadenas.
Sugerencias de programación
Números negativos. Recuerde que los caracteres que contiene String no están firmados y no
pueden representar valores negativos. En cualquier caso, no debe utilizar String para contener valores
numéricos.
Consideraciones de interoperabilidad. Si interactúa con componentes que no se han escrito para el
.NET Framework, por ejemplo, objetos de automatización o COM, recuerde que los caracteres de
cadena tienen un ancho de datos diferente (8 bits) en otros entornos. Si va a pasar un argumento de
cadena de caracteres de 8 bits a este componente, declárelo como Byte() , una matriz de elementos
Byte , en lugar de String en el nuevo código de Visual Basic.
Vea también
System.String
Tipos de datos
Char (tipo de datos)
Funciones de conversión de tipos
Resumen de conversión
Llamar a una función de Windows que adopta tipos sin signo
Uso eficiente de tipos de datos
UInteger (tipo de datos)
21/03/2020 • 5 minutes to read • Edit Online
Contiene enteros de 32 bits sin signo (4 bytes) que varían en valor de 0 a 4.294.967.295.
Observaciones
El UInteger tipo de datos proporciona el valor sin signo más grande en el ancho de datos más eficaz.
El valor predeterminado de UInteger es 0.
Asignaciones literales
Puede declarar e UInteger inicializar una variable asignándole un literal decimal, un literal hexadecimal, un
literal octal o (a partir de Visual Basic 2017) un literal binario. Si el literal entero está fuera del intervalo de
UInteger (es decir, si es inferior a UInt32.MinValue o mayor que UInt32.MaxValue, se produce un error de
compilación.
En el ejemplo siguiente, los enteros que equivalen a 3 000 000 000 que se representan como literales binarios,
hexadecimales y decimales se asignan a valores UInteger .
NOTE
Utilice el &h prefijo &H o para denotar un &b &B literal hexadecimal, el prefijo o &o &O para denotar un literal
binario, y el prefijo o para denotar un literal octal. Los literales decimales no tienen prefijo.
A partir de Visual Basic 2017, también _ puede usar el carácter de subrayado, , como separador de dígitos para
mejorar la legibilidad, como se muestra en el ejemplo siguiente.
Dim uintValue1 As UInteger = 3_000_000_000ui
Console.WriteLine(uintValue1)
A partir de Visual Basic 15.5, también _ puede usar el carácter de subrayado ( ) como separador inicial entre el
prefijo y los dígitos hexadecimales, binarios u octales. Por ejemplo:
Para usar el carácter de subrayado como separador inicial, debe agregar el elemento siguiente al archivo del
proyecto de Visual Basic (*.vbproj):
<PropertyGroup>
<LangVersion>15.5</LangVersion>
</PropertyGroup>
Para obtener más información, consulte configuración de la versióndel lenguaje Visual Basic .
Los literales numéricos UI ui también pueden incluir UInteger el carácter o tipo para denotar el tipo de
datos, como se muestra en el ejemplo siguiente.
sugerencias de programación
Los UInteger Integer tipos de datos y y proporcionan un rendimiento óptimo en UShort Short un Byte
procesador SByte de 32 bits, ya que los tipos enteros más pequeños ( , , , y ), aunque usan menos bits, tardan
más tiempo en cargarse, almacenarlos y recuperarse.
Números negativos. Dado UInteger que es un tipo sin signo, no puede representar un número
negativo. Si utiliza el operador - unario menos ( ) en UInteger una expresión que se Long evalúa como
tipo , Visual Basic convierte la expresión en primer lugar.
Cumplimiento de CLS. El UInteger tipo de datos no forma parte de Common Language Specification
(CLS), por lo que el código compatible con CLS no puede consumir un componente que lo utilice.
Consideraciones de interoperabilidad. Si está interactuando con componentes no escritos para .NET
Framework, por ejemplo, objetos de automatización o COM, tenga en cuenta que tipos como uint
pueden tener un ancho de datos diferente (16 bits) en otros entornos. Si va a pasar un argumento de 16
bits UShort a UInteger un componente de este tipo, declárelo como en lugar de en el código
administrado de Visual Basic.
Ampliación. El UInteger tipo de datos Long ULong se Decimal Single amplía Double a , , , y . Esto
significa que UInteger puede convertir a cualquiera System.OverflowException de estos tipos sin
encontrar un error.
Escriba Caracteres. Anexar los caracteres UI de tipo literal UInteger a un literal lo fuerza al tipo de
datos. UInteger no tiene ningún carácter de tipo identificador.
Tipo de Framework . El tipo correspondiente en .NET Framework es la estructura System.UInt32.
Consulte también
UInt32
Tipos de datos
Funciones de conversión de tipos
Resumen de conversión
Llamar a una función de Windows que adopta tipos sin signo
Uso eficiente de tipos de datos
Tipo de datos ULong (Visual Basic)
21/03/2020 • 5 minutes to read • Edit Online
Contiene enteros de 64 bits sin signo (8 bytes) que varían en valor de 0 a 18,446,744,073,709,551,615 (más de
1,84 veces 10 x 19).
Observaciones
Utilice ULong el tipo de datos para UInteger contener datos binarios demasiado grandes para , o los valores
enteros sin signo más grandes posibles.
El valor predeterminado de ULong es 0.
Asignaciones literales
Puede declarar e ULong inicializar una variable asignándole un literal decimal, un literal hexadecimal, un literal
octal o (a partir de Visual Basic 2017) un literal binario. Si el literal entero está fuera del intervalo de ULong (es
decir, si es inferior a UInt64.MinValue o mayor que UInt64.MaxValue, se produce un error de compilación.
En el ejemplo siguiente, los enteros que equivalen a 7 934 076 125 que se representan como literales binarios,
hexadecimales y decimales se asignan a valores ULong .
NOTE
Utilice el &h prefijo &H o para denotar un &b &B literal hexadecimal, el prefijo o &o &O para denotar un literal
binario, y el prefijo o para denotar un literal octal. Los literales decimales no tienen prefijo.
A partir de Visual Basic 2017, también _ puede usar el carácter de subrayado, , como separador de dígitos para
mejorar la legibilidad, como se muestra en el ejemplo siguiente.
Dim longValue1 As Long = 4_294_967_296
Console.WriteLine(longValue1)
A partir de Visual Basic 15.5, también _ puede usar el carácter de subrayado ( ) como separador inicial entre el
prefijo y los dígitos hexadecimales, binarios u octales. Por ejemplo:
Para usar el carácter de subrayado como separador inicial, debe agregar el elemento siguiente al archivo del
proyecto de Visual Basic (*.vbproj):
<PropertyGroup>
<LangVersion>15.5</LangVersion>
</PropertyGroup>
Para obtener más información, consulte configuración de la versióndel lenguaje Visual Basic .
Los literales numéricos UL ul también pueden incluir ULong el carácter o tipo para denotar el tipo de datos,
como se muestra en el ejemplo siguiente.
sugerencias de programación
Números negativos. Dado ULong que es un tipo sin signo, no puede representar un número negativo.
Si utiliza el operador - unario menos ( ) en ULong una expresión que se Decimal evalúa como tipo ,
Visual Basic convierte la expresión en primer lugar.
Cumplimiento de CLS. El ULong tipo de datos no forma parte de Common Language Specification
(CLS), por lo que el código compatible con CLS no puede consumir un componente que lo utilice.
Consideraciones de interoperabilidad. Si está interactuando con componentes no escritos para .NET
Framework, por ejemplo, objetos de automatización o COM, tenga en cuenta que tipos como ulong
pueden tener un ancho de datos diferente (32 bits) en otros entornos. Si va a pasar un argumento de 32
bits UInteger a ULong un componente de este tipo, declárelo como en lugar de en el código
administrado de Visual Basic.
Además, Automation no admite enteros de 64 bits en Windows 95, Windows 98, Windows ME o
Windows 2000. No se puede ULong pasar un argumento de Visual Basic a un componente de
automatización en estas plataformas.
Ampliación. El ULong tipo de datos Decimal Single se Double amplía a , , y . Esto significa que ULong
puede convertir a cualquiera System.OverflowException de estos tipos sin encontrar un error.
Escriba Caracteres. Anexar los caracteres UL de tipo literal ULong a un literal lo fuerza al tipo de
datos. ULong no tiene ningún carácter de tipo identificador.
Tipo de Framework . El tipo correspondiente en .NET Framework es la estructura System.UInt64.
Consulte también
UInt64
Tipos de datos
Funciones de conversión de tipos
Resumen de conversión
Llamar a una función de Windows que adopta tipos sin signo
Uso eficiente de tipos de datos
Tipo de datos definido por el usuario
27/11/2019 • 4 minutes to read • Edit Online
Contiene los datos en un formato definido por el usuario. La instrucción Structure define el formato.
Las versiones anteriores de Visual Basic admiten el tipo definido por el usuario (UDT). La versión actual expande el
UDT a una estructura. Una estructura es una concatenación de uno o más miembros de varios tipos de datos.
Visual Basic trata una estructura como una sola unidad, aunque también puede tener acceso a sus miembros
individualmente.
Comentarios
Defina y use un tipo de datos de estructura cuando necesite combinar varios tipos de datos en una sola unidad, o
cuando ninguno de los tipos de datos básicos satisfaga sus necesidades.
El valor predeterminado de un tipo de datos de estructura consta de la combinación de los valores
predeterminados de cada uno de sus miembros.
Formato de declaración
Una declaración de estructura comienza con la instrucción Structure y termina con la instrucción End Structure .
La instrucción Structure proporciona el nombre de la estructura, que también es el identificador del tipo de datos
que la estructura está definiendo. Otras partes del código pueden utilizar este identificador para declarar variables,
parámetros y valores devueltos por la función para que sean del tipo de datos de esta estructura.
Las declaraciones entre las instrucciones Structure y End Structure definen los miembros de la estructura.
Sugerencias de programación
Consumo de memoria. Al igual que sucede con los demás tipos de datos compuestos, no puede
calcularse de forma precisa el consumo total de memoria de una estructura sumando las asignaciones de
almacenamiento nominal de sus miembros. Es más, no puede suponerse que el orden de almacenamiento
en memoria sea el mismo que el orden de la declaración. Si necesita controlar el diseño de almacenamiento
de una estructura, puede aplicar el atributo StructLayoutAttribute a la instrucción Structure .
Consideraciones de interoperabilidad. Si interactúa con componentes que no se han escrito para el
.NET Framework, por ejemplo, objetos de automatización o COM, tenga en cuenta que los tipos definidos
por el usuario en otros entornos no son compatibles con los tipos de estructura de Visual Basic.
Ampliación. No hay ninguna conversión automática a o desde cualquier tipo de datos de estructura.
Puede definir operadores de conversión en la estructura mediante la instrucción del operadory puede
declarar que cada operador de conversión sea Widening o Narrowing .
Caracteres de tipo. Los tipos de datos de estructura no tienen un carácter de tipo literal o un carácter de
tipo de identificador.
Tipo de marco. No hay ningún tipo correspondiente en el .NET Framework. Todas las estructuras heredan
de la clase .NET Framework System.ValueType, pero ninguna estructura individual corresponde a
System.ValueType.
Ejemplo
El paradigma siguiente muestra el contorno de la declaración de una estructura.
Vea también
ValueType
StructLayoutAttribute
Tipos de datos
Funciones de conversión de tipos
Resumen de conversión
Structure (instrucción)
Widening
Narrowing
Estructuras
Uso eficiente de tipos de datos
Tipo de datos UShort (Visual Basic)
21/03/2020 • 4 minutes to read • Edit Online
Contiene enteros de 16 bits sin signo (2 bytes) que varían en valor de 0 a 65.535.
Observaciones
Utilice UShort el tipo de datos para Byte contener datos binarios demasiado grandes para .
El valor predeterminado de UShort es 0.
Asignaciones literales
Puede declarar e UShort inicializar una variable asignándole un literal decimal, un literal hexadecimal, un literal
octal o (a partir de Visual Basic 2017) un literal binario. Si el literal entero está fuera del intervalo de UShort (es
decir, si es inferior a UInt16.MinValue o mayor que UInt16.MaxValue, se produce un error de compilación.
En el ejemplo siguiente, los enteros iguales a 65.034 que se representan UShort como literales decimales,
hexadecimales y binarios se asignan a los valores.
NOTE
Utilice el &h prefijo &H o para denotar un &b &B literal hexadecimal, el prefijo o &o &O para denotar un literal
binario, y el prefijo o para denotar un literal octal. Los literales decimales no tienen prefijo.
A partir de Visual Basic 2017, también _ puede usar el carácter de subrayado, , como separador de dígitos para
mejorar la legibilidad, como se muestra en el ejemplo siguiente.
A partir de Visual Basic 15.5, también _ puede usar el carácter de subrayado ( ) como separador inicial entre el
prefijo y los dígitos hexadecimales, binarios u octales. Por ejemplo:
Dim number As UShort = &H_FF8C
Para usar el carácter de subrayado como separador inicial, debe agregar el elemento siguiente al archivo del
proyecto de Visual Basic (*.vbproj):
<PropertyGroup>
<LangVersion>15.5</LangVersion>
</PropertyGroup>
Para obtener más información, consulte configuración de la versióndel lenguaje Visual Basic .
Los literales numéricos US us también pueden incluir UShort el carácter o tipo para denotar el tipo de datos,
como se muestra en el ejemplo siguiente.
sugerencias de programación
Números negativos. Dado UShort que es un tipo sin signo, no puede representar un número
negativo. Si utiliza el operador - unario menos ( ) en UShort una expresión que se Integer evalúa como
tipo , Visual Basic convierte la expresión en primer lugar.
Cumplimiento de CLS. El UShort tipo de datos no forma parte de Common Language Specification
(CLS), por lo que el código compatible con CLS no puede consumir un componente que lo utilice.
Ampliación. El UShort tipo de datos Integer UInteger se Long ULong amplía Decimal Single a
Double , , , , , y . Esto significa que UShort puede convertir a cualquiera System.OverflowException de
estos tipos sin encontrar un error.
Escriba Caracteres. Anexar los caracteres US de tipo literal UShort a un literal lo fuerza al tipo de
datos. UShort no tiene ningún carácter de tipo identificador.
Tipo de Framework . El tipo correspondiente en .NET Framework es la estructura System.UInt16.
Consulte también
UInt16
Tipos de datos
Funciones de conversión de tipos
Resumen de conversión
Llamar a una función de Windows que adopta tipos sin signo
Uso eficiente de tipos de datos
Directivas de Visual Basic
05/12/2019 • 2 minutes to read • Edit Online
Los temas en esta sección documentan las directivas del compilador de código fuente de Visual Basic.
Esta sección
Directiva de #Const : definir una constante del compilador
Directiva de #ExternalSource : indicar una asignación entre líneas de código fuente y texto externo al origen
#If... Then... #Else directivas : compilar bloques de código seleccionados
Directiva de #Region : contraer y ocultar secciones de código en el editor de Visual Studio
#Disable, #Enable : deshabilitar y habilitar advertencias específicas para las regiones de código.
#Disable Warning BC42356 ' suppress warning about no awaits in this method
Async Function TestAsync() As Task
Console.WriteLine("testing")
End Function
#Enable Warning BC42356
También puede deshabilitar y habilitar una lista separada por comas de códigos de advertencia.
Secciones relacionadas
Referencia del lenguaje Visual Basic
#Const (Directiva)
27/11/2019 • 2 minutes to read • Edit Online
Sintaxis
#Const constname = expression
Elementos
constname
Obligatorio. Nombre de la constante que se está definiendo.
expression
Obligatorio. Literal, otra constante del compilador condicional o cualquier combinación que incluya todos o todos
los operadores aritméticos o lógicos excepto Is .
Comentarios
Las constantes de compilador condicionales siempre son privadas en el archivo en el que aparecen. No se pueden
crear constantes del compilador públicas mediante la Directiva #Const ; solo puede crearlos en la interfaz de
usuario o con la opción del compilador /define .
Solo se pueden usar constantes y literales de compilador condicionales en expression . El uso de una constante
estándar definida con Const produce un error. Por el contrario, puede usar constantes definidas con la palabra
clave #Const solo para la compilación condicional. Las constantes también pueden ser undefined, en cuyo caso
tienen un valor de Nothing .
Ejemplo
En este ejemplo se usa la directiva #Const .
Vea también
-define (Visual Basic)
#If...Then...#Else (directivas)
Const (instrucción)
Compilación condicional
If...Then...Else (instrucción)
#ExternalSource (Directiva)
27/11/2019 • 2 minutes to read • Edit Online
Indica una asignación entre líneas específicas de código fuente y texto externo al origen.
Sintaxis
#ExternalSource( StringLiteral , IntLiteral )
[ LogicalLine+ ]
#End ExternalSource
Elementos
StringLiteral
Ruta de acceso al origen externo.
IntLiteral
Número de línea de la primera línea del origen externo.
LogicalLine
La línea donde se produce el error en el origen externo.
#End ExternalSource
Finaliza el bloque #ExternalSource .
Comentarios
Esta directiva solo la usan el compilador y el depurador.
Un archivo de código fuente puede incluir directivas de origen externo, que indican una asignación entre líneas
específicas de código en el archivo de código fuente y texto externo al origen, como un archivo. aspx. Si se
encuentran errores en el código fuente designado durante la compilación, se identifican como procedentes del
origen externo.
Las directivas de origen externo no tienen ningún efecto en la compilación y no se pueden anidar. Están pensadas
para uso interno de la aplicación únicamente.
Vea también
Compilación condicional
#If...Then...#Else (Directivas)
27/11/2019 • 3 minutes to read • Edit Online
Sintaxis
#If expression Then
statements
[ #ElseIf expression Then
[ statements ]
...
#ElseIf expression Then
[ statements ] ]
[ #Else
[ statements ] ]
#End If
Elementos
expression
Se requiere para las instrucciones #If y #ElseIf , opcional en otro lugar. Cualquier expresión, que consta
exclusivamente de una o varias constantes, literales y operadores del compilador condicionales, que se evalúa
como True o False .
statements
Obligatorio para #If bloque de instrucciones, opcional en otro lugar. Visual Basic líneas de programa o
directivas de compilador que se compilan si la expresión asociada se evalúa como True .
#End If
Finaliza el #If bloque de instrucciones.
Comentarios
En la superficie, el comportamiento de las directivas de #If...Then...#Else aparece igual que el de las
instrucciones If...Then...Else . Sin embargo, las directivas de #If...Then...#Else evalúan lo que compila el
compilador, mientras que las instrucciones If...Then...Else evalúan las condiciones en tiempo de ejecución.
La compilación condicional se usa normalmente para compilar el mismo programa para distintas plataformas.
También se usa para evitar que el código de depuración aparezca en un archivo ejecutable. El código excluido
durante la compilación condicional se omite completamente del archivo ejecutable final, por lo que no tiene
ningún efecto en el tamaño o el rendimiento.
Independientemente del resultado de cualquier evaluación, todas las expresiones se evalúan mediante
Option Compare Binary . La instrucción Option Compare no afecta a las expresiones de las instrucciones #If y
#ElseIf .
NOTE
No existe ninguna forma de una sola línea de las directivas #If , #Else , #ElseIf y #End If . No puede aparecer
ningún otro código en la misma línea que ninguna de las directivas.
Las instrucciones de un bloque de compilación condicional deben ser instrucciones lógicas completas. Por
ejemplo, no puede compilar condicionalmente solo los atributos de una función, pero puede declarar
condicionalmente la función junto con sus atributos:
Ejemplo
En este ejemplo se usa la construcción #If...Then...#Else para determinar si se deben compilar ciertas
instrucciones.
#Const CustomerNumber = 36
#If CustomerNumber = 35 Then
' Insert code to be compiled for customer # 35.
#ElseIf CustomerNumber = 36 Then
' Insert code to be compiled for customer # 36.
#Else
' Insert code to be compiled for all other customers.
#End If
Vea también
#Const (directiva)
If...Then...Else (instrucción)
Compilación condicional
System.Diagnostics.ConditionalAttribute
#Region (Directiva)
27/11/2019 • 2 minutes to read • Edit Online
Sintaxis
#Region "identifier_string"
#End Region
Elementos
T ÉRM IN O DEF IN IC IÓ N
Comentarios
La directiva #Region permite especificar un bloque de código que se puede expandir o contraer cuando se usa la
característica de esquematización del Editor de código de Visual Studio. Puede colocar, o anidar, regiones en otras
regiones para agrupar regiones similares.
Ejemplo
En este ejemplo se usa la directiva #Region .
#Region "MathFunctions"
' Insert code for the Math functions here.
#End Region
Vea también
#If...Then...#Else (directivas)
Esquematización
Contraer y ocultar secciones de código
Funciones (Visual Basic)
05/12/2019 • 2 minutes to read • Edit Online
En los temas de esta sección, se incluyen tablas de las funciones de miembro en tiempo de ejecución de Visual
Basic.
NOTE
También puede crear funciones y llamarlas. Para obtener más información, consulte Function Statement [Function
(instrucción)] y How to: Create a Procedure that Returns a Value (Cómo: Crear un procedimiento que devuelve un valor).
Esta sección
Funciones de conversión
Funciones matemáticas
Funciones de cadena
Funciones de conversión de tipos
Función CType
Secciones relacionadas
Referencia del lenguaje Visual Basic
Funciones de conversión (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Asc
AscW
CBool (función)
Función CByte
CChar (función)
CDate (función)
CDbl (función)
CDec (función)
Chr
ChrW
CInt (función)
CLng (función)
CObj función)
CSByte función)
CShort (función)
CSng (función)
CStr (función)
Función CType
CUInt función)
CULng función)
CUShort función)
Format
Hex
Oct
Str
Val
Vea también
Funciones de conversión de tipos
Conversión de tipos de datos
Funciones matemáticas (Visual Basic)
31/01/2020 • 9 minutes to read • Edit Online
Los métodos de la clase System.Math proporcionan funciones trigonométricas, logarítmicas y otras funciones
matemáticas comunes.
Notas
En la tabla siguiente se enumeran los métodos de la clase System.Math. Puede usarlos en un programa de Visual
Basic:
En la tabla siguiente se enumeran los métodos de la clase System.Math que no existen en .NET Framework pero
que se agregan en .NET Standard o .NET Core:
Acosh Devuelve el ángulo cuyo coseno A partir de .NET Core 2,1 y .NET
hiperbólico es el número especificado. Standard 2,1
Asinh Devuelve el ángulo cuyo seno A partir de .NET Core 2,1 y .NET
hiperbólico es el número especificado. Standard 2,1
Atanh Devuelve el ángulo cuya tangente A partir de .NET Core 2,1 y .NET
hiperbólica es el número especificado. Standard 2,1
BitIncrement Devuelve el siguiente valor más grande A partir de .NET Core 3,0
mayor que x .
Cbrt Devuelve la raíz cúbica de un número A partir de .NET Core 2,1 y .NET
especificado. Standard 2,1
M ÉTO DO . N ET DESC RIP C IÓ N DISP O N IB L E EN
Clamp Devuelve un elemento value fijado al A partir de .NET Core 2,0 y .NET
rango inclusivo de min y max . Standard 2,1
Para usar estas funciones sin calificación, importe el espacio de nombres System.Math en el proyecto agregando el
código siguiente a la parte superior del archivo de código fuente:
Imports System.Math
Ejemplo: ABS
En este ejemplo se usa el método Abs de la clase Math para calcular el valor absoluto de un número.
Ejemplo: atan
En este ejemplo se usa el método Atan de la clase Math para calcular el valor de PI.
Ejemplo: cos
En este ejemplo se usa el método Cos de la clase Math para devolver el coseno de un ángulo.
Ejemplo: EXP
En este ejemplo se usa el método Exp de la clase Math para devolver e elevado a una potencia.
Registro de ejemplo
En este ejemplo se usa el método Log de la clase Math para devolver el logaritmo natural de un número.
Ejemplo: redondeo
En este ejemplo se usa el método Round de la clase Math para redondear un número al entero más próximo.
Ejemplo: Sign
En este ejemplo se usa el método Sign de la clase Math para determinar el signo de un número.
Dim mySign1 As Integer = Math.Sign(12)
Dim mySign2 As Integer = Math.Sign(-2.4)
Dim mySign3 As Integer = Math.Sign(0)
Console.WriteLine(mySign1)
Console.WriteLine(mySign2)
Console.WriteLine(mySign3)
' The code produces the following output:
' 1
' -1
' 0
Ejemplo: sin
En este ejemplo se usa el método Sin de la clase Math para devolver el seno de un ángulo.
Ejemplo: sqrt
En este ejemplo se usa el método Sqrt de la clase Math para calcular la raíz cuadrada de un número.
Ejemplo: tan
En este ejemplo se usa el método Tan de la clase Math para devolver la tangente de un ángulo.
Vea también
Rnd
Randomize
NaN
Funciones matemáticas derivadas
Operadores aritméticos
Funciones de cadena (Visual Basic)
27/11/2019 • 9 minutes to read • Edit Online
En la tabla siguiente se enumeran las funciones que Visual Basic proporciona en la clase
Microsoft.VisualBasic.Strings para buscar y manipular cadenas. Se pueden considerar como Visual Basic funciones
intrínsecas; es decir, no tiene que llamarlos como miembros explícitos de una clase, como se muestra en los
ejemplos. Los métodos adicionales y, en algunos casos, métodos complementarios, están disponibles en la clase
System.String.
LTrim Devuelve una cadena que contiene una copia de una cadena
especificada sin espacios iniciales.
RTrim Devuelve una cadena que contiene una copia de una cadena
especificada sin espacios finales.
Trim Devuelve una cadena que contiene una copia de una cadena
especificada sin espacios iniciales ni finales.
Puede usar la instrucción Option Compare para establecer si las cadenas se comparan mediante un criterio de
ordenación de texto que no distingue entre mayúsculas y minúsculas, determinado por la configuración regional
del sistema ( Text ) o por las representaciones binarias internas de los caracteres ( Binary ). El método de
comparación de texto predeterminado es Binary .
Ejemplo: UCase
En este ejemplo se usa la función UCase para devolver una versión en mayúsculas de una cadena.
Ejemplo: LTrim
En este ejemplo se usa la función LTrim para quitar los espacios iniciales y la función RTrim para quitar los
espacios finales de una variable de cadena. Usa la función Trim para quitar ambos tipos de espacios.
Ejemplo: MID
En este ejemplo se usa la función Mid para devolver un número especificado de caracteres de una cadena.
Ejemplo: Len
En este ejemplo se usa Len para devolver el número de caracteres de una cadena.
Ejemplo: InStr
En este ejemplo se usa la función InStr para devolver la posición de la primera aparición de una cadena dentro
de otra.
' String to search in.
Dim searchString As String = "XXpXXpXXPXXP"
' Search for "P".
Dim searchChar As String = "P"
' Returns 0.
testPos = InStr(1, searchString, "W")
Ejemplo: Format
En este ejemplo se muestran varios usos de la función Format para dar formato a los valores mediante formatos
de String y formatos definidos por el usuario. En el caso del separador de fecha ( / ), el separador de hora ( : ) y
los indicadores de AM/PM ( t y tt ), la salida con formato real que muestra el sistema depende de la
configuración regional que use el código. Cuando se muestran las horas y las fechas en el entorno de desarrollo, se
usan el formato de hora corta y el formato de fecha corta de la configuración regional del código.
NOTE
En el caso de las configuraciones regionales que utilizan un reloj de 24 horas, los indicadores de AM/PM ( t y tt ) no
muestran nada.
Dim testDateTime As Date = #1/27/2001 5:04:23 PM#
Dim testStr As String
' Returns current system time in the system-defined long time format.
testStr = Format(Now(), "Long Time")
' Returns current system date in the system-defined long date format.
testStr = Format(Now(), "Long Date")
' Also returns current system date in the system-defined long date
' format, using the single letter code for the format.
testStr = Format(Now(), "D")
Vea también
Palabras clave
Miembros de la biblioteca en tiempo de ejecución de Visual Basic
Resumen de manipulación de cadenas
System. String (métodos de clase)
Funciones de conversión de tipos
(Visual Basic)
27/11/2019 • 23 minutes to read • Edit Online
Sintaxis
CBool(expression)
CByte(expression)
CChar(expression)
CDate(expression)
CDbl(expression)
CDec(expression)
CInt(expression)
CLng(expression)
CObj(expression)
CSByte(expression)
CShort(expression)
CSng(expression)
CStr(expression)
CUInt(expression)
CULng(expression)
CUShort(expression)
Parte
expression
Obligatorio. Cualquier expresión del tipo de datos de origen.
RA N GO PA RA EXPRESSION
N O M B RE DE L A F UN C IÓ N T IP O DE DATO S DEVUELTO A RGUM EN TO
Comentarios
Como norma general, debe usar las funciones de conversión de tipo Visual Basic en
preferencia a los métodos de .NET Framework como ToString() , ya sea en la clase
Convert o en una estructura o clase de tipo individual. Las funciones de Visual Basic
están diseñadas para una interacción óptima con el código Visual Basic y también
hacen que el código fuente sea más corto y más fácil de leer. Además, los métodos de
conversión de .NET Framework no siempre producen los mismos resultados que las
funciones de Visual Basic, por ejemplo, al convertir Boolean en Integer . Para
obtener más información, vea solución de problemas de tipos de datos.
A partir de Visual Basic 15,8, el rendimiento de la conversión de punto flotante a
entero se optimiza al pasar el valor de Single o Double devuelto por los métodos
siguientes a una de las funciones de conversión de enteros ( CByte , CShort , CInt ,
CLng , CSByte , CUShort , CUInt , CULng ):
Conversion.Fix(Double)
Conversion.Fix(Object)
Conversion.Fix(Single)
Conversion.Int(Double)
Conversion.Int(Object)
Conversion.Int(Single)
Math.Ceiling(Double)
Math.Floor(Double)
Math.Round(Double)
Math.Truncate(Double)
Esta optimización permite que el código que realiza un gran número de conversiones
de enteros se ejecute hasta dos veces más rápido. En el ejemplo siguiente se
muestran estas conversiones optimizadas de punto flotante a entero:
Comportamiento
Conversión. En general, puede utilizar las funciones de conversión de tipos de
datos para convertir el resultado de una operación en un tipo de datos
determinado en lugar del tipo de datos predeterminado. Por ejemplo, utilice
CDec para forzar la aritmética decimal en los casos en los que normalmente
tendría lugar la aritmética de precisión sencilla, doble precisión o entera.
Conversiones con errores. Si el expression que se pasa a la función está
fuera del intervalo del tipo de datos al que se va a convertir, se produce una
OverflowException.
Par tes fraccionarias. Al convertir un valor no entero en un tipo entero, las
funciones de conversión de enteros ( CByte , CInt , CLng , CSByte , CShort ,
CUInt , CULng y CUShort ) quitan la parte fraccionaria y redondean el valor al
entero más cercano.
Si la parte fraccionaria es exactamente 0,5, las funciones de conversión de
enteros lo redondean al entero par más cercano. Por ejemplo, 0,5 se redondea
a 0 y 1,5 y 2,5 se redondean a 2. A veces, esto se denomina redondeo
bancarioy su finalidad es compensar una diferencia que podría acumularse al
agregar muchos de estos números juntos.
CInt y CLng difieren de las funciones Int y Fix, que truncan, en lugar de
redondear, la parte fraccionaria de un número. Además, Fix y Int siempre
devuelven un valor del mismo tipo de datos que se pasa.
Conversiones de fecha y hora. Utilice la función IsDate para determinar si
un valor se puede convertir en una fecha y hora. CDate reconoce los literales
de fecha y los literales de hora, pero no los valores numéricos. Para convertir
un valor de Visual Basic Date 6,0 en un valor Date en Visual Basic 2005 o
versiones posteriores, puede usar el método DateTime.FromOADate.
Valores de fecha y hora neutros. El tipo de datos Date siempre contiene
información de fecha y hora. A efectos de la conversión de tipos, Visual Basic
considera 1/1/0001 (1 de enero del año 1) para que sea un valor neutro para la
fecha y 00:00:00 (medianoche) como valor neutro para el tiempo. Si convierte
un valor de Date en una cadena, CStr no incluye valores neutros en la
cadena resultante. Por ejemplo, si convierte #January 1, 0001 9:30:00# en una
cadena, el resultado es "9:30:00 AM"; se suprime la información de fecha. Sin
embargo, la información de fecha todavía está presente en el valor de Date
original y se puede recuperar con funciones como DatePart función.
Confidencialidad de la referencia cultural. Las funciones de conversión
de tipos que implican cadenas realizan conversiones basadas en la
configuración de la referencia cultural actual de la aplicación. Por ejemplo,
CDate reconoce los formatos de fecha según la configuración regional del
sistema. Debe proporcionar el día, el mes y el año en el orden correcto de la
configuración regional, o la fecha podría no interpretarse correctamente. No se
reconoce el formato de fecha larga si contiene una cadena de día de la semana,
como "miércoles".
Si necesita convertir a o desde una representación de cadena de un valor en un
formato distinto del especificado por la configuración regional, no puede usar
las funciones de conversión de tipo Visual Basic. Para ello, use los métodos
ToString(IFormatProvider) y Parse(String, IFormatProvider) del tipo de ese
valor. Por ejemplo, utilice Double.Parse al convertir una cadena en un Double y
use Double.ToString al convertir un valor de tipo Double en una cadena.
CType Function
La función ctype toma un segundo argumento, typename , y convierte expression en
typename , donde typename puede ser cualquier tipo de datos, estructura, clase o
interfaz a la que exista una conversión válida.
Para obtener una comparación de CType con las otras palabras clave de conversión
de tipos, vea el operador DirectCast y el operador TryCast.
Ejemplo de CBool
En el ejemplo siguiente se usa la función CBool para convertir expresiones en
Boolean valores. Si una expresión se evalúa como un valor distinto de cero, CBool
devuelve True ; de lo contrario, devuelve False .
Dim a, b, c As Integer
Dim check As Boolean
a = 5
b = 5
' The following line of code sets check to True.
check = CBool(a = b)
c = 0
' The following line of code sets check to False.
check = CBool(c)
Ejemplo de CByte
En el ejemplo siguiente se usa la función CByte para convertir una expresión en una
Byte .
Dim aDouble As Double
Dim aByte As Byte
aDouble = 125.5678
' The following line of code sets aByte to 126.
aByte = CByte(aDouble)
Ejemplo de CChar
En el ejemplo siguiente se usa la función CChar para convertir el primer carácter de
una expresión String en un tipo Char .
El argumento de entrada para CChar debe ser de tipo de datos Char o String . No
se puede usar CChar para convertir un número en un carácter, porque CChar no
puede aceptar un tipo de datos numérico. En el ejemplo siguiente se obtiene un
número que representa un punto de código (código de carácter) y lo convierte en el
carácter correspondiente. Usa la función InputBox para obtener la cadena de dígitos,
CInt convertir la cadena al tipo Integer y ChrW convertir el número al tipo Char .
Ejemplo de CDate
En el ejemplo siguiente se usa la función CDate para convertir cadenas en valores
Date . En general, no se recomienda codificar las fechas y horas de forma rígida como
cadenas (como se muestra en este ejemplo). Utilice literales de fecha y literales de
hora, como #Feb 12, 1969 # y #4:45:23 PM #, en su lugar.
Ejemplo de CDbl
Dim aDec As Decimal
Dim aDbl As Double
' The following line of code uses the literal type character D to make aDec a
Decimal.
aDec = 234.456784D
' The following line of code sets aDbl to 1.9225456288E+1.
aDbl = CDbl(aDec * 8.2D * 0.01D)
Ejemplo de CDec
En el ejemplo siguiente se usa la función CDec para convertir un valor numérico en
Decimal .
Ejemplo de CInt
En el ejemplo siguiente se usa la función CInt para convertir un valor en Integer .
Ejemplo de CLng
En el ejemplo siguiente se usa la función CLng para convertir valores en Long .
Ejemplo de CObj
En el ejemplo siguiente se usa la función CObj para convertir un valor numérico en
Object . La variable Object solo contiene un puntero de cuatro bytes, que señala al
valor Double asignado a él.
Ejemplo de CShort
En el ejemplo siguiente se usa la función CShort para convertir un valor numérico en
Short .
Ejemplo de CSng
En el ejemplo siguiente se usa la función CSng para convertir valores en Single .
Ejemplo de CStr
En el ejemplo siguiente se usa la función CStr para convertir un valor numérico en
String .
Para obtener más información sobre los valores devueltos por CStr , vea valores
devueltos para la función CSTR.
Ejemplo de CUInt
En el ejemplo siguiente se usa la función CUInt para convertir un valor numérico en
UInteger .
Ejemplo de CULng
En el ejemplo siguiente se usa la función CULng para convertir un valor numérico en
ULong .
Ejemplo de CUShort
En el ejemplo siguiente se usa la función CUShort para convertir un valor numérico
en UShort .
Dim aDouble As Double
Dim aUShort As UShort
aDouble = 39.501
' The following line of code sets aUShort to 40.
aUShort = CUShort(aDouble)
Vea también
Asc
AscW
Chr
ChrW
Int
Fix
Format
Hex
Oct
Str
Val
Funciones de conversión
Conversiones de tipos en Visual Basic
Valores devueltos para la función CStr (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
En la tabla siguiente se describen los valores devueltos para CStr para diferentes tipos de datos de expression .
Date (tipo de datos) Cadena que contiene un valor de Date (fecha y hora) en el
formato de fecha corta del sistema.
CStr y Date
El tipo de Date siempre contiene información de fecha y hora. A efectos de la conversión de tipos, Visual Basic
considera 1/1/0001 (1 de enero del año 1) para que sea un valor neutro para la fecha y 00:00:00 (medianoche)
como valor neutro para el tiempo. CStr no incluye valores neutros en la cadena resultante. Por ejemplo, si
convierte #January 1, 0001 9:30:00# en una cadena, el resultado es "9:30:00 AM"; se suprime la información de
fecha. Sin embargo, la información de fecha todavía está presente en el valor de Date original y se puede
recuperar con funciones como DatePart.
NOTE
La función CStr realiza su conversión en función de la configuración de la referencia cultural actual de la aplicación. Para
obtener la representación en forma de cadena de un número en una referencia cultural determinada, use el método
ToString(IFormatProvider) del número. Por ejemplo, utilice Double.ToString al convertir un valor de tipo Double en un
String .
Vea también
DatePart
Funciones de conversión de tipos
Boolean (tipo de datos)
Date (tipo de datos)
CType (Función) (Visual Basic)
27/11/2019 • 4 minutes to read • Edit Online
Devuelve el resultado de convertir explícitamente una expresión en un tipo de datos, objeto, estructura, clase
o interfaz especificados.
Sintaxis
CType(expression, typename)
Elementos
expression cualquier expresión válida. Si el valor de expression está fuera del intervalo permitido por
typename , Visual Basic produce una excepción.
typename cualquier expresión válida dentro de una cláusula As en una instrucción Dim , es decir, el nombre
de cualquier tipo de datos, objeto, estructura, clase o interfaz.
Comentarios
TIP
También puede utilizar las siguientes funciones para realizar una conversión de tipos:
Funciones de conversión de tipos como CByte , CDbl y CInt que realizan una conversión a un tipo de datos
específico. Para obtener más información, vea funciones de conversión de tipos.
Operador DirectCast o TryCast. Estos operadores requieren que un tipo herede de o implemente el otro tipo.
Pueden proporcionar un rendimiento algo mejor que CType al convertir a y desde el tipo de datos Object .
CType se compila en línea, lo que significa que el código de conversión forma parte del código que evalúa la
expresión. En algunos casos, el código se ejecuta más rápido porque no se llama a ningún procedimiento
para realizar la conversión.
Si no se define ninguna conversión de expression a typename (por ejemplo, de Integer a Date ), Visual
Basic muestra un mensaje de error en tiempo de compilación.
Si se produce un error en la conversión en tiempo de ejecución, se produce la excepción adecuada. Si se
produce un error en una conversión de restricción, una OverflowException es el resultado más común. Si la
conversión no está definida, se produce una InvalidCastException. Por ejemplo, esto puede ocurrir si
expression es de tipo Object y su tipo en tiempo de ejecución no tiene ninguna conversión a typename .
Si el tipo de datos de expression o typename es una clase o estructura que ha definido, puede definir CType
en esa clase o estructura como un operador de conversión. Esto hace que CType actúe como un operador
sobrecargado. Si lo hace, puede controlar el comportamiento de las conversiones hacia y desde la clase o
estructura, incluidas las excepciones que se pueden producir.
Sobrecarga
También se puede sobrecargar el operador CType en una clase o estructura definida fuera del código. Si el
código se convierte en o desde una clase o estructura de este tipo, asegúrese de que comprende el
comportamiento de su CType operador. Para obtener más información, consulta Operator Procedures.
Ejemplo
En el ejemplo siguiente se usa la función CType para convertir una expresión al tipo de datos Single .
Vea también
OverflowException
InvalidCastException
Funciones de conversión de tipos
Funciones de conversión
Operator Statement
Definir un operador de conversión
Conversión de tipos en .NET Framework
Modificadores de Visual Basic
05/12/2019 • 2 minutes to read • Edit Online
Los temas de esta sección documentan los modificadores en tiempo de ejecución de Visual Basic.
Esta sección
Ansi
Ensamblado
Async
Auto
ByRef
ByVal
Predetermiado
Friend
In
Iterator
Key
Module <keyword>
MustInherit
MustOverride
Narrowing
NotInheritable
NotOverridable
Optional
Out
Sobrecargas
Overridable
Overrides
ParamArray
Partial
Private
Private Protected
Protected
Protected Friend
Public
ReadOnly
Shadows
Shared
Static
Unicode
Widening
WithEvents
WriteOnly
Secciones relacionadas
Referencia del lenguaje Visual Basic
Ansi (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Especifica que Visual Basic debe serializar todas las cadenas en valores de American National Standards Institute
(ANSI), independientemente del nombre del procedimiento externo que se está declarando.
Cuando se llama a un procedimiento definido fuera del proyecto, el compilador Visual Basic no tiene acceso a la
información que necesita para llamar al procedimiento correctamente. Esta información incluye dónde se
encuentra el procedimiento, cómo se identifica, su secuencia de llamada y tipo de valor devuelto, y el juego de
caracteres de cadena que usa. La instrucción Declare crea una referencia a un procedimiento externo y
proporciona esta información necesaria.
La parte charsetmodifier de la instrucción Declare proporciona la información del juego de caracteres para
calcular las referencias de las cadenas durante una llamada al procedimiento externo. También afecta al modo en
que Visual Basic busca el nombre del procedimiento externo en el archivo externo. El modificador Ansi especifica
que Visual Basic debe calcular las referencias de todas las cadenas a valores ANSI y debe buscar el procedimiento
sin modificar su nombre durante la búsqueda.
Si no se especifica ningún modificador de juego de caracteres, Ansi es el valor predeterminado.
Comentarios
El modificador Ansi se puede usar en este contexto:
Declare (instrucción)
Vea también
Auto
Unicode
Palabras clave
Assembly (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Especifica que un atributo al principio de un archivo de código fuente se aplica a todo el ensamblado.
Comentarios
Muchos atributos pertenecen a un elemento de programación individual, como una clase o una propiedad. Este
atributo se aplica asociando el bloque de atributos, entre corchetes angulares ( < > ), directamente a la instrucción
de declaración.
Si un atributo no solo pertenece al elemento siguiente, sino a todo el ensamblado, coloca el bloque de atributos al
principio del archivo de código fuente e identifica el atributo con la palabra clave Assembly . Si se aplica al módulo
de ensamblado actual, se usa la palabra clave Module .
También puede aplicar un atributo a un ensamblado en el archivo AssemblyInfo. VB, en cuyo caso no es necesario
usar un bloque de atributos en el archivo de código fuente principal.
Vea también
Module <keyword>
Información general de atributos
Async (Visual Basic)
27/11/2019 • 5 minutes to read • Edit Online
El modificador Async indica que el método o la expresión lambda que modifica es asincrónico. Estos métodos
se conocen como métodos asincrónicos.
Un método asincrónico proporciona una manera cómoda de hacer el trabajo de larga duración sin bloquear el
subproceso del llamador. El llamador de un método asincrónico puede reanudar el trabajo sin esperar a que el
método asincrónico finalice.
NOTE
Las palabras clave Async y Await se incluyeron en Visual Studio 2012. Para obtener una introducción a la
programación asincrónica, vea programación asincrónica con Async y Await.
En el siguiente ejemplo se muestra la estructura de un método asincrónico. Por convención, los nombres de
método asincrónico acaban en “Async”.
' . . .
' The return statement completes the task. Any method that is
' awaiting ExampleMethodAsync can now get the integer result.
Return exampleInt
End Function
Normalmente, un método modificado por la palabra clave Async contiene al menos una expresión o
instrucción Await . El método se ejecuta sincrónicamente hasta alcanzar el primer Await , punto en el que se
suspende hasta que la tarea en espera se complete. Mientras tanto, se devuelve el control al llamador del
método asincrónico. Si el método no contiene una expresión o instrucción Await , el método no se suspende y
se ejecuta como un método sincrónico. Una advertencia del compilador alerta de cualquier método asincrónico
que no contenga Await , porque esa situación podría indicar un error. Para obtener más información, vea el
error del compilador.
La palabra clave Async no está reservada. Es una palabra clave cuando modifica un método o una expresión
lambda. En todos los demás contextos, se interpreta como identificador.
Ejemplo
Los ejemplos siguientes muestran un controlador de eventos asincrónicos, una expresión lambda asincrónica y
un método asincrónico. Para obtener un ejemplo completo en el que se usan estos elementos, vea Tutorial:
acceso a la web mediante Async y Await. Puede descargar el código del tutorial en Ejemplos de código para
desarrolladores.
' Send the request to the Internet resource and wait for
' the response.
Using response As WebResponse = Await webReq.GetResponseAsync()
' Get the data stream that is associated with the specified URL.
Using responseStream As Stream = response.GetResponseStream()
' Read the bytes in responseStream and copy them to content.
' CopyToAsync returns a Task, not a Task<T>.
Await responseStream.CopyToAsync(content)
End Using
End Using
Vea también
AsyncStateMachineAttribute
Await (operador)
Programación asincrónica con Async y Await
Tutorial: Acceso a Web mediante Async y Await
Auto (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Especifica que Visual Basic debe serializar las cadenas según las reglas de .NET Framework basadas en el nombre
externo del procedimiento externo que se va a declarar.
Cuando se llama a un procedimiento definido fuera del proyecto, el compilador Visual Basic no tiene acceso a la
información que debe tener para llamar al procedimiento correctamente. Esta información incluye dónde se
encuentra el procedimiento, cómo se identifica, su secuencia de llamada y tipo de valor devuelto, y el juego de
caracteres de cadena que usa. La instrucción Declare crea una referencia a un procedimiento externo y
proporciona esta información necesaria.
La parte charsetmodifier de la instrucción Declare proporciona la información del juego de caracteres para
calcular las referencias de las cadenas durante una llamada al procedimiento externo. También afecta al modo en
que Visual Basic busca el nombre del procedimiento externo en el archivo externo. El modificador Auto
especifica que Visual Basic debe serializar las cadenas según las reglas de .NET Framework y que debe determinar
el juego de caracteres base de la plataforma en tiempo de ejecución y, posiblemente, modificar el nombre del
procedimiento externo si se produce un error en la búsqueda inicial. Para obtener más información, vea "juegos
de caracteres" en instrucción Declare.
Si no se especifica ningún modificador de juego de caracteres, Ansi es el valor predeterminado.
Comentarios
El modificador Auto se puede usar en este contexto:
Declare (instrucción)
Vea también
Ansi
Unicode
Palabras clave
ByRef (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Especifica que un argumento se pasa de manera que el procedimiento llamado puede cambiar el valor de una
variable subyacente al argumento en el código de llamada.
Comentarios
El modificador ByRef se puede utilizar en los contextos siguientes:
Declare (instrucción)
Function (instrucción)
Sub (instrucción)
Vea también
Palabras clave
Paso de argumentos por valor y por referencia
ByVal (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Especifica que un argumento se pasa por valor, de modo que el procedimiento o la propiedad a los que se ha
llamado no pueden cambiar el valor de una variable subyacente del argumento en el código de llamada. Si no se
especifica ningún modificador, ByVal es el valor predeterminado.
NOTE
Dado que es el valor predeterminado, no es necesario especificar explícitamente la palabra clave ByVal en las firmas de
método. Tiende a producir código ruidoso y, a menudo, conduce a la palabra clave de ByRef no predeterminada que se
pasa por alto.
Comentarios
El modificador ByVal se puede utilizar en los contextos siguientes:
Declare (instrucción)
Function (instrucción)
Operator Statement
Property (instrucción)
Sub (instrucción)
Ejemplo
En el siguiente ejemplo se muestra el uso del mecanismo de paso de parámetros ByVal con un argumento de
tipo de referencia. En el ejemplo, el argumento es c1 , una instancia de la clase Class1 . ByVal evita que el
código de los procedimientos cambie el valor subyacente del argumento de referencia, c1 , pero no protege los
campos y propiedades accesibles de c1 .
Module Module1
Sub Main()
' Declare an instance of the class and assign a value to its field.
Dim c1 As New Class1()
c1.Field = 5
Console.WriteLine(c1.Field)
' Output: 5
' ByVal does not prevent changing the value of a field or property.
ChangeFieldValue(c1)
Console.WriteLine(c1.Field)
' Output: 500
Console.ReadKey()
End Sub
End Module
Vea también
Palabras clave
Paso de argumentos por valor y por referencia
Default (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Comentarios
Una clase, estructura o interfaz puede designar como máximo una de sus propiedades como la propiedad
predeterminada, siempre que esa propiedad tome al menos un parámetro. Si el código hace referencia a una
clase o estructura sin especificar un miembro, Visual Basic resuelve esa referencia a la propiedad
predeterminada.
Las propiedades predeterminadas pueden dar lugar a una pequeña reducción en los caracteres de código fuente,
pero pueden hacer que el código sea más difícil de leer. Si el código de llamada no está familiarizado con su clase
o estructura, cuando hace referencia al nombre de la clase o de la estructura no puede estar seguro de si esa
referencia tiene acceso a la clase o estructura, o a una propiedad predeterminada. Esto puede provocar errores
del compilador o errores de lógica sutiles en tiempo de ejecución.
Puede reducir en cierto modo la posibilidad de que se produzcan errores de propiedad predeterminados Si usa
siempre la instrucción Option Strict para establecer la comprobación del tipo de compilador en On .
Si piensa utilizar una clase o estructura predefinida en el código, debe determinar si tiene una propiedad
predeterminada y, en ese caso, cuál es su nombre.
Debido a estas desventajas, considere la posibilidad de no definir las propiedades predeterminadas. Para facilitar
la lectura del código, también debe considerar la posibilidad de hacer referencia siempre a todas las propiedades
explícitamente, incluso a las propiedades predeterminadas.
El modificador Default se puede usar en este contexto:
Property (instrucción)
Vea también
Cómo: declarar y llamar a una propiedad predeterminada en Visual Basic
Palabras clave
Friend (Visual Basic)
27/11/2019 • 4 minutes to read • Edit Online
Especifica que solo se puede tener acceso a uno o varios elementos de programación declarados desde
dentro del ensamblado que contiene su declaración.
Comentarios
En muchos casos, desea que los elementos de programación, como clases y estructuras, se usen en todo el
ensamblado, no solo en el componente que los declara. Sin embargo, es posible que no desee que el
código fuera del ensamblado tenga acceso a ellos (por ejemplo, si la aplicación es propietaria). Si desea
limitar el acceso a un elemento de esta manera, puede declararlo mediante el modificador Friend .
El código de otras clases, estructuras y módulos que se compilan en el mismo ensamblado pueden tener
acceso a todos los elementos de Friend de ese ensamblado.
Friend acceso es a menudo el nivel preferido para los elementos de programación de una aplicación y
Friend es el nivel de acceso predeterminado de una interfaz, un módulo, una clase o una estructura.
Solo puede usar Friend en el nivel de módulo, interfaz o espacio de nombres. Por consiguiente, el
contexto de la declaración de un elemento Friend debe ser un archivo de código fuente, un espacio de
nombres, una interfaz, un módulo, una clase o una estructura; no puede ser un procedimiento.
NOTE
También puede usar el modificador de acceso Friend protegido , que hace que un miembro de clase sea accesible
desde dentro de esa clase, desde las clases derivadas y desde el mismo ensamblado en el que se define la clase. Para
restringir el acceso a un miembro de dentro de su clase y de las clases derivadas en el mismo ensamblado, se utiliza
el modificador de acceso protegido privado .
Para obtener una comparación de Friend y los demás modificadores de acceso, vea niveles de acceso en
Visual Basic.
NOTE
Puede especificar que otro ensamblado es un ensamblado de confianza, lo que le permite tener acceso a todos los
tipos y miembros marcados como Friend . Para más información, vea Ensamblados de confianza.
Ejemplo
La siguiente clase usa el modificador Friend para permitir que otros elementos de programación del
mismo ensamblado tengan acceso a determinados miembros.
Class CustomerInfo
End Sub
' Require that a customer identifier be specified for the public constructor.
Public Sub New(ByVal customerID As Integer)
p_CustomerID = customerID
End Sub
Uso
Puede usar el modificador Friend en estos contextos:
Class (instrucción)
Const (instrucción)
Declare (instrucción)
Delegate (instrucción)
Dim (instrucción)
Enum (instrucción)
Event (instrucción)
Function (instrucción)
Interface (instrucción)
Module (instrucción)
Property (instrucción)
Structure (instrucción)
Sub (instrucción)
Vea también
InternalsVisibleToAttribute
Public
Protected
Private
Private Protected
Protected Friend
Niveles de acceso en Visual Basic
Procedimientos
Estructuras
Objetos y clases
In (Modificador genérico) (Visual Basic)
23/10/2019 • 4 minutes to read • Edit Online
Para los parámetros de tipo genérico, la palabra clave In especifica que el parámetro de tipo es contravariante.
Comentarios
La contravarianza permite usar un tipo menos derivado que el que se especifica en el parámetro genérico. Esto
permite la conversión implícita de las clases que implementan interfaces variantes y la conversión implícita de los
tipos de delegado.
Para obtener más información, vea Covarianza y contravarianza.
Reglas
Puede usar la palabra clave In en las interfaces y delegados genéricos.
Un parámetro de tipo puede declararse como contravariante en una interfaz o un delegado genérico si solo se usa
como un tipo de argumentos de método y no se usa como tipo de valor devuelto de método. los parámetros
ByRef no pueden ser covariantes o contravariante.
La covarianza y la contravarianza se admiten para los tipos de referencia y no se admiten para los tipos de valor.
En Visual Basic, no se pueden declarar eventos en interfaces contravariantes sin especificar el tipo de delegado.
Además, las interfaces contravariantes no pueden tener clases anidadas, enumeraciones o estructuras, pero
pueden tener interfaces anidadas.
Comportamiento
Una interfaz que tiene un parámetro de tipo contravariante permite que sus métodos acepten argumentos de
tipos menos derivados que los que se especifican en el parámetro de tipo de interfaz. Por ejemplo, dado que en
.NET Framework 4, en la interfaz IComparer<T>, el tipo T es contravariante, puede asignar un objeto del tipo
IComparer(Of Person) a un objeto del tipo IComparer(Of Employee) sin usar ningún método de conversión
especial si Employee hereda de Person .
A un delegado contravariante se le puede asignar otro delegado del mismo tipo, pero con un parámetro de tipo
genérico menos derivado.
Sub Main()
Dim iobj As IContravariant(Of Object) = New Sample(Of Object)()
Dim istr As IContravariant(Of String) = New Sample(Of String)()
Vea también
Varianza en interfaces genéricas
Out
Iterador (Visual Basic)
27/11/2019 • 3 minutes to read • Edit Online
Comentarios
Un iterador realiza una iteración personalizada en una colección. Un iterador usa la instrucción yield para
devolver cada elemento de la colección de uno en uno. Cuando se alcanza una instrucción Yield , se conserva la
ubicación actual en el código. La ejecución se reinicia desde esa ubicación la próxima vez que se llama a la
función del iterador.
Un iterador se puede implementar como una función o como Get descriptor de acceso de una definición de
propiedad. El modificador Iterator aparece en la declaración de la función de iterador o de Get descriptor de
acceso.
Se llama a un iterador desde el código de cliente mediante un método for each... Instrucción siguiente.
El tipo de valor devuelto de una función de iterador o Get descriptor de acceso puede ser IEnumerable,
IEnumerable<T>, IEnumeratoro IEnumerator<T>.
Un iterador no puede tener ningún parámetro ByRef .
Un iterador no puede aparecer en un evento, un constructor de instancia, un constructor estático o un destructor
estático.
Un iterador puede ser una función anónima. Para obtener más información, consulta Iteradores.
Uso
El modificador Iterator se puede utilizar en los contextos siguientes:
Function (instrucción)
Property (instrucción)
Ejemplo
En el ejemplo siguiente se muestra una función de iterador. La función de iterador tiene una instrucción Yield
que está dentro de un ... Siguiente bucle. Cada iteración del cuerpo de la instrucción for each en Main crea una
llamada a la función de iterador Power . Cada llamada a la función de iterador prosigue con la siguiente
ejecución de la instrucción Yield , que se produce durante la siguiente iteración del bucle For…Next .
Sub Main()
For Each number In Power(2, 8)
Console.Write(number & " ")
Next
' Output: 2 4 8 16 32 64 128 256
Console.ReadKey()
End Sub
Dim result = 1
Ejemplo
En el ejemplo siguiente se muestra un descriptor de acceso Get que es un iterador. El modificador Iterator
está en la declaración de propiedad.
Sub Main()
Dim theGalaxies As New Galaxies
For Each theGalaxy In theGalaxies.NextGalaxy
With theGalaxy
Console.WriteLine(.Name & " " & .MegaLightYears)
End With
Next
Console.ReadKey()
End Sub
Vea también
IteratorStateMachineAttribute
Iteradores
Yield (instrucción)
Key (Visual Basic)
27/11/2019 • 5 minutes to read • Edit Online
La palabra clave Key permite especificar el comportamiento de las propiedades de los tipos anónimos. Solo las
propiedades que se designan como propiedades clave participan en las pruebas de igualdad entre las instancias de
tipo anónimo o el cálculo de los valores de código hash. No se pueden cambiar los valores de las propiedades de
clave.
Designe una propiedad de un tipo anónimo como una propiedad de clave colocando la palabra clave Key delante
de su declaración en la lista de inicialización. En el ejemplo siguiente, Airline y FlightNo son propiedades clave,
pero Gate no.
Cuando se crea un nuevo tipo anónimo, hereda directamente de Object. El compilador invalida tres miembros
heredados: Equals, GetHashCodey ToString. El código de invalidación que se produce para Equals y GetHashCode
se basa en las propiedades de clave. Si no hay ninguna propiedad clave en el tipo, GetHashCode y Equals no se
invalidan.
Igualdad
Dos instancias de tipo anónimo son iguales si son instancias del mismo tipo y si los valores de sus propiedades de
clave son iguales. En los ejemplos siguientes, flight2 es igual a flight1 del ejemplo anterior porque son
instancias del mismo tipo anónimo y tienen valores coincidentes para sus propiedades de clave. Sin embargo,
flight3 no es igual a flight1 porque tiene un valor diferente para una propiedad de clave, FlightNo . La
instancia flight4 no es del mismo tipo que flight1 porque designan propiedades diferentes como propiedades
clave.
Si dos instancias de se declaran solo con propiedades que no son de clave, idénticas en nombre, tipo, orden y valor,
las dos instancias de no son iguales. Una instancia sin propiedades de clave es igual a sí misma.
Para obtener más información sobre las condiciones en las que dos instancias de tipos anónimos son instancias
del mismo tipo anónimo, vea tipos anónimos.
Cálculo de código hash
Como Equals, la función hash que se define en GetHashCode para un tipo anónimo se basa en las propiedades
clave del tipo. En los siguientes ejemplos se muestra la interacción entre las propiedades de clave y los valores de
código hash.
Las instancias de un tipo anónimo que tienen los mismos valores para todas las propiedades de clave tienen el
mismo valor de código hash, incluso si las propiedades que no son de clave no tienen valores coincidentes. La
siguiente instrucción devuelve True .
Console.WriteLine(flight1.GetHashCode = flight2.GetHashCode)
Las instancias de un tipo anónimo que tienen valores diferentes para una o varias propiedades de clave tienen
diferentes valores de código hash. La siguiente instrucción devuelve False .
Console.WriteLine(flight1.GetHashCode = flight3.GetHashCode)
Las instancias de tipos anónimos que designan propiedades diferentes como propiedades clave no son instancias
del mismo tipo. Tienen valores de código hash diferentes incluso cuando los nombres y valores de todas las
propiedades son iguales. La siguiente instrucción devuelve False .
Console.WriteLine(flight1.GetHashCode = flight4.GetHashCode)
' The following statement will not compile, because FlightNo is a key
' property and cannot be changed.
' flight1.FlightNo = 1234
'
' Gate is not a key property. Its value can be changed.
flight1.Gate = "C5"
Vea también
Definición de tipo anónimo
Deducir tipos y nombres de propiedades en declaraciones de tipos anónimos
Tipos anónimos
> De palabra clave de Module <(Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Especifica que un atributo al principio de un archivo de código fuente se aplica al módulo de ensamblado actual.
Comentarios
Muchos atributos pertenecen a un elemento de programación individual, como una clase o una propiedad. Este
atributo se aplica asociando el bloque de atributos, entre corchetes angulares ( < > ), directamente a la instrucción
de declaración.
Si un atributo no solo pertenece al elemento siguiente, sino al módulo de ensamblado actual, coloca el bloque de
atributos al principio del archivo de código fuente e identifica el atributo con la palabra clave Module . Si se aplica
a todo el ensamblado, se utiliza la palabra clave Assembly .
El modificador Module no es el mismo que el de la instrucción Module.
Vea también
Ensamblado
Module (instrucción)
Información general de atributos
MustInherit (Visual Basic)
27/11/2019 • 4 minutes to read • Edit Online
Especifica que una clase se puede usar solo como una clase base y que no se puede crear un objeto directamente
a partir de ella.
Comentarios
El propósito de una clase base (también conocida como clase abstracta) es definir la funcionalidad común a
todas las clases derivadas de ella. Esto evita que las clases derivadas tengan que volver a definir los elementos
comunes. En algunos casos, esta funcionalidad común no es suficiente para crear un objeto utilizable y cada clase
derivada define la funcionalidad que falta. En tal caso, desea que el código utilizado solo cree objetos a partir de
las clases derivadas. Utilice MustInherit en la clase base para aplicar este.
Otro uso de una clase MustInherit es restringir una variable a un conjunto de clases relacionadas. Puede definir
una clase base y derivar todas estas clases relacionadas de ella. No es necesario que la clase base proporcione
ninguna funcionalidad común a todas las clases derivadas, pero puede servir como filtro para asignar valores a
variables. Si el código utilizado declara una variable como la clase base, Visual Basic le permite asignar solo un
objeto de una de las clases derivadas a esa variable.
El .NET Framework define varias clases MustInherit , entre ellas Array, Enumy ValueType. ValueType es un
ejemplo de una clase base que restringe una variable. Todos los tipos de valor se derivan de ValueType. Si declara
una variable como ValueType, solo podrá asignar tipos de valor a esa variable.
Reglas
Contexto de declaración. Solo se puede usar MustInherit en una instrucción de Class .
Modificadores combinados. No se puede especificar MustInherit junto con NotInheritable en la
misma declaración.
Ejemplo
En el ejemplo siguiente se muestra la herencia forzada y el reemplazo forzado. La clase base shape define una
variable acrossLine . Las clases circle y square derivan de shape . Heredan la definición de acrossLine , pero
deben definir la función area porque el cálculo es diferente para cada tipo de forma.
Public MustInherit Class shape
Public acrossLine As Double
Public MustOverride Function area() As Double
End Class
Public Class circle : Inherits shape
Public Overrides Function area() As Double
Return Math.PI * acrossLine
End Function
End Class
Public Class square : Inherits shape
Public Overrides Function area() As Double
Return acrossLine * acrossLine
End Function
End Class
Public Class consumeShapes
Public Sub makeShapes()
Dim shape1, shape2 As shape
shape1 = New circle
shape2 = New square
End Sub
End Class
Puede declarar shape1 y shape2 para que sean de tipo shape . Sin embargo, no se puede crear un objeto a
partir de shape porque falta la funcionalidad de la función area y está marcada como MustInherit .
Dado que se declaran como shape , las variables shape1 y shape2 se restringen a los objetos de las clases
derivadas circle y square . Visual Basic no permite asignar ningún otro objeto a estas variables, lo que
proporciona un alto nivel de seguridad de tipos.
Uso
El modificador MustInherit se puede usar en este contexto:
Class (instrucción)
Vea también
Inherits (instrucción)
NotInheritable
Palabras clave
Fundamentos de la herencia
MustOverride (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Especifica que una propiedad o procedimiento no está implementado en esta clase y se debe invalidar en una
clase derivada antes de que se pueda utilizar.
Comentarios
Solo se puede usar MustOverride en una instrucción de declaración de propiedad o procedimiento. La propiedad
o el procedimiento que especifica MustOverride debe ser miembro de una clase y la clase debe marcarse como
MustInherit.
Reglas
Declaración incompleta. Cuando se especifica MustOverride , no se proporcionan líneas de código
adicionales para la propiedad o el procedimiento, ni siquiera la instrucción End Function , End Property o
End Sub .
Sombrear e invalidar. Aunque tanto el sombreado como el reemplazo redefinen elementos heredados,
existen diferencias significativas entre ambos conceptos. Para obtener más información, vea sombrear en
Visual Basic.
Términos alternativos. Un elemento que no se puede usar excepto en una invalidación a veces se
denomina elemento virtual puro .
El modificador MustOverride se puede utilizar en los contextos siguientes:
Function (instrucción)
Property (instrucción)
Sub (instrucción)
Vea también
NotOverridable
Overridable
Overrides
MustInherit
Palabras clave
Sombrear en Visual Basic
Narrowing (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Indica que un operador de conversión ( CType ) convierte una clase o estructura en un tipo que podría no contener
algunos de los valores posibles de la clase o estructura original.
Vea también
Operator Statement
Widening
Conversiones de ampliación y de restricción
Definir un operador
Función CType
Option Strict (instrucción)
NotInheritable (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Comentarios
Términos alternativos . Una clase que no se puede heredar se denomina a veces clase sellada .
El modificador NotInheritable se puede usar en este contexto:
Class (instrucción)
Vea también
Inherits (instrucción)
MustInherit
Palabras clave
NotOverridable (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Especifica que una propiedad o un procedimiento no se pueden invalidar en una clase derivada.
Comentarios
El modificador NotOverridable impide que una propiedad o un método se invalide en una clase derivada. El
modificador Overridable permite que una propiedad o un método de una clase se invalide en una clase
derivada. Para más información, vea Fundamentos de la herencia.
Si no se especifica el modificador Overridable o NotOverridable , el valor predeterminado depende de si la
propiedad o el método reemplaza a una propiedad o método de clase base. Si la propiedad o el método
reemplaza una propiedad o un método de clase base, la configuración predeterminada es Overridable ; de lo
contrario, se NotOverridable .
Un elemento que no se puede invalidar se denomina a veces elemento sellado .
Solo se puede usar NotOverridable en una instrucción de declaración de propiedad o procedimiento. Solo
puede especificar NotOverridable en una propiedad o un procedimiento que invalide otra propiedad o
procedimiento, es decir, solo en combinación con Overrides .
Modificadores combinados
No se puede especificar Overridable ni NotOverridable para un método Private .
No se puede especificar NotOverridable junto con MustOverride , Overridable o Shared en la misma
declaración.
Uso
El modificador NotOverridable se puede utilizar en los contextos siguientes:
Function (instrucción)
Property (instrucción)
Sub (instrucción)
Vea también
Modificadores
Fundamentos de la herencia
MustOverride
Overridable
Overrides
Palabras clave
Sombrear en Visual Basic
Optional (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Comentarios
Para cada parámetro opcional, debe especificar una expresión constante como valor predeterminado de ese
parámetro. Si la expresión se evalúa como Nothing, se usa el valor predeterminado del tipo de datos Value como
valor predeterminado del parámetro.
Si la lista de parámetros contiene un parámetro opcional, cada parámetro que siga también debe ser opcional.
El modificador Optional se puede utilizar en los contextos siguientes:
Declare (instrucción)
Function (instrucción)
Property (instrucción)
Sub (instrucción)
NOTE
Cuando se llama a un procedimiento con o sin parámetros opcionales, se pueden pasar argumentos por posición o por
nombre. Para obtener más información, vea pasar argumentos por posición y por nombre.
NOTE
También puede definir un procedimiento con parámetros opcionales mediante sobrecarga. Si tiene un parámetro opcional,
puede definir dos versiones sobrecargadas del procedimiento, una que acepte el parámetro y otra que no lo sea. Para
obtener más información, consulta Procedure Overloading.
Ejemplo
En el ejemplo siguiente se define un procedimiento que tiene un parámetro opcional.
Public Function FindMatches(ByRef values As List(Of String),
ByVal searchString As String,
Optional ByVal matchCase As Boolean = False) As List(Of String)
If matchCase Then
results = From v In values
Where v.Contains(searchString)
Else
results = From v In values
Where UCase(v).Contains(UCase(searchString))
End If
Return results.ToList()
End Function
Ejemplo
En el ejemplo siguiente se muestra cómo llamar a un procedimiento con argumentos pasados por posición y con
argumentos pasados por nombre. El procedimiento tiene dos parámetros opcionales.
' Omit one optional argument by holding its place with a comma.
studentInfo("Mary", , #9/21/1981#)
Vea también
Lista de parámetros
Parámetros opcionales
Palabras clave
Out (Modificador genérico) (Visual Basic)
27/11/2019 • 5 minutes to read • Edit Online
En el caso de los parámetros de tipo genérico, la palabra clave Out especifica que el tipo es covariante.
Comentarios
La covarianza le permite usar un tipo más derivado que el que se especifica en el parámetro genérico. Esto
permite la conversión implícita de las clases que implementan interfaces variantes y la conversión implícita de los
tipos de delegado.
Para obtener más información, vea Covariance and Contravariance (Covarianza y contravarianza).
Reglas
Puede usar la palabra clave Out en las interfaces y delegados genéricos.
En una interfaz genérica, un parámetro de tipo se puede declarar como covariante si cumple las siguientes
condiciones:
El parámetro de tipo se usa solamente como tipo de valor devuelto de los métodos de interfaz y no como
tipo de los argumentos de método.
NOTE
Hay una excepción para esta regla. Si en una interfaz covariante tiene un delegado genérico contravariante como
parámetro de método, puede usar el tipo covariante como parámetro de tipo genérico para este delegado. Para
obtener más información sobre los delegados genéricos covariantes y contravariantes, vea Varianza en delegados y
Usar la varianza para los delegados genéricos Func y Action.
El parámetro de tipo no se usa como restricción genérica para los métodos de interfaz.
En un delegado genérico, un parámetro de tipo puede declararse como covariante si solo se usa como un tipo de
valor devuelto de método y no se usa para los argumentos de método.
La covarianza y la contravarianza son compatibles con los tipos de referencia, pero no lo son con los tipos de
valor.
En Visual Basic, no se pueden declarar eventos en interfaces covariantes sin especificar el tipo de delegado.
Además, las interfaces covariantes no pueden tener clases, enumeraciones o estructuras anidadas, pero pueden
tener interfaces anidadas.
Comportamiento
Una interfaz con un parámetro de tipo covariante permite que sus métodos devuelvan tipos más derivados que
los especificados por el parámetro de tipo. Por ejemplo, dado que en .NET Framework 4, en IEnumerable<T>, el
tipo T es covariante, puede asignar un objeto del tipo IEnumerable(Of String) a otro objeto del tipo
IEnumerable(Of Object) sin usar ningún método de conversión especial.
A un delegado covariante se le puede asignar otro delegado del mismo tipo, pero con un parámetro de tipo
genérico más derivado.
Ejemplo
En el ejemplo siguiente se muestra cómo declarar, extender e implementar una interfaz genérica covariante.
También se muestra cómo usar la conversión implícita para las clases que implementan una interfaz covariante.
Sub Main()
Dim iobj As ICovariant(Of Object) = New Sample(Of Object)()
Dim istr As ICovariant(Of String) = New Sample(Of String)()
Ejemplo
En el ejemplo siguiente se muestra cómo declarar, invocar y crear instancias de un delegado genérico covariante.
También se muestra cómo puede usar la conversión implícita para los tipos de delegado.
Especifica que una propiedad o procedimiento vuelve a declarar una o varias propiedades o procedimientos
existentes con el mismo nombre.
Comentarios
La sobrecarga es la práctica de proporcionar más de una definición para un nombre de propiedad o
procedimiento determinado en el mismo ámbito. La Redeclaración de una propiedad o un procedimiento con
una firma diferente se denomina a veces ocultar por firma.
Reglas
Contexto de declaración. Solo se puede usar Overloads en una instrucción de declaración de
propiedad o procedimiento.
Modificadores combinados. No se puede especificar Overloads junto con Shadows en la misma
declaración de procedimiento.
Diferencias requeridas. La firma de esta declaración debe ser diferente de la firma de cada propiedad o
procedimiento que sobrecarga. La firma incluye el nombre de propiedad o procedimiento más lo
siguiente:
el número de parámetros
el orden de los parámetros
los tipos de datos de los parámetros
el número de parámetros de tipo (para un procedimiento genérico)
el tipo de valor devuelto (solo para un procedimiento de operador de conversión)
Todas las sobrecargas deben tener el mismo nombre, pero cada una debe diferir de todas las demás en
uno o varios de los aspectos anteriores. Esto permite al compilador distinguir qué versión debe utilizar
cuando el código llama a la propiedad o el procedimiento.
Diferencias no permitidas. El cambio de uno o varios de los siguientes aspectos no es válido para
sobrecargar una propiedad o un procedimiento, porque no forman parte de la firma:
si devuelve o no un valor (para un procedimiento)
el tipo de datos del valor devuelto (excepto para un operador de conversión)
los nombres de los parámetros o parámetros de tipo
las restricciones en los parámetros de tipo (para un procedimiento genérico)
palabras clave de modificador de parámetro (como ByRef o Optional )
palabras clave de modificador de propiedad o procedimiento (como Public o Shared )
Modificador opcional. No es necesario usar el modificador Overloads al definir varias propiedades o
procedimientos sobrecargados en la misma clase. Sin embargo, si utiliza Overloads en una de las
declaraciones, debe utilizarlo en todas ellas.
Sombreado y sobrecarga. Overloads también puede usarse para prevalecer sobre un miembro
existente, o un conjunto de miembros sobrecargados, en una clase base. Al utilizar Overloads de esta
forma, declara la propiedad o el método con el mismo nombre y la misma lista de parámetros que el
miembro de clase base y no proporciona la palabra clave Shadows .
Si usa Overrides , el compilador agrega de forma implícita Overloads para que las API de la biblioteca trabajen
más fácilmente con C#.
El modificador Overloads se puede utilizar en los contextos siguientes:
Function (instrucción)
Operator Statement
Property (instrucción)
Sub (instrucción)
Vea también
Shadows
Sobrecarga de procedimientos
Generic Types in Visual Basic
Procedimientos de operadores
Definir un operador de conversión
Overridable (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Especifica que una propiedad o un procedimiento se puede invalidar mediante una propiedad o un
procedimiento con el mismo nombre en una clase derivada.
Comentarios
El modificador Overridable permite que una propiedad o un método de una clase se invalide en una clase
derivada. El modificador NotOverridable evita que una propiedad o un método se invalide en una clase
derivada. Para más información, vea Fundamentos de la herencia.
Si no se especifica el modificador Overridable o NotOverridable , el valor predeterminado depende de si la
propiedad o el método reemplaza a una propiedad o método de clase base. Si la propiedad o el método
reemplaza una propiedad o un método de clase base, la configuración predeterminada es Overridable ; de lo
contrario, se NotOverridable .
Puede sombrear o reemplazar para volver a definir un elemento heredado, pero hay diferencias significativas
entre los dos enfoques. Para obtener más información, vea sombrear en Visual Basic.
Un elemento que se puede reemplazar se denomina a veces elemento virtual . Si se puede invalidar, pero no es
necesario, a veces también se denomina elemento concreto .
Solo se puede usar Overridable en una instrucción de declaración de propiedad o procedimiento.
Modificadores combinados
No se puede especificar Overridable ni NotOverridable para un método Private .
No se puede especificar Overridable junto con MustOverride , NotOverridable o Shared en la misma
declaración.
Dado que un elemento de reemplazo es reemplazable de forma implícita, no se puede combinar Overridable
con Overrides .
Uso
El modificador Overridable se puede utilizar en los contextos siguientes:
Function (instrucción)
Property (instrucción)
Sub (instrucción)
Vea también
Modificadores
Fundamentos de la herencia
MustOverride
NotOverridable
Overrides
Palabras clave
Sombrear en Visual Basic
Overrides (Visual Basic)
27/11/2019 • 3 minutes to read • Edit Online
Especifica que una propiedad o procedimiento invalida una propiedad o procedimiento del mismo nombre
heredado de una clase base.
Reglas
Contexto de declaración. Solo se puede usar Overrides en una instrucción de declaración de
propiedad o procedimiento.
Modificadores combinados. No se puede especificar Overrides junto con Shadows o Shared en la
misma declaración. Dado que un elemento de reemplazo es reemplazable de forma implícita, no se
puede combinar Overridable con Overrides .
Firmas coincidentes. La firma de esta declaración debe coincidir exactamente con la firma de la
propiedad o el procedimiento que reemplaza. Esto significa que las listas de parámetros deben tener el
mismo número de parámetros, en el mismo orden y con los mismos tipos de datos.
Además de coincidir con la firma, la declaración de reemplazo también debe coincidir de forma exacta
con los elementos siguientes:
El nivel de acceso.
El tipo de valor devuelto, si lo hay.
Firmas genéricas. En los procedimientos genéricos, la firma incluye el número de parámetros de tipo.
Por lo tanto, la declaración de reemplazo también debe coincidir con la versión de la clase base en este
sentido.
Coincidencia adicional. Además de coincidir con la firma de la versión de la clase base, esta
declaración también debe coincidir con los elementos siguientes:
Modificador de nivel de acceso (por ejemplo, Public)
Mecanismo de paso de cada parámetro (ByVal o ByRef)
Listas de restricciones de los distintos parámetros de tipo de los procedimientos genéricos.
Sombrear e invalidar. Aunque tanto el sombreado como el reemplazo redefinen elementos heredados,
existen diferencias significativas entre ambos conceptos. Para obtener más información, vea sombrear en
Visual Basic.
Si usa Overrides , el compilador agrega de forma implícita Overloads para que las API de la biblioteca trabajen
más fácilmente con C#.
El modificador Overrides se puede utilizar en los contextos siguientes:
Function (instrucción)
Property (instrucción)
Sub (instrucción)
Vea también
MustOverride
NotOverridable
Overridable
Palabras clave
Sombrear en Visual Basic
Generic Types in Visual Basic
Lista de tipos
ParamArray (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Especifica que un parámetro de procedimiento toma una matriz opcional de elementos del tipo especificado.
ParamArray solo se puede usar en el último parámetro de una lista de parámetros.
Comentarios
ParamArray permite pasar un número arbitrario de argumentos al procedimiento. Un parámetro ParamArray
siempre se declara mediante ByVal.
Puede proporcionar uno o varios argumentos a un parámetro ParamArray pasando una matriz del tipo de datos
adecuado, una lista separada por comas de valores o nada en absoluto. Para obtener más información, vea "llamar
a ParamArray" en matrices de parámetros.
IMPORTANT
Siempre que se trata de una matriz que puede ser indefinidamente grande, existe el riesgo de que se produzca una gran
cantidad de capacidad interna de la aplicación. Si acepta una matriz de parámetros del código de llamada, debe probar su
longitud y tomar las medidas adecuadas si es demasiado grande para la aplicación.
Vea también
Palabras clave
Matrices de parámetros
Partial (Visual Basic)
27/11/2019 • 6 minutes to read • Edit Online
Indica que una declaración de tipo es una definición parcial del tipo.
Puede dividir la definición de un tipo en varias declaraciones con la palabra clave Partial . Puede usar todas las
declaraciones parciales que quiera en todos los archivos de código fuente que desee, pero todas las declaraciones
deben estar en el mismo ensamblado y en el mismo espacio de nombres.
NOTE
Visual Basic admite métodos parciales, que normalmente se implementan en clases parciales. Para obtener más información,
vea métodos parciales y Sub Statement.
Sintaxis
[ <attrlist> ] [ accessmodifier ] [ Shadows ] [ MustInherit | NotInheritable ] _
Partial { Class | Structure | Interface | Module } name [ (Of typelist) ]
[ Inherits classname ]
[ Implements interfacenames ]
[ variabledeclarations ]
[ proceduredeclarations ]
{ End Class | End Structure }
Elementos
T ÉRM IN O DEF IN IC IÓ N
End Class o End Structure Finaliza esta definición Class o Structure parcial.
Comentarios
Visual Basic usa definiciones de clase parcial para separar el código generado del código creado por el usuario en
archivos de código fuente independientes. Por ejemplo, el Diseñador de Windows Forms define clases
parciales para controles como Form. No debe modificar el código generado en estos controles.
Todas las reglas para crear clases, estructuras, interfaces y módulos, como las reglas de uso y herencia de
modificadores, se aplican al crear un tipo parcial.
Procedimientos recomendados
En circunstancias normales no debe dividir el desarrollo de un solo tipo en dos o más declaraciones. Por lo
tanto, en la mayoría de los casos no necesita la palabra clave Partial .
Para mejorar la legibilidad, cada declaración parcial de un tipo debe incluir la palabra clave Partial . El
compilador permite a lo sumo una declaración parcial para omitir la palabra clave; si hay dos o más que la
omiten, el compilador señala un error.
Comportamiento
Unión de declaraciones. El compilador trata el tipo como la unión de todas sus declaraciones parciales.
Todos los modificadores de todas las definiciones parciales se aplican a todo el tipo; además, todos los
miembros de todas las definiciones parciales están disponibles para todo el tipo.
Promoción de tipos no permitida para tipos parciales en módulos. Si una definición parcial está
dentro de un módulo, se rechaza automáticamente la promoción de tipos de ese tipo. En este caso, un
conjunto de definiciones parciales puede producir resultados inesperados e incluso errores del compilador.
Para obtener más información, consulte promoción de tipos.
El compilador solo combina las definiciones parciales cuando sus rutas de acceso completas son idénticas.
La palabra clave Partial se puede usar en los siguientes contextos:
Class (instrucción)
Structure (instrucción)
Ejemplo
En el ejemplo siguiente se divide la definición de la clase sampleClass en dos declaraciones, cada una de las
cuales define otro procedimiento Sub .
Las dos definiciones parciales del ejemplo anterior podrían estar en el mismo archivo de origen o en dos archivos
distintos.
Vea también
Class (instrucción)
Structure (instrucción)
Promoción de tipos
Shadows
Generic Types in Visual Basic
Métodos Partial
Private (Visual Basic)
08/01/2020 • 2 minutes to read • Edit Online
Especifica que solo se puede tener acceso a uno o varios elementos de programación declarados desde
dentro del contexto de declaración, incluido desde dentro de cualquier tipo contenido.
Notas
Si un elemento de programación representa la funcionalidad de propiedad o contiene datos
confidenciales, normalmente querrá limitar el acceso a él lo máximo posible. Para lograr la limitación
máxima, solo se permite el módulo, la clase o la estructura que la define para tener acceso a ella. Para
limitar el acceso a un elemento de esta manera, puede declararlo con Private .
NOTE
También puede usar el modificador de acceso protegido privado , que hace que un miembro sea accesible desde
dentro de esa clase y desde las clases derivadas que se encuentran en el ensamblado que lo contiene.
reglas
Contexto de declaración. Solo se puede usar Private en un nivel de módulo. Esto significa que el
contexto de la declaración de un elemento Private debe ser un módulo, una clase o una estructura,
y no puede ser un archivo de código fuente, un espacio de nombres, una interfaz o un procedimiento.
Comportamiento
Nivel de acceso. Todo el código dentro de un contexto de declaración puede tener acceso a sus
elementos Private . Esto incluye el código dentro de un tipo contenido, como una clase anidada o
una expresión de asignación en una enumeración. Ningún código fuera del contexto de la
declaración puede tener acceso a sus elementos Private .
Modificadores de acceso. Las palabras clave que especifican el nivel de acceso se denominan
modificadores de acceso. Para obtener una comparación de los modificadores de acceso, vea
niveles de acceso en Visual Basic.
El modificador Private se puede utilizar en los contextos siguientes:
Class (instrucción)
Const (instrucción)
Declare Statement
Delegate (instrucción)
Dim (instrucción)
Enum (instrucción)
Event (instrucción)
Function (instrucción)
Interface (instrucción)
Property (instrucción)
Structure (instrucción)
Sub (instrucción)
Vea también
Public
Protected
Friend
Private Protected
Protected Friend
Niveles de acceso en Visual Basic
Procedimientos
Estructuras
Objetos y clases
Privado protegido (Visual Basic)
27/11/2019 • 4 minutes to read • Edit Online
<PropertyGroup>
<LangVersion>latest</LangVersion>
</PropertyGroup>
Para obtener más información, vea establecer la versión de lenguaje Visual Basic.
NOTE
En Visual Studio, al seleccionar la ayuda F1 en private protected se proporciona ayuda para privado o protegido. El
IDE elige el token único bajo el cursor en lugar de la palabra compuesta.
Reglas
Contexto de declaración. Solo se puede usar Private Protected en el nivel de clase. Esto significa que
el contexto de la declaración de un elemento Protected debe ser una clase y no puede ser un archivo de
código fuente, un espacio de nombres, una interfaz, un módulo, una estructura o un procedimiento.
Comportamiento
Nivel de acceso. Todo el código de una clase puede tener acceso a sus elementos. El código de
cualquier clase que se deriva de una clase base y se encuentra en el mismo ensamblado puede tener
acceso a todos los elementos Private Protected de la clase base. Sin embargo, el código de cualquier
clase que deriva de una clase base y se encuentra en un ensamblado diferente no puede tener acceso a
la clase base Private Protected elementos.
Modificadores de acceso. Las palabras clave que especifican el nivel de acceso se denominan
modificadores de acceso. Para obtener una comparación de los modificadores de acceso, vea niveles de
acceso en Visual Basic.
El modificador Private Protected se puede utilizar en los contextos siguientes:
Instrucción de clase de una clase anidada
Const (instrucción)
Declare (instrucción)
Instrucción delegada de un delegado anidado en una clase
Dim (instrucción)
Instrucción enum de una enumeración anidada en una clase
Event (instrucción)
Function (instrucción)
Instrucción de interfaz de una interfaz anidada en una clase
Property (instrucción)
Instrucción Structure de una estructura anidada en una clase
Sub (instrucción)
Vea también
Public
Protected
Friend
Private
Protected Friend
Niveles de acceso en Visual Basic
Procedimientos
Estructuras
Objetos y clases
Protected (Visual Basic)
27/11/2019 • 3 minutes to read • Edit Online
Modificador de acceso de miembro que especifica que solo se puede tener acceso a uno o varios
elementos de programación declarados desde dentro de su propia clase o desde una clase derivada.
Comentarios
A veces, un elemento de programación declarado en una clase contiene datos confidenciales o código
restringido, y desea limitar el acceso al elemento. Sin embargo, si la clase es heredable y espera una
jerarquía de clases derivadas, podría ser necesario que estas clases derivadas tengan acceso a los datos o al
código. En tal caso, desea que el elemento sea accesible tanto desde la clase base como desde todas las
clases derivadas. Para limitar el acceso a un elemento de esta manera, puede declararlo con Protected .
NOTE
El modificador de acceso Protected se puede combinar con otros dos modificadores:
El modificador Friend protegido hace que un miembro de clase sea accesible desde dentro de esa clase, desde las
clases derivadas y desde el mismo ensamblado en el que se define la clase.
El modificador Private Protected hace que un miembro de clase sea accesible para los tipos derivados, pero solo
dentro del ensamblado que lo contiene.
Reglas
Contexto de declaración. Solo se puede usar Protected en el nivel de clase. Esto significa que el
contexto de la declaración de un elemento Protected debe ser una clase y no puede ser un archivo de
código fuente, un espacio de nombres, una interfaz, un módulo, una estructura o un procedimiento.
Comportamiento
Nivel de acceso. Todo el código de una clase puede tener acceso a sus elementos. El código de
cualquier clase que deriva de una clase base puede tener acceso a todos los elementos Protected
de la clase base. Esto es cierto para todas las generaciones de derivación. Esto significa que una
clase puede tener acceso a Protected elementos de la clase base de la clase base, etc.
El acceso protegido no es un superconjunto o subconjunto de acceso de confianza.
Modificadores de acceso. Las palabras clave que especifican el nivel de acceso se denominan
modificadores de acceso. Para obtener una comparación de los modificadores de acceso, vea niveles
de acceso en Visual Basic.
El modificador Protected se puede utilizar en los contextos siguientes:
Class (instrucción)
Const (instrucción)
Declare (instrucción)
Delegate (instrucción)
Dim (instrucción)
Enum (instrucción)
Event (instrucción)
Function (instrucción)
Interface (instrucción)
Property (instrucción)
Structure (instrucción)
Sub (instrucción)
Vea también
Public
Friend
Private
Private Protected
Protected Friend
Niveles de acceso en Visual Basic
Procedimientos
Estructuras
Objetos y clases
Friend protegido (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
NOTE
En Visual Studio, al seleccionar la ayuda F1 en protected friend se proporciona ayuda para Protected o Friend. El IDE
elige el token único bajo el cursor en lugar de la palabra compuesta.
Reglas
Contexto de declaración. Solo se puede usar Protected Friend en el nivel de clase. Esto significa que el
contexto de la declaración de un elemento Protected debe ser una clase y no puede ser un archivo de código
fuente, un espacio de nombres, una interfaz, un módulo, una estructura o un procedimiento.
Vea también
Public
Protected
Friend
Private
Private Protected
Niveles de acceso en Visual Basic
Procedimientos
Estructuras
Objetos y clases
Public (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Especifica que uno o varios elementos de programación declarados no tienen restricciones de acceso.
Comentarios
Si va a publicar un componente o un conjunto de componentes, como una biblioteca de clases,
normalmente desea que los elementos de programación sean accesibles por cualquier código que
interopere con el ensamblado. Para atribuir este acceso ilimitado en un elemento, puede declararlo con
Public .
El acceso público es el nivel normal para un elemento de programación cuando no es necesario limitar el
acceso a él. Tenga en cuenta que el nivel de acceso de un elemento declarado en una interfaz, módulo,
clase o estructura tiene como valor predeterminado Public si no lo declara de otro modo.
Reglas
Contexto de declaración. Solo se puede usar Public en el nivel de módulo, interfaz o espacio de
nombres. Esto significa que el contexto de la declaración de un elemento Public debe ser un archivo
de código fuente, un espacio de nombres, una interfaz, un módulo, una clase o una estructura, y no
puede ser un procedimiento.
Comportamiento
Nivel de acceso. Todo el código que puede tener acceso a un módulo, clase o estructura puede
tener acceso a sus elementos Public .
Acceso predeterminado. Las variables locales dentro de un procedimiento tienen como valor
predeterminado el acceso público y no se pueden usar modificadores de acceso en ellas.
Modificadores de acceso. Las palabras clave que especifican el nivel de acceso se denominan
modificadores de acceso. Para obtener una comparación de los modificadores de acceso, vea
niveles de acceso en Visual Basic.
El modificador Public se puede utilizar en los contextos siguientes:
Class (instrucción)
Const (instrucción)
Declare (instrucción)
Delegate (instrucción)
Dim (instrucción)
Enum (instrucción)
Event (instrucción)
Function (instrucción)
Interface (instrucción)
Module (instrucción)
Operator Statement
Property (instrucción)
Structure (instrucción)
Sub (instrucción)
Vea también
Protected
Friend
Private
Private Protected
Protected Friend
Niveles de acceso en Visual Basic
Procedimientos
Estructuras
Objetos y clases
ReadOnly (Visual Basic)
27/11/2019 • 4 minutes to read • Edit Online
Especifica que una variable o una propiedad se puede leer pero no escribir.
Comentarios
Reglas
Contexto de declaración. Solo se puede usar ReadOnly en un nivel de módulo. Esto significa que el
contexto de la declaración de un elemento ReadOnly debe ser una clase, una estructura o un módulo, y
no puede ser un archivo de código fuente, un espacio de nombres o un procedimiento.
Modificadores combinados. No se puede especificar ReadOnly junto con Static en la misma
declaración.
Asignación de un valor. El código que consume una propiedad ReadOnly no puede establecer su
valor. Pero el código que tiene acceso al almacenamiento subyacente puede asignar o cambiar el valor
en cualquier momento.
Solo puede asignar un valor a una variable ReadOnly en su declaración o en el constructor de una clase
o estructura en la que se define.
IMPORTANT
Si el tipo de datos de la variable es un tipo de referencia, como una matriz o una instancia de clase, sus miembros se
pueden cambiar incluso si la propia variable es ReadOnly . En el ejemplo siguiente se ilustra esto.
Cuando se inicializa, la matriz a la que apunta characterArray() contiene "x", "y" y "z". Dado que la variable
characterArray es ReadOnly , no se puede cambiar su valor una vez inicializado. es decir, no se puede asignar
una nueva matriz a ella. Sin embargo, puede cambiar los valores de uno o varios de los miembros de la
matriz. Después de una llamada al procedimiento ChangeArrayElement , la matriz a la que apunta
characterArray() contiene "x", "M" y "z".
Tenga en cuenta que esto es similar a declarar un parámetro de procedimiento como ByVal, lo que evita que el
procedimiento cambie el argumento de llamada en sí, pero permite cambiar sus miembros.
Ejemplo
En el ejemplo siguiente se define una propiedad ReadOnly para la fecha en la que se contrató a un empleado.
La clase almacena el valor de propiedad internamente como una variable Private y solo el código dentro de
la clase puede cambiar ese valor. Sin embargo, la propiedad es Public y cualquier código que pueda tener
acceso a la clase puede leer la propiedad.
Class employee
' Only code inside class employee can change the value of hireDateValue.
Private hireDateValue As Date
' Any code that can access class employee can read property dateHired.
Public ReadOnly Property dateHired() As Date
Get
Return hireDateValue
End Get
End Property
End Class
Vea también
WriteOnly
Palabras clave
Shadows (Visual Basic)
27/11/2019 • 4 minutes to read • Edit Online
Especifica que un elemento de programación declarado vuelve a declarar y oculta un elemento con el mismo
nombre, o un conjunto de elementos sobrecargados, en una clase base.
Comentarios
El propósito principal de la sombra (que también se denomina ocultar por nombre) es conservar la
definición de los miembros de clase. La clase base puede someterse a un cambio que crea un elemento con
el mismo nombre que el que ya se ha definido. Si esto ocurre, el modificador Shadows fuerza las referencias
a través de la clase para que se resuelvan en el miembro definido, en lugar de en el nuevo elemento de clase
base.
Aunque tanto el sombreado como el reemplazo redefinen elementos heredados, existen diferencias
significativas entre ambos conceptos. Para obtener más información, vea sombrear en Visual Basic.
Reglas
Contexto de declaración. Solo se puede usar Shadows en el nivel de clase. Esto significa que el
contexto de la declaración de un elemento Shadows debe ser una clase y no puede ser un archivo de
código fuente, un espacio de nombres, una interfaz, un módulo, una estructura o un procedimiento.
Solo puede declarar un elemento de sombreado en una instrucción de declaración única.
Modificadores combinados. No se puede especificar Shadows junto con Overloads , Overrides o
Static en la misma declaración.
Tipos de elemento. Puede reemplazar cualquier tipo de elemento declarado con cualquier otro tipo.
Si sombrea una propiedad o un procedimiento con otra propiedad o procedimiento, los parámetros y
el tipo de valor devuelto no tienen que coincidir con los de la propiedad o el procedimiento de la clase
base.
Acceso a. Normalmente, el elemento sombreado de la clase base no está disponible en la clase
derivada que lo sombrea. Sin embargo, se aplican las consideraciones siguientes.
Si el elemento de sombreado no es accesible desde el código que hace referencia a él, la
referencia se resuelve en el elemento sombreado. Por ejemplo, si un elemento Private
sombrea un elemento de clase base, el código que no tiene permiso para obtener acceso al
elemento Private tiene acceso al elemento de clase base en su lugar.
Si sombrea un elemento, todavía puede tener acceso al elemento sombreado a través de un
objeto declarado con el tipo de la clase base. También puede tener acceso a ella a través de
MyBase .
Vea también
Shared
Static
Private
Me, My, MyBase y MyClass
Fundamentos de la herencia
MustOverride
NotOverridable
Sobrecargas
Overridable
Overrides
Sombrear en Visual Basic
Shared (Visual Basic)
27/11/2019 • 6 minutes to read • Edit Online
Especifica que uno o varios elementos de programación declarados están asociados a una clase o estructura
de gran tamaño, y no a una instancia específica de la clase o estructura.
Comentarios
Cuándo usar Shared
Compartir un miembro de una clase o estructura lo pone a disposición de todas las instancias, en lugar de
ser no compartidas, donde cada instancia conserva su propia copia. Esto resulta útil, por ejemplo, si el valor
de una variable se aplica a toda la aplicación. Si declara que la variable es Shared , todas las instancias
acceden a la misma ubicación de almacenamiento y, si una instancia cambia el valor de la variable, todas las
instancias acceden al valor actualizado.
El uso compartido no modifica el nivel de acceso de un miembro. Por ejemplo, un miembro de clase puede
ser compartido y privado (accesible solo desde dentro de la clase), o no compartido y público. Para obtener
más información, consulte niveles de acceso en Visual Basic.
Reglas
Contexto de declaración. Solo se puede usar Shared en un nivel de módulo. Esto significa que el
contexto de la declaración de un elemento Shared debe ser una clase o estructura, y no puede ser un
archivo de código fuente, un espacio de nombres o un procedimiento.
Modificadores combinados. No se puede especificar Shared junto con invalidaciones, Overridable,
NotOverridable, MustOverrideo static en la misma declaración.
Acceso a. Puede tener acceso a un elemento compartido si lo califica con su nombre de clase o
estructura, no con el nombre de variable de una instancia específica de su clase o estructura. No es
necesario crear una instancia de una clase o estructura para tener acceso a sus miembros
compartidos.
En el ejemplo siguiente se llama al procedimiento compartido IsNaN expuesto por la estructura
Double.
If Double.IsNaN(result) Then MsgBox("Result is mathematically undefined.")
Uso compar tido implícito. No se puede usar el modificador Shared en una instrucción const, pero
las constantes se comparten implícitamente. Del mismo modo, no puede declarar un miembro de un
módulo o una interfaz que se Shared , pero se comparten implícitamente.
Comportamiento
Discos. Una variable o evento compartido se almacena en la memoria solo una vez,
independientemente del número de instancias que cree de su clase o estructura. De forma similar, un
procedimiento compartido o una propiedad solo contiene un conjunto de variables locales.
Obtener acceso a través de una variable de instancia. Es posible obtener acceso a un elemento
compartido si se califica con el nombre de una variable que contiene una instancia específica de su
clase o estructura. Aunque esto suele funcionar según lo esperado, el compilador genera un mensaje
de advertencia y hace que el acceso se realice a través del nombre de la clase o la estructura en lugar
de la variable.
Obtener acceso a través de una expresión de instancia. Si obtiene acceso a un elemento
compartido a través de una expresión que devuelve una instancia de su clase o estructura, el
compilador realiza el acceso a través del nombre de la clase o la estructura en lugar de evaluar la
expresión. Esto produce resultados inesperados si desea que la expresión realice otras acciones, así
como para devolver la instancia. En el ejemplo siguiente se ilustra esto.
Sub main()
shareTotal.total = 10
' The preceding line is the preferred way to access total.
Dim instanceVar As New shareTotal
instanceVar.total += 100
' The preceding line generates a compiler warning message and
' accesses total through class shareTotal instead of through
' the variable instanceVar. This works as expected and adds
' 100 to total.
returnClass().total += 1000
' The preceding line generates a compiler warning message and
' accesses total through class shareTotal instead of calling
' returnClass(). This adds 1000 to total but does not work as
' expected, because the MsgBox in returnClass() does not run.
MsgBox("Value of total is " & CStr(shareTotal.total))
End Sub
Public Function returnClass() As shareTotal
MsgBox("Function returnClass() called")
Return New shareTotal
End Function
Public Class shareTotal
Public Shared total As Integer
End Class
En el ejemplo anterior, el compilador genera un mensaje de advertencia ambas veces el código tiene
acceso a la variable compartida total a través de una instancia de. En cada caso, realiza el acceso
directamente a través de la clase shareTotal y no hace uso de ninguna instancia. En el caso de la
llamada prevista al procedimiento returnClass , esto significa que no genera ni siquiera una llamada
a returnClass , por lo que no se realiza la acción adicional de mostrar "función returnClass ()
llamada".
El modificador Shared se puede utilizar en los contextos siguientes:
Dim (instrucción)
Event (instrucción)
Function (instrucción)
Operator Statement
Property (instrucción)
Sub (instrucción)
Vea también
Shadows
Static
Duración en Visual Basic
Procedimientos
Estructuras
Objetos y clases
Static (Visual Basic)
27/11/2019 • 3 minutes to read • Edit Online
Especifica que una o varias variables locales declaradas deben seguir existiendo y conservar sus valores más
recientes después de la finalización del procedimiento en el que se declaran.
Comentarios
Normalmente, una variable local de un procedimiento deja de existir en cuanto se detiene el procedimiento. Una
variable estática sigue existiendo y conserva su valor más reciente. La próxima vez que el código llame al
procedimiento, no se reinicializará la variable y se conservará el valor más reciente que le haya asignado. Una
variable estática sigue existiendo mientras dure la clase o el módulo en el que se define.
Reglas
Contexto de declaración. Solo puede usar Static en variables locales. Esto significa que el contexto de
la declaración de una variable Static debe ser un procedimiento o un bloque en un procedimiento, y no
puede ser un archivo de código fuente, un espacio de nombres, una clase, una estructura o un módulo.
No se puede usar Static dentro de un procedimiento de estructura.
No se pueden inferir los tipos de datos de Static variables locales. Para obtener más información, vea
inferencia de tipo local.
Modificadores combinados. No se puede especificar Static junto con ReadOnly , Shadows o Shared
en la misma declaración.
Comportamiento
Cuando se declara una variable estática en un procedimiento Shared , solo hay una copia de la variable estática
disponible para toda la aplicación. Se llama a un procedimiento de Shared mediante el nombre de clase, no una
variable que apunta a una instancia de la clase.
Cuando se declara una variable estática en un procedimiento que no está Shared , solo hay una copia de la
variable disponible para cada instancia de la clase. Se llama a un procedimiento no compartido mediante una
variable que apunta a una instancia específica de la clase.
Ejemplo
El siguiente ejemplo muestra el uso de Static .
La variable de Static totalSales se inicializa en 0 solo una vez. Cada vez que escriba updateSales , totalSales
seguirá teniendo el valor más reciente que calculó para él.
El modificador Static se puede usar en este contexto:
Dim (instrucción)
Vea también
Shadows
Shared
Duración en Visual Basic
Declaración de variables
Estructuras
Inferencia de tipo de variable local
Objetos y clases
Unicode (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Especifica que Visual Basic debe serializar todas las cadenas en valores Unicode, independientemente del nombre
del procedimiento externo que se está declarando.
Cuando se llama a un procedimiento definido fuera del proyecto, el compilador Visual Basic no tiene acceso a la
información que debe tener para poder llamar al procedimiento correctamente. Esta información incluye dónde
se encuentra el procedimiento, cómo se identifica, su secuencia de llamada y tipo de valor devuelto, y el juego de
caracteres de cadena que usa. La instrucción Declare crea una referencia a un procedimiento externo y
proporciona esta información necesaria.
La parte charsetmodifier de la instrucción Declare proporciona la información del juego de caracteres para
calcular las referencias de las cadenas durante una llamada al procedimiento externo. También afecta al modo en
que Visual Basic busca el nombre del procedimiento externo en el archivo externo. El modificador Unicode
especifica que Visual Basic debe serializar todas las cadenas en valores Unicode y debe buscar el procedimiento
sin modificar su nombre durante la búsqueda.
Si no se especifica ningún modificador de juego de caracteres, Ansi es el valor predeterminado.
Comentarios
El modificador Unicode se puede usar en este contexto:
Declare (instrucción)
Vea también
Ansi
Auto
Palabras clave
Widening (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Indica que un operador de conversión ( CType ) convierte una clase o estructura en un tipo que puede contener
todos los valores posibles de la clase o estructura original.
Vea también
Operator Statement
Narrowing
Conversiones de ampliación y de restricción
Definir un operador
Función CType
Option Strict (instrucción)
Definir un operador de conversión
WithEvents (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Especifica que una o varias variables de miembro declaradas hacen referencia a una instancia de una clase que
puede generar eventos.
Comentarios
Cuando una variable se define utilizando WithEvents , puede especificar mediante declaración que un método
controla los eventos de la variable mediante la palabra clave Handles .
Solo se puede usar WithEvents en el nivel de clase o módulo. Esto significa que el contexto de la declaración de
una variable WithEvents debe ser una clase o módulo y no puede ser un archivo de código fuente, un espacio de
nombres, una estructura o un procedimiento.
No se puede usar WithEvents en un miembro de estructura.
Solo se pueden declarar variables individuales, no matrices, con WithEvents .
Reglas
Tipos de elemento. Debe declarar WithEvents variables como variables de objeto para que puedan aceptar
instancias de clase. Sin embargo, no puede declararlos como Object . Debe declararlos como la clase específica
que puede provocar los eventos.
El modificador WithEvents se puede usar en este contexto: instrucción Dim
Ejemplo
Dim WithEvents app As Application
Vea también
Handles
Palabras clave
Eventos
WriteOnly (Visual Basic)
27/11/2019 • 3 minutes to read • Edit Online
Comentarios
Reglas
Contexto de declaración. Solo se puede usar WriteOnly en un nivel de módulo. Esto significa que el contexto
de la declaración de una propiedad WriteOnly debe ser una clase, una estructura o un módulo, y no puede ser un
archivo de código fuente, un espacio de nombres o un procedimiento.
Puede declarar una propiedad como WriteOnly , pero no una variable.
IMPORTANT
Al definir y usar una propiedad WriteOnly , tenga en cuenta las siguientes medidas de protección adicionales:
Invalidar. Si la propiedad es un miembro de una clase, permita que el valor predeterminado sea
NotOverridabley no lo declare Overridable o MustOverride . Esto evita que una clase derivada realice un
acceso no deseado a través de una invalidación.
Nivel de acceso. Si contiene los datos confidenciales de la propiedad en una o varias variables, declárelo
para que ningún otro código pueda acceder a ellos.
Cifra. Almacene todos los datos confidenciales en formato cifrado en lugar de en texto sin formato. Si el
código malintencionado obtiene acceso de algún modo a esa área de memoria, es más difícil hacer uso de
los datos. El cifrado también es útil si es necesario serializar la información confidencial.
Restablecer. Cuando se termine la clase, estructura o módulo que define la propiedad, restablezca los
datos confidenciales a los valores predeterminados o a otros valores sin sentido. Esto proporciona
protección adicional cuando se libera ese área de memoria para el acceso general.
Persistence. No conserve los datos confidenciales, por ejemplo, en el disco, si puede evitarlo. Además, no
escriba datos confidenciales en el portapapeles.
El modificador WriteOnly se puede usar en este contexto:
Property (instrucción)
Vea también
ReadOnly
Private
Palabras clave
Módulos (Visual Basic)
05/12/2019 • 2 minutes to read • Edit Online
Visual Basic proporciona varios módulos que permiten simplificar las tareas comunes del código, como manipular
cadenas, realizar cálculos matemáticos, obtener información del sistema, realizar operaciones de archivos y
directorios, etc. En la tabla siguiente se enumeran los módulos proporcionados por Visual Basic.
Vea también
Referencia del lenguaje Visual Basic
Palabra clave Nothing (Visual Basic)
27/11/2019 • 7 minutes to read • Edit Online
Representa el valor predeterminado de cualquier tipo de datos. En el caso de los tipos de referencia, el valor
predeterminado es la referencia null . En el caso de los tipos de valor, el valor predeterminado depende de
si el tipo de valor admite valores NULL.
NOTE
En el caso de los tipos de valor que no aceptan valores NULL, Nothing en C#Visual Basic difiere de null en. En
Visual Basic, si establece una variable de un tipo de valor que no acepta valores NULL en Nothing , la variable se
establece en el valor predeterminado para su tipo declarado. En C#, si asigna una variable de un tipo de valor que no
acepta valores null a null , se producirá un error en tiempo de compilación.
Comentarios
Nothing representa el valor predeterminado de un tipo de datos. El valor predeterminado depende de si la
variable es de un tipo de valor o de un tipo de referencia.
Una variable de un tipo de valor contiene directamente su valor. Entre los tipos de valor se incluyen todos los
tipos de datos numéricos, Boolean , Char , Date , todas las estructuras y todas las enumeraciones. Una
variable de un tipo de referencia almacena una referencia a una instancia del objeto en memoria. Los tipos
de referencia incluyen clases, matrices, delegados y cadenas. Para obtener más información, consulta Value
Types and Reference Types.
Si una variable es de un tipo de valor, el comportamiento de Nothing depende de si la variable es de un tipo
de datos que acepta valores NULL. Para representar un tipo de valor que acepta valores NULL, agregue un
modificador ? al nombre de tipo. La asignación de Nothing a una variable que acepta valores NULL
establece el valor en null . Para obtener más información y ejemplos, vea tipos de valor que aceptan
valores NULL.
Si una variable es de un tipo de valor que no acepta valores NULL, si se asigna Nothing , se establece en el
valor predeterminado para su tipo declarado. Si ese tipo contiene miembros de variable, todos ellos se
establecen en sus valores predeterminados. En el ejemplo siguiente se muestra esto para los tipos escalares.
Module Module1
Sub Main()
Dim ts As TestStruct
Dim i As Integer
Dim b As Boolean
Console.WriteLine($"ts.Name: {ts.Name}")
Console.WriteLine($"ts.Number: {ts.Number}")
Console.WriteLine($"i: {i}")
Console.WriteLine($"b: {b}")
Console.ReadKey()
End Sub
Module Module1
Sub Main()
End Sub
Class TestClass
Public Field1 As Integer
' . . .
End Class
End Module
Al comprobar si una variable de referencia (o tipo de valor que acepta valores NULL) está null , no use
= Nothing ni <> Nothing . Utilice siempre Is Nothing o IsNot Nothing .
En el caso de las cadenas de Visual Basic, la cadena vacía es igual a Nothing . Por lo tanto, "" = Nothing es
true.
En el ejemplo siguiente se muestran comparaciones que usan los operadores Is y IsNot :
Module Module1
Sub Main()
n = 4
Console.WriteLine(n Is Nothing)
' Output: False
n = Nothing
Console.WriteLine(n IsNot Nothing)
' Output: False
Console.ReadKey()
End Sub
Class TestClass
Public Field1 As Integer
Private field2 As Boolean
End Class
End Module
Si declara una variable sin usar una cláusula As y la establece en Nothing , la variable tiene un tipo de
Object . Un ejemplo de esto es Dim something = Nothing . En este caso, se produce un error en tiempo de
compilación cuando Option Strict está activada y Option Infer está desactivada.
Cuando asigna Nothing a una variable de objeto, ya no hace referencia a ninguna instancia de objeto. Si la
variable anteriormente hacía referencia a una instancia, si se establece en Nothing no finaliza la propia
instancia. La instancia se termina y se liberan los recursos de memoria y del sistema asociados a ella, solo
después de que el recolector de elementos no utilizados (GC) detecte que no quedan referencias activas.
Nothing difiere del objeto DBNull, que representa una variante no inicializada o una columna de base de
datos inexistente.
Vea también
Dim (instrucción)
Duración de los objetos: cómo se crean y destruyen
Duración en Visual Basic
Is (operador)
IsNot (operador)
Tipos de valor que aceptan valores NULL
Objetos (Visual Basic)
05/12/2019 • 5 minutes to read • Edit Online
En este tema se proporcionan vínculos a otros temas en los que se describen los objetos en tiempo de ejecución
de Visual Basic y contienen tablas con sus procedimientos de miembro, propiedades y eventos.
El objeto My.Application consta de las clases siguientes: Proporciona datos asociados únicamente con la aplicación
actual o el archivo DLL. No se puede modificar la información
ApplicationBase proporciona miembros que están disponibles de nivel de sistema mediante My.Application .
en todos los proyectos.
Algunos miembros solo están disponibles para aplicaciones de
WindowsFormsApplicationBase proporciona miembros consola o de Windows Forms.
disponibles en aplicaciones de Windows Forms.
Vea también
Referencia del lenguaje Visual Basic
My.Application (Objeto)
27/11/2019 • 2 minutes to read • Edit Online
Comentarios
Para obtener información sobre los métodos y las propiedades del objeto My.Application , vea los siguientes
recursos:
ApplicationBase para los miembros que están disponibles en todos los proyectos.
WindowsFormsApplicationBase para los miembros que están disponibles en las aplicaciones de Windows
Forms.
ConsoleApplicationBase para los miembros que están disponibles en las aplicaciones de consola.
Requisitos
Espacio de nombres: Microsoft.VisualBasic.ApplicationServices
Clase: WindowsFormsApplicationBase (la clase base ConsoleApplicationBase proporciona miembros disponibles
en las aplicaciones de consola y su clase base ApplicationBase proporciona los miembros que están disponibles en
todos los proyectos).
Ensamblado: Biblioteca en tiempo de ejecución de Visual Basic (en Microsoft. VisualBasic. dll)
Vea también
My.Application.Info (objeto)
My.Application.Log (objeto)
My.Application.Info (Objeto)
27/11/2019 • 2 minutes to read • Edit Online
Proporciona propiedades para obtener información sobre la aplicación, como el número de versión, la descripción,
los ensamblados cargados, etc.
Comentarios
Para obtener información acerca de los métodos y las propiedades del objeto My.Application.Info , vea
AssemblyInfo.
NOTE
Puede utilizar las propiedades de la clase System.Diagnostics.FileVersionInfo para obtener información acerca de un archivo
en disco.
Requisitos
Espacio de nombres: Microsoft.VisualBasic.ApplicationServices
Clase: AssemblyInfo
Ensamblado: Biblioteca en tiempo de ejecución de Visual Basic (en Microsoft. VisualBasic. dll)
Vea también
My.Application (objeto)
My.Application.Log (objeto)
27/11/2019 • 2 minutes to read • Edit Online
Proporciona una propiedad y métodos para escribir información de eventos y excepciones en los agentes de
escucha de registro de la aplicación.
Comentarios
Para obtener información acerca de los métodos y las propiedades del objeto My.Application.Log , vea Log.
Para obtener más información, consulte registrar información desde la aplicación.
NOTE
También puede usar clases de .NET Framework para registrar información desde la aplicación. Para obtener más información,
consulta Tracing and Instrumenting Applications.
Requisitos
Espacio de nombres: Microsoft.VisualBasic.Logging
Clase: Log
Ensamblado: Biblioteca en tiempo de ejecución de Visual Basic (en Microsoft. VisualBasic. dll)
Vea también
My.Application (objeto)
My.Computer (Objeto)
27/11/2019 • 2 minutes to read • Edit Online
Proporciona propiedades para manipular componentes del equipo, como el audio, el reloj, el teclado, el sistema
de archivos, etc.
Comentarios
Para obtener información acerca de los métodos y las propiedades del objeto My.Computer , vea Computer. La
clase base ServerComputer proporciona los miembros que están disponibles en todos los proyectos.
Requisitos
Espacio de nombres: Microsoft.VisualBasic.Devices
Clase: Computer (la clase base ServerComputer proporciona los miembros que están disponibles en todos los
proyectos).
Ensamblado: Biblioteca en tiempo de ejecución de Visual Basic (en Microsoft. VisualBasic. dll)
Vea también
My.Computer.Audio (objeto)
My.Computer.Clipboard (objeto)
My.Computer.Clock (objeto)
My.Computer.FileSystem (objeto)
My.Computer.FileSystem.SpecialDirectories (objeto)
My.Computer.Info (objeto)
My.Computer.Keyboard (objeto)
My.Computer.Mouse (objeto)
My.Computer.Network (objeto)
My.Computer.Ports (objeto)
My.Computer.Registry (objeto)
My.Computer.Audio (Objeto)
27/11/2019 • 2 minutes to read • Edit Online
Comentarios
Para obtener información acerca de los métodos y las propiedades del objeto My.Computer.Audio , vea Audio.
Para obtener más información, vea reproducir sonidos.
Requisitos
Espacio de nombres: Microsoft.VisualBasic.Devices
Clase: Audio
Ensamblado: Biblioteca en tiempo de ejecución de Visual Basic (en Microsoft. VisualBasic. dll)
Vea también
My.Computer (objeto)
My.Computer.Clipboard (Objeto)
27/11/2019 • 2 minutes to read • Edit Online
Comentarios
Para obtener información acerca de los métodos y las propiedades del objeto My.Computer.Clipboard , vea
ClipboardProxy.
Para obtener más información, vea almacenar y leer datos en el portapapeles.
NOTE
También puede usar métodos de la clase System.Windows.Forms.Clipboard para manipular el portapapeles.
Requisitos
Espacio de nombres: Microsoft.VisualBasic.MyServices
Clase: ClipboardProxy (proporciona acceso a Clipboard)
Ensamblado: Biblioteca en tiempo de ejecución de Visual Basic (en Microsoft. VisualBasic. dll)
Vea también
Clipboard
My.Computer (objeto)
My.Computer.Clock (Objeto)
27/11/2019 • 2 minutes to read • Edit Online
Proporciona propiedades para obtener acceso a la hora local actual y al Horario universal coordinado (equivalente
a la Hora del meridiano de Greenwich) desde el reloj del sistema.
Comentarios
Para obtener información acerca de los métodos y las propiedades del objeto My.Computer.Clock , vea Clock.
Requisitos
Espacio de nombres: Microsoft.VisualBasic.Devices
Clase: Clock
Ensamblado: Biblioteca en tiempo de ejecución de Visual Basic (en Microsoft. VisualBasic. dll)
Vea también
My.Computer (objeto)
My.Computer.FileSystem (Objeto)
27/11/2019 • 2 minutes to read • Edit Online
Comentarios
Para obtener información acerca de los métodos y las propiedades del objeto My.Computer.FileSystem , vea
FileSystem.
Para obtener más información, vea acceso a archivos con Visual Basic.
NOTE
También puede utilizar las clases del espacio de nombres System.IO para trabajar con unidades, archivos y directorios.
Requisitos
Espacio de nombres: Microsoft.VisualBasic.MyServices
Clase: FileSystemProxy (proporciona acceso a FileSystem)
Ensamblado: Biblioteca en tiempo de ejecución de Visual Basic (en Microsoft. VisualBasic. dll)
Vea también
My.Computer.FileSystem.SpecialDirectories (objeto)
My.Computer (objeto)
My.Computer.FileSystem.SpecialDirectories (Objeto)
27/11/2019 • 2 minutes to read • Edit Online
Proporciona propiedades para obtener acceso a directorios a los que suele hacerse referencia.
Comentarios
Para obtener información acerca de los métodos y las propiedades del objeto
My.Computer.FileSystem.SpecialDirectories , vea SpecialDirectories.
Para obtener más información, consulte Cómo: recuperar el contenido del directorio mis documentos.
Requisitos
Espacio de nombres: Microsoft.VisualBasic.MyServices
Clase: SpecialDirectoriesProxy (proporciona acceso a SpecialDirectories)
Ensamblado: Biblioteca en tiempo de ejecución de Visual Basic (en Microsoft. VisualBasic. dll)
Vea también
My.Computer.FileSystem (objeto)
My.Computer (objeto)
My.Computer.Info (Objeto)
27/11/2019 • 2 minutes to read • Edit Online
Proporciona propiedades para obtener información sobre la memoria, los ensamblados cargados, el nombre y el
sistema operativo del equipo.
Comentarios
Para obtener información sobre las propiedades del objeto My.Computer.Info , vea ComputerInfo.
Requisitos
Espacio de nombres: Microsoft.VisualBasic.Devices
Clase: ComputerInfo
Ensamblado: Biblioteca en tiempo de ejecución de Visual Basic (en Microsoft. VisualBasic. dll)
Vea también
My.Computer (objeto)
My.Computer.Keyboard (Objeto)
27/11/2019 • 2 minutes to read • Edit Online
Proporciona propiedades para obtener acceso al estado actual del teclado, como las teclas que se han presionado,
y proporciona un método para enviar pulsaciones de teclas a la ventana activa.
Comentarios
Para obtener información acerca de los métodos y las propiedades del objeto My.Computer.Keyword , vea Keyboard.
Para más información, consulte Acceso al teclado.
Requisitos
Espacio de nombres: Microsoft.VisualBasic.Devices
Clase: Keyboard
Ensamblado: Biblioteca en tiempo de ejecución de Visual Basic (en Microsoft. VisualBasic. dll)
Vea también
My.Computer (objeto)
My.Computer.Mouse (Objeto)
27/11/2019 • 2 minutes to read • Edit Online
Proporciona propiedades para obtener información sobre el formato y la configuración del mouse instalado en el
equipo local.
Comentarios
Para obtener información acerca de los métodos y las propiedades del objeto My.Computer.Mouse , vea Mouse.
Para obtener más información, vea acceso al mouse.
Requisitos
Espacio de nombres: Microsoft.VisualBasic.Devices
Clase: Mouse
Ensamblado: Biblioteca en tiempo de ejecución de Visual Basic (en Microsoft. VisualBasic. dll)
Vea también
My.Computer (objeto)
My.Computer.Network (Objeto)
27/11/2019 • 2 minutes to read • Edit Online
Proporciona una propiedad, un evento y métodos para interactuar con la red a la que está conectado el equipo.
Comentarios
Para obtener información acerca de los métodos y las propiedades del objeto My.Computer.Network , vea Network.
Para obtener más información, vea realizar operaciones de red.
Requisitos
Espacio de nombres: Microsoft.VisualBasic.Devices
Clase: Network
Ensamblado: Biblioteca en tiempo de ejecución de Visual Basic (en Microsoft. VisualBasic. dll)
Vea también
My.Computer (objeto)
My.Computer.Ports (Objeto)
27/11/2019 • 2 minutes to read • Edit Online
Proporciona una propiedad y un método para obtener acceso a los puertos serie del equipo.
Comentarios
Para obtener información acerca de los métodos y las propiedades del objeto My.Computer.Ports , vea Ports.
Para obtener más información, consulte acceso a los puertos del equipo.
NOTE
También puede utilizar las propiedades y los métodos de la clase System.IO.Ports.SerialPort para tener acceso a los puertos
serie del equipo.
Requisitos
Espacio de nombres: Microsoft.VisualBasic.Devices
Clase: Ports
Ensamblado: Biblioteca en tiempo de ejecución de Visual Basic (en Microsoft. VisualBasic. dll)
Vea también
My.Computer (objeto)
My.Computer.Registry (Objeto)
27/11/2019 • 2 minutes to read • Edit Online
Comentarios
Para obtener información acerca de los métodos y las propiedades del objeto My.Computer.Registry , vea
RegistryProxy.
Para obtener más información, vea leer y escribir en el registro.
NOTE
También puede manipular el registro mediante métodos de la clase Microsoft.Win32.Registry.
Requisitos
Espacio de nombres: Microsoft.VisualBasic.MyServices
Clase: RegistryProxy (proporciona acceso a Registry)
Ensamblado: Biblioteca en tiempo de ejecución de Visual Basic (en Microsoft. VisualBasic. dll)
Vea también
My.Computer (objeto)
My.Forms (Objeto)
27/11/2019 • 5 minutes to read • Edit Online
Proporciona propiedades para obtener acceso a una instancia de cada Windows Forms declarado en el proyecto
actual.
Comentarios
El objeto My.Forms proporciona una instancia de cada formulario en el proyecto actual. El nombre de la
propiedad es el mismo que el nombre del formulario al que tiene acceso la propiedad.
Puede tener acceso a los formularios proporcionados por el objeto My.Forms utilizando el nombre del
formulario, sin calificación. Dado que el nombre de la propiedad es el mismo que el nombre de tipo del
formulario, esto le permite tener acceso a un formulario como si tuviera una instancia predeterminada. Por
ejemplo, My.Forms.Form1.Show es equivalente a Form1.Show .
El objeto My.Forms expone solo los formularios asociados al proyecto actual. No proporciona acceso a los
formularios declarados en los archivos DLL a los que se hace referencia. Para tener acceso a un formulario que
proporciona un archivo DLL, debe usar el nombre completo del formulario, escrito como DllName.
Nombreformulario.
Puede usar la propiedad OpenForms para obtener una colección de todos los formularios abiertos de la
aplicación.
El objeto y sus propiedades solo están disponibles para las aplicaciones de Windows.
Propiedades
Cada propiedad del objeto My.Forms proporciona acceso a una instancia de un formulario en el proyecto actual.
El nombre de la propiedad es el mismo que el nombre del formulario al que tiene acceso la propiedad y el tipo
de propiedad es el mismo que el tipo del formulario.
NOTE
Si hay un conflicto de nombres, el nombre de la propiedad para tener acceso a un formulario es
RootNamespacenamespace_formName. Por ejemplo, considere dos formularios denominados Form1. si uno de estos
formularios está en el espacio de nombres raíz WindowsApplication1 y en el espacio de nombres Namespace1 , tendría
acceso a ese formulario a través de My.Forms.WindowsApplication1_Namespace1_Form1 .
El objeto My.Forms proporciona acceso a la instancia del formulario principal de la aplicación que se creó en el
inicio. En el caso de todos los demás formularios, el objeto My.Forms crea una instancia nueva del formulario
cuando se tiene acceso a ella y la almacena. Los intentos posteriores de obtener acceso a esa propiedad
devuelven esa instancia del formulario.
Puede desechar un formulario asignando Nothing a la propiedad de ese formulario. El establecedor de
propiedad llama al método Close del formulario y, a continuación, asigna Nothing al valor almacenado. Si
asigna un valor distinto de Nothing a la propiedad, el establecedor produce una excepción de
ArgumentException.
Puede comprobar si una propiedad del objeto My.Forms almacena una instancia del formulario mediante el
operador Is o IsNot . Puede utilizar esos operadores para comprobar si el valor de la propiedad es Nothing .
NOTE
Normalmente, el operador Is o IsNot tiene que leer el valor de la propiedad para realizar la comparación. Sin
embargo, si la propiedad almacena actualmente Nothing , la propiedad crea una nueva instancia del formulario y, a
continuación, devuelve esa instancia. Sin embargo, el compilador Visual Basic trata las propiedades del objeto My.Forms
de forma diferente y permite que el operador Is o IsNot Compruebe el estado de la propiedad sin modificar su valor.
Ejemplo
En este ejemplo se cambia el título del formulario SidebarMenu predeterminado.
Para que este ejemplo funcione, el proyecto debe tener un formulario denominado SidebarMenu .
Este código solo funcionará en un proyecto de aplicación de Windows.
Requisitos
Disponibilidad por tipo de proyecto
T IP O DE P RO Y EC TO DISP O N IB L E
Aplicación de Windows Sí
Biblioteca de clases No
Aplicación de consola No
Servicio de Windows No
Sitio web No
Vea también
OpenForms
Form
Close
Objects
Is (operador)
IsNot (operador)
Acceso ad los formularios de la aplicación
My.Log (Objeto)
27/11/2019 • 2 minutes to read • Edit Online
Proporciona una propiedad y métodos para escribir información de eventos y excepciones en los agentes de
escucha de registro de la aplicación.
Comentarios
Para obtener información acerca de los métodos y las propiedades del objeto My.Log , vea AspLog.
El objeto My.Log solo está disponible para las aplicaciones de ASP.NET. En el caso de las aplicaciones cliente, use el
objeto My. Application. log.
Requisitos
Espacio de nombres: Microsoft.VisualBasic.Logging
Clase: AspLog
Ensamblado: Biblioteca en tiempo de ejecución de Visual Basic (en Microsoft. VisualBasic. dll)
My.Request (Objeto)
27/11/2019 • 2 minutes to read • Edit Online
Comentarios
Objeto My.Request que contiene información sobre la solicitud HTTP actual.
El objeto My.Request solo está disponible para las aplicaciones ASP.NET.
Ejemplo
En el ejemplo siguiente se obtiene la colección de encabezados del objeto My.Request y se usa el objeto
My.Response para escribirlo en la página ASP.NET.
<script runat="server">
Public Sub ShowHeaders()
' Load the header collection from the Request object.
Dim coll As System.Collections.Specialized.NameValueCollection
coll = My.Request.Headers
Vea también
HttpRequest
My.Response (objeto)
My.Response (Objeto)
27/11/2019 • 2 minutes to read • Edit Online
Obtiene el objeto de HttpResponse asociado al Page. Este objeto permite enviar datos de respuesta HTTP a un
cliente y contiene información sobre esa respuesta.
Comentarios
El objeto My.Response contiene el objeto HttpResponse actual asociado a la página.
El objeto My.Response solo está disponible para las aplicaciones ASP.NET.
Ejemplo
En el ejemplo siguiente se obtiene la colección de encabezados del objeto My.Request y se usa el objeto
My.Response para escribirlo en la página ASP.NET.
<script runat="server">
Public Sub ShowHeaders()
' Load the header collection from the Request object.
Dim coll As System.Collections.Specialized.NameValueCollection
coll = My.Request.Headers
Vea también
HttpResponse
My.Request (objeto)
My.Resources (Objeto)
27/11/2019 • 6 minutes to read • Edit Online
Comentarios
El objeto My.Resources proporciona acceso a los recursos de la aplicación y permite recuperar dinámicamente los
recursos de la aplicación. Para obtener más información, vea administrar recursos de aplicación (.net).
El objeto My.Resources expone solo recursos globales. No proporciona acceso a los archivos de recursos
asociados a los formularios. Debe tener acceso a los recursos de formulario desde el formulario.
Puede tener acceso a los archivos de recursos específicos de la referencia cultural de la aplicación desde el objeto
My.Resources . De forma predeterminada, el objeto My.Resources busca recursos del archivo de recursos que
coincida con la referencia cultural de la propiedad UICulture. Sin embargo, puede invalidar este comportamiento y
especificar una referencia cultural determinada que se usará para los recursos. Para obtener más información, vea
Resources in Desktop Apps (Recursos de aplicaciones de escritorio).
Propiedades
Las propiedades del objeto My.Resources proporcionan acceso de solo lectura a los recursos de la aplicación. Para
agregar o quitar recursos, use el Diseñador de proyectos . Puede tener acceso a los recursos agregados a través
del Diseñador de proyectos mediante My.Resources. resourceName.
También puede Agregar o quitar archivos de recursos seleccionando el proyecto en Explorador de soluciones y
haciendo clic en Agregar nuevo elemento o Agregar elemento existente en el menú proyecto . Puede
tener acceso a los recursos agregados de esta manera mediante My.Resources. nombrearchivorecursos .
resourceName.
Cada recurso tiene un nombre, una categoría y un valor, y esta configuración de recursos determina el modo en
que la propiedad para tener acceso al recurso aparece en el objeto de My.Resources . Para los recursos agregados
en el Diseñador de proyectos :
El nombre determina el nombre de la propiedad.
Los datos del recurso son el valor de la propiedad.
La categoría determina el tipo de la propiedad:
Cadenas String
Imágenes Bitmap
Iconos Icon
C AT EGO RÍA T IP O DE DATO S DE P RO P IEDA D
Audio UnmanagedMemoryStream
Clases
El objeto My.Resources expone cada archivo de recursos como una clase con propiedades compartidas. El nombre
de clase es el mismo que el nombre del archivo de recursos. Como se describe en la sección anterior, los recursos
de un archivo de recursos se exponen como propiedades en la clase.
Ejemplo
En este ejemplo se establece el título de un formulario en el recurso de cadena denominado Form1Title en el
archivo de recursos de la aplicación. Para que el ejemplo funcione, la aplicación debe tener una cadena
denominada Form1Title en su archivo de recursos.
Sub SetFormTitle()
Me.Text = My.Resources.Form1Title
End Sub
Ejemplo
En este ejemplo se establece el icono del formulario en el icono denominado Form1Icon que se almacena en el
archivo de recursos de la aplicación. Para que el ejemplo funcione, la aplicación debe tener un icono denominado
Form1Icon en su archivo de recursos.
Sub SetFormIcon()
Me.Icon = My.Resources.Form1Icon
End Sub
Ejemplo
En este ejemplo se establece la imagen de fondo de un formulario en el recurso de imagen denominado
Form1Background , que se encuentra en el archivo de recursos de la aplicación. Para que este ejemplo funcione, la
aplicación debe tener un recurso de imagen denominado Form1Background en su archivo de recursos.
Sub SetFormBackgroundImage()
Me.BackgroundImage = My.Resources.Form1Background
End Sub
Ejemplo
En este ejemplo se reproduce el sonido que se almacena como un recurso de audio denominado Form1Greeting
en el archivo de recursos de la aplicación. Para que el ejemplo funcione, la aplicación debe tener un recurso de
audio denominado Form1Greeting en su archivo de recursos. El método My.Computer.Audio.Play solo está
disponible para aplicaciones de Windows Forms.
Sub PlayFormGreeting()
My.Computer.Audio.Play(My.Resources.Form1Greeting,
AudioPlayMode.Background)
End Sub
Ejemplo
En este ejemplo se recupera la versión de la referencia cultural francesa de un recurso de cadena de la aplicación.
El recurso se denomina Message . Para cambiar la referencia cultural que utiliza el objeto de My.Resources , en el
ejemplo se usa ChangeUICulture.
Para que este ejemplo funcione, la aplicación debe tener una cadena denominada Message en su archivo de
recursos y la aplicación debe tener la versión de referencia cultural en francés de ese archivo de recursos,
Resources.fr-FR. resx. Si la aplicación no tiene la versión de referencia cultural en francés del archivo de recursos,
el objeto My.Resource recupera el recurso del archivo de recursos de referencia cultural predeterminada.
Sub ShowLocalizedMessage()
Dim culture As String = My.Application.UICulture.Name
My.Application.ChangeUICulture("fr-FR")
MsgBox(My.Resources.Message)
My.Application.ChangeUICulture(culture)
End Sub
Vea también
Administrar los recursos de la aplicación (.NET)
Recursos de aplicaciones de escritorio
My.Settings (Objeto)
27/11/2019 • 3 minutes to read • Edit Online
Comentarios
El objeto My.Settings proporciona acceso a la configuración de la aplicación y permite almacenar y recuperar
dinámicamente la configuración de propiedades y otra información de la aplicación. Para obtener más
información, vea Administrar la configuración de la aplicación (.NET).
Propiedades
Las propiedades del objeto My.Settings proporcionan acceso a la configuración de la aplicación. Para agregar o
quitar la configuración, use el Diseñador de configuración .
Cada configuración tiene un nombre , tipo , ámbito y valor , y esta configuración determina cómo aparece la
propiedad para tener acceso a cada configuración en el My.Settings objeto:
Nombre determina el nombre de la propiedad.
Tipo determina el tipo de la propiedad.
El ámbito indica si la propiedad es de solo lectura. Si el valor es Application , la propiedad es de solo
lectura; Si el valor es User , la propiedad es de lectura y escritura.
Value es el valor predeterminado de la propiedad.
Métodos
M ÉTO DO DESC RIP C IÓ N
Tareas
En la tabla siguiente se muestran ejemplos de tareas que implican el My.Settings objeto.
PA RA C O N SULT E
Leer una configuración de la aplicación Cómo: Leer la configuración de la aplicación en Visual Basic
Cambiar la configuración de un usuario Cómo: Cambiar la configuración del usuario en Visual Basic
Conservar la configuración de usuario Cómo: Conservar la configuración del usuario en Visual Basic
PA RA C O N SULT E
Crear una cuadrícula de propiedades para la configuración del Cómo: Crear cuadrículas de propiedades para la configuración
usuario del usuario en Visual Basic
Ejemplo
En este ejemplo se muestra el valor de la configuración Nickname .
Sub ShowNickname()
MsgBox("Nickname is " & My.Settings.Nickname)
End Sub
Para que este ejemplo funcione, la aplicación debe tener una configuración Nickname de tipo String .
Vea también
ApplicationSettingsBase
Cómo: Leer la configuración de la aplicación en Visual Basic
Cómo: Cambiar la configuración del usuario en Visual Basic
Cómo: Conservar la configuración del usuario en Visual Basic
Cómo: Crear cuadrículas de propiedades para la configuración del usuario en Visual Basic
Administrar la configuración de la aplicación (.NET)
My.User (Objeto)
27/11/2019 • 2 minutes to read • Edit Online
Comentarios
Para obtener información acerca de los métodos y las propiedades del objeto My.User , vea
Microsoft.VisualBasic.ApplicationServices.User.
Para obtener más información, consulte acceso a los datos de usuario.
Requisitos
Ensamblado: Biblioteca en tiempo de ejecución de Visual Basic (en Microsoft. VisualBasic. dll)
Vea también
IPrincipal
CurrentPrincipal
User
Current
My.WebServices (Objeto)
27/11/2019 • 5 minutes to read • Edit Online
Proporciona propiedades para crear y obtener acceso a una sola instancia de cada servicio Web XML al que hace
referencia el proyecto actual.
Comentarios
El objeto My.WebServices proporciona una instancia de cada servicio Web al que hace referencia el proyecto
actual. Cada una de las instancias se crea a petición. Puede tener acceso a estos servicios Web a través de las
propiedades del objeto My.WebServices . El nombre de la propiedad es igual que el nombre del servicio Web al
que tiene acceso la propiedad. Cualquier clase que hereda de SoapHttpClientProtocol es un servicio web. Para
obtener información sobre cómo agregar servicios web a un proyecto, consulte acceso a servicios Web de
aplicaciones.
El objeto My.WebServices expone solo los servicios web asociados al proyecto actual. No proporciona acceso a
los servicios Web declarados en los archivos DLL a los que se hace referencia. Para tener acceso a un servicio
Web que proporciona un archivo DLL, debe usar el nombre completo del servicio Web, con el formato DllName.
WebServiceName. Para obtener más información, vea acceso a servicios Web de aplicaciones.
El objeto y sus propiedades no están disponibles para las aplicaciones Web.
Propiedades
Cada propiedad del objeto My.WebServices proporciona acceso a una instancia de un servicio Web al que hace
referencia el proyecto actual. El nombre de la propiedad es el mismo que el nombre del servicio Web al que
tiene acceso la propiedad y el tipo de propiedad es el mismo que el tipo del servicio Web.
NOTE
Si hay un conflicto de nombres, el nombre de la propiedad para tener acceso a un servicio web es
RootNamespacenamespace_ServiceName. Por ejemplo, considere dos servicios web denominados Service1 . Si uno de
estos servicios está en el espacio de nombres raíz WindowsApplication1 y en el espacio de nombres Namespace1 ,
tendría acceso a ese servicio mediante My.WebServices.WindowsApplication1_Namespace1_Service1 .
La primera vez que se tiene acceso a una de las propiedades del objeto de My.WebServices , se crea una nueva
instancia del servicio Web y se almacena. Los accesos posteriores de esa propiedad devuelven esa instancia del
servicio Web.
Puede eliminar un servicio Web asignando Nothing a la propiedad de ese servicio Web. El establecedor de
propiedad asigna Nothing al valor almacenado. Si asigna un valor distinto de Nothing a la propiedad, el
establecedor produce una excepción de ArgumentException.
Puede comprobar si una propiedad del objeto My.WebServices almacena una instancia del servicio Web
mediante el operador Is o IsNot . Puede utilizar esos operadores para comprobar si el valor de la propiedad
es Nothing .
NOTE
Normalmente, el operador Is o IsNot tiene que leer el valor de la propiedad para realizar la comparación. Sin
embargo, si la propiedad almacena actualmente Nothing , la propiedad crea una nueva instancia del servicio Web y, a
continuación, devuelve esa instancia. Sin embargo, el compilador Visual Basic trata las propiedades del objeto
My.WebServices de forma especial y permite que el operador Is o IsNot Compruebe el estado de la propiedad sin
modificar su valor.
Ejemplo
En este ejemplo se llama al método FahrenheitToCelsius del servicio Web XML TemperatureConverter y se
devuelve el resultado.
Function ConvertFromFahrenheitToCelsius(
ByVal dFahrenheit As Double) As Double
Return My.WebServices.TemperatureConverter.FahrenheitToCelsius(dFahrenheit)
End Function
Para que este ejemplo funcione, el proyecto debe hacer referencia a un servicio Web denominado Converter y
ese servicio Web debe exponer el método ConvertTemperature . Para obtener más información, vea acceso a
servicios Web de aplicaciones.
Este código no funciona en un proyecto de aplicación Web.
Requisitos
Disponibilidad por tipo de proyecto
T IP O DE P RO Y EC TO DISP O N IB L E
Aplicación de Windows Sí
Biblioteca de clases Sí
Aplicación de consola Sí
Servicio de Windows Sí
Sitio web No
Vea también
SoapHttpClientProtocol
ArgumentException
Acceso a los servicios web de la aplicación
TextFieldParser Object
27/11/2019 • 2 minutes to read • Edit Online
Sintaxis
Public Class TextFieldParser
Comentarios
Para obtener información acerca de los métodos y las propiedades del objeto TextFieldParser , vea TextFieldParser.
Para obtener más información, vea leer desde archivos.
Requisitos
Espacio de nombres: Microsoft.VisualBasic.FileIO
Clase: TextFieldParser
Ensamblado: Biblioteca en tiempo de ejecución de Visual Basic (en Microsoft. VisualBasic. dll)
Operadores (Visual Basic)
05/12/2019 • 2 minutes to read • Edit Online
En esta sección
Precedencia de operadores en Visual Basic
Operadores enumerados por funcionalidad
Tipos de datos de resultados de operador
DirectCast (operador)
TryCast (operador)
Operador Name
Nuevo operador
Operadores condicionales null
Operadores aritméticos
Operadores de asignación
Operadores de desplazamiento de bits
Operadores de comparación
Operadores de concatenación
Operadores lógicos y bit a bit
Operadores varios
Secciones relacionadas
Referencia del lenguaje Visual Basic
Prioridad de operador en Visual Basic
27/11/2019 • 5 minutes to read • Edit Online
Cuando se producen varias operaciones en una expresión, cada parte se evalúa y se resuelve en un orden
predeterminado denominado precedencia de operadores.
Reglas de precedencia
Cuando las expresiones contienen operadores de más de una categoría, se evalúan según las reglas
siguientes:
Los operadores aritméticos y de concatenación tienen el orden de prioridad que se describe en la
sección siguiente y todos tienen mayor prioridad que los operadores de comparación, lógicos y bit a
bit.
Todos los operadores de comparación tienen la misma prioridad y todos tienen mayor prioridad que
los operadores lógicos y bit a bit, pero tienen menor prioridad que los operadores aritméticos y de
concatenación.
Los operadores lógicos y bit a bit tienen el orden de prioridad que se describe en la sección siguiente y
todos tienen menor prioridad que los operadores aritméticos, de concatenación y de comparación.
Los operadores con la misma prioridad se evalúan de izquierda a derecha en el orden en que aparecen
en la expresión.
Orden de prioridad
Los operadores se evalúan en el orden de prioridad siguiente:
Await (Operador)
Operador
Operadores aritméticos y de concatenación
Exponenciación ( ^ )
Identidad unaria y negación ( + , – )
Multiplicación y división de punto flotante ( * , / )
División de enteros ( \ )
Aritmética modular ( Mod )
Suma y resta ( + , – )
Concatenación de cadenas ( & )
Desplazamiento de bits aritmético ( << , >> )
Operadores de comparación
Todos los operadores de comparación ( = , <> , < , <= , > , >= , Is , IsNot , Like``TypeOf ... Is )
Operadores lógicos y bit a bit
Negación ( Not )
Conjunción ( And , AndAlso )
Disyunción inclusiva ( Or , OrElse )
Disyunción exclusiva ( Xor )
Comentarios
El operador = es solo el operador de comparación de igualdad, no el operador de asignación.
El operador de concatenación de cadenas ( & ) no es un operador aritmético, pero en su precedencia está
agrupado con los operadores aritméticos.
Los operadores Is y IsNot son operadores de comparación de referencia de objeto. No comparan los
valores de dos objetos; solo comprueban si dos variables de objeto hacen referencia a la misma instancia de
objeto.
asociatividad
Cuando los operadores de igual precedencia aparecen juntos en una expresión, por ejemplo multiplicación y
división, el compilador evalúa cada operación a medida que la encuentra de izquierda a derecha. En el
ejemplo siguiente se ilustra esto.
Dim n1 As Integer = 96 / 8 / 4
Dim n2 As Integer = (96 / 8) / 4
Dim n3 As Integer = 96 / (8 / 4)
La primera expresión evalúa la división 96/8 (que da como resultado 12) y, a continuación, la división 12/4,
que da como resultado tres. Dado que el compilador evalúa las operaciones para n1 de izquierda a derecha,
la evaluación es la misma cuando ese orden se indica explícitamente para n2 . Tanto n1 como n2 tienen el
resultado de tres. Por el contrario, n3 tiene un resultado de 48, porque los paréntesis obligan al compilador a
evaluar 8/4 primero.
Debido a este comportamiento, se dice que los operadores son asociativos a la izquierda en Visual Basic.
Dim a, b, c, d, e, f, g As Double
a = 8.0
b = 3.0
c = 4.0
d = 2.0
e = 1.0
f = a - b + c / d * e
' The preceding line sets f to 7.0. Because of natural operator
' precedence and associativity, it is exactly equivalent to the
' following line.
f = (a - b) + ((c / d) * e)
' The following line overrides the natural operator precedence
' and left associativity.
g = (a - (b + c)) / (d * e)
' The preceding line sets g to 0.5.
Vea también
Operador =
Is (operador)
IsNot (operador)
Like (operador)
TypeOf (operador)
Await (operador)
Operadores enumerados por funcionalidad
Operadores y expresiones
Tipos de datos de resultados de operador (Visual
Basic)
27/11/2019 • 16 minutes to read • Edit Online
Visual Basic determina el tipo de datos de resultado de una operación en función de los tipos de datos de los
operandos. En algunos casos, podría tratarse de un tipo de datos con un intervalo mayor que el de uno de los
operandos.
Aritmética decimal
Tenga en cuenta que el tipo de datos decimal no es ningún punto flotante ni entero.
Si uno de los operandos de una + , – , * , / o Mod es Decimal y el otro no Single o Double , Visual Basic
amplía el otro operando a Decimal . Realiza la operación en Decimal y el tipo de datos del resultado es Decimal .
El operador ^ solo se define para el tipo de datos Double . Visual Basic amplía cada operando según sea
necesario para Double antes de la operación, y el tipo de datos del resultado siempre es Double .
Aritmética de enteros
El tipo de datos de resultado de una operación de entero depende de los tipos de datos de los operandos. En
general, Visual Basic usa las siguientes directivas para determinar el tipo de datos del resultado:
Si ambos operandos de un operador binario tienen el mismo tipo de datos, el resultado tiene ese tipo de
datos. Una excepción es Boolean , que se fuerza a Short .
Si un operando sin signo participa con un operando firmado, el resultado tiene un tipo con signo, al
menos tan grande como un intervalo.
De lo contrario, el resultado normalmente tiene el mayor de los dos tipos de datos de operando.
Tenga en cuenta que el tipo de datos del resultado podría no ser el mismo que el tipo de datos del operando.
NOTE
El tipo de datos del resultado no es siempre lo suficientemente grande como para contener todos los valores posibles
resultantes de la operación. Se puede producir una excepción OverflowException si el valor es demasiado grande para el
tipo de datos del resultado.
Operadores unarios + y –
En la tabla siguiente se muestran los tipos de datos de resultados de los dos operadores unarios, + y – .
<< , Short SByte Byte Short UShort Entero UIntege Long ULong
>> r
Si el operando izquierdo es Decimal , Single , Double o String , Visual Basic intenta convertirlo en Long antes
de la operación y el tipo de datos del resultado es Long . El operando derecho (el número de posiciones de bits
que se va a desplazar) debe ser Integer o un tipo que se amplíe a Integer .
Operadores binarios +, –, *y mod
En la tabla siguiente se muestran los tipos de datos de resultado de los operadores + y – binarios y los
operadores * y Mod . Tenga en cuenta que esta tabla es simétrica; para una combinación determinada de tipos
de datos de operando, el tipo de datos del resultado es el mismo, independientemente del orden de los
operandos.
Boolean Short SByte Short Short Entero Entero Long Long Decimal
SByte SByte SByte Short Short Entero Entero Long Long Decimal
Byte Short Short Byte Short UShort Entero UIntege Long ULong
r
Short Short Short Short Short Entero Entero Long Long Decimal
UShort Entero Entero UShort Entero UShort Entero UIntege Long ULong
r
Integer Entero Entero Entero Entero Entero Entero Long Long Decimal
UInteger Long Long UIntege Long UIntege Long UIntege Long ULong
r r r
Long Long Long Long Long Long Long Long Long Decimal
ULong Decimal Decimal ULong Decimal ULong Decimal ULong Decimal ULong
Operador \
En la tabla siguiente se muestran los tipos de datos de resultados del operador \ . Tenga en cuenta que esta
tabla es simétrica; para una combinación determinada de tipos de datos de operando, el tipo de datos del
resultado es el mismo, independientemente del orden de los operandos.
Boolean Short SByte Short Short Entero Entero Long Long Long
SByte SByte SByte Short Short Entero Entero Long Long Long
Byte Short Short Byte Short UShort Entero UIntege Long ULong
r
Short Short Short Short Short Entero Entero Long Long Long
UShort Entero Entero UShort Entero UShort Entero UIntege Long ULong
r
Integer Entero Entero Entero Entero Entero Entero Long Long Long
UInteger Long Long UIntege Long UIntege Long UIntege Long ULong
r r r
Long Long Long Long Long Long Long Long Long Long
ULong Long Long ULong Long ULong Long ULong Long ULong
Si alguno de los operandos del operador \ es decimal, Singleo Double, Visual Basic intenta convertirlo a Long
antes de la operación y el tipo de datos del resultado es Long .
Not Boolean SByte Byte Short UShort Entero UIntege Long ULong
o r
Si el operando es Decimal , Single , Double o String Visual Basic intenta convertirlo en Long antes de la
operación y el tipo de datos del resultado es Long .
Operadores bit a bit and, or y XOR
En la tabla siguiente se muestran los tipos de datos de resultado de los operadores bit a bit And , Or y Xor .
Tenga en cuenta que esta tabla es simétrica; para una combinación determinada de tipos de datos de operando,
el tipo de datos del resultado es el mismo, independientemente del orden de los operandos.
Boolean Boolean SByte Short Short Entero Entero Long Long Long
o
SByte SByte SByte Short Short Entero Entero Long Long Long
Byte Short Short Byte Short UShort Entero UIntege Long ULong
r
Short Short Short Short Short Entero Entero Long Long Long
UShort Entero Entero UShort Entero UShort Entero UIntege Long ULong
r
Integer Entero Entero Entero Entero Entero Entero Long Long Long
UInteger Long Long UIntege Long UIntege Long UIntege Long ULong
r r r
Long Long Long Long Long Long Long Long Long Long
ULong Long Long ULong Long ULong Long ULong Long ULong
Si un operando es Decimal , Single , Double o String , Visual Basic intenta convertirlo en Long antes de la
operación y el tipo de datos del resultado es el mismo que si ese operando ya se hubiera Long .
Operadores varios
El operador & solo se define para la concatenación de operandos String . Visual Basic convierte cada operando
según sea necesario para String antes de la operación, y el tipo de datos del resultado siempre es String . En el
caso del operador & , se considera que todas las conversiones a String se amplían, incluso si se
On``Option Strict .
Los operadores Is y IsNot requieren que ambos operandos sean de un tipo de referencia. La expresión
TypeOf ... Is requiere que el primer operando sea de un tipo de referencia y el segundo operando sea el nombre
de un tipo de datos. En todos estos casos, el tipo de datos del resultado es Boolean .
El operador Like solo se define para la coincidencia de patrones de String operandos. Visual Basic intenta
convertir cada operando según sea necesario para String antes de la operación. El tipo de datos del resultado
siempre es Boolean .
Vea también
Tipos de datos
Operadores y expresiones
Operadores aritméticos en Visual Basic
Operadores de comparación en Visual Basic
Operadores
Prioridad de operador en Visual Basic
Operadores enumerados por funcionalidad
Operadores aritméticos
Operadores de comparación
Option Strict (instrucción)
Operadores enumerados por funcionalidad
(Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Vea una de las categorías que se enumeran a continuación o abra esta parte de la tabla de contenido de la
ayuda para ver una lista alfabética de los operadores de Visual Basic.
Categorías de operadores
O P ERA DO RES DESC RIP C IÓ N
Operadores lógicos y operadores bit a bit Estos operadores realizan operaciones lógicas.
Vea también
Operadores y expresiones
Prioridad de operador en Visual Basic
Operadores aritméticos (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Vea también
Prioridad de operador en Visual Basic
Operadores aritméticos en Visual Basic
Operadores de asignación (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Vea también
Prioridad de operador en Visual Basic
Operadores enumerados por funcionalidad
Instrucciones
Operador de desplazamiento de bits (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Vea también
Operadores enumerados por funcionalidad
Operadores de comparación (Visual Basic)
27/11/2019 • 10 minutes to read • Edit Online
Sintaxis
result = expression1 comparisonoperator expression2
result = object1 [Is | IsNot] object2
result = string Like pattern
Elementos
result
Obligatorio. Boolean valor que representa el resultado de la comparación.
expression1 , expression2
Obligatorio. Cualquier expresión.
comparisonoperator
Obligatorio. Cualquier operador de comparación relacional.
object1 , object2
Obligatorio. Cualquier nombre de objeto de referencia.
string
Obligatorio. Cualquier expresión String .
pattern
Obligatorio. Cualquier expresión String o intervalo de caracteres.
Comentarios
La tabla siguiente contiene una lista de los operadores de comparación relacionales y las condiciones que
determinan si result es True o False .
<= (menor o igual que) expression1 <= expression2 expression1 > expression2
>= (mayor o igual que) expression1 >= expression2 expression1 < expression2
NOTE
El operador = también se usa como operador de asignación.
El operador Is , el operador IsNot y el operador Like tienen funcionalidades de comparación específicas que
difieren de los operadores de la tabla anterior.
Comparar números
Al comparar una expresión de tipo Single con una de tipo Double , la expresión de Single se convierte en
Double . Este comportamiento es opuesto al comportamiento que se encuentra en Visual Basic 6.
Del mismo modo, al comparar una expresión de tipo Decimal con una expresión de tipo Single o Double , la
expresión de Decimal se convierte en Single o Double . En el caso de las expresiones Decimal , es posible que se
pierda cualquier valor fraccionario inferior a 1E-28. Esta pérdida de valor fraccionario puede hacer que dos valores
se comparen como iguales cuando no lo son. Por este motivo, debe tener cuidado al utilizar la igualdad ( = ) para
comparar dos variables de punto flotante. Es más seguro probar si el valor absoluto de la diferencia entre los dos
números es menor que una pequeña tolerancia aceptable.
Imprecisión de punto flotante
Al trabajar con números de punto flotante, tenga en cuenta que no siempre tienen una representación precisa en la
memoria. Esto podría dar lugar a resultados inesperados de ciertas operaciones, como la comparación de valores y
el operador mod. Para obtener más información, vea solución de problemas de tipos de datos.
Comparar cadenas
Cuando se comparan cadenas, las expresiones de cadena se evalúan en función de su criterio de ordenación
alfabético, que depende de la configuración Option Compare .
Option Compare Binary basa las comparaciones de cadenas en un criterio de ordenación derivado de las
representaciones binarias internas de los caracteres. La página de códigos determina el criterio de ordenación. En el
ejemplo siguiente se muestra un criterio de ordenación binario típico.
A < B < E < Z < a < b < e < z < À < Ê < Ø < à < ê < ø
Option Compare Text basa las comparaciones de cadenas en un criterio de ordenación textual que no distingue
entre mayúsculas y minúsculas, determinado por la configuración regional de la aplicación. Cuando se establece
Option Compare Text y se ordenan los caracteres en el ejemplo anterior, se aplica el siguiente criterio de ordenación
de texto:
(A=a) < (À= à) < (B=b) < (E=e) < (Ê= ê) < (Ø = ø) < (Z=z)
SI LO S O P ERA N DO S SO N L A C O M PA RA C IÓ N ES
Uno o ambos son tipos de referencia distintos de String Se inicia una InvalidCastException.
Las comparaciones numéricas tratan Nothing como 0. Las comparaciones de cadenas tratan Nothing como ""
(una cadena vacía).
Sobrecarga
Operadores de comparación relacionales ( < . <= , > , >= , = , <> ) se pueden sobrecargar, lo que significa que
una clase o estructura puede volver a definir su comportamiento cuando un operando tiene el tipo de esa clase o
estructura. Si el código usa cualquiera de estos operadores en una clase o estructura de este tipo, asegúrese de que
comprende el comportamiento redefinido. Para obtener más información, consulta Operator Procedures.
Observe que el operador = solo se puede sobrecargar como operador de comparación relacional, no como
operador de asignación.
Ejemplo
En el ejemplo siguiente se muestran varios usos de operadores de comparación relacionales, que se usan para
comparar expresiones. Los operadores de comparación relacional devuelven un resultado Boolean que indica si la
expresión indicada se evalúa como True . Cuando se aplican los operadores > y < a las cadenas, la comparación
se realiza utilizando el criterio de ordenación alfabético normal de las cadenas. Este orden puede depender de la
configuración regional. La ordenación distingue entre mayúsculas y minúsculas o no depende del valor Option
Compare .
Dim x As testClass
Dim y As New testClass()
x = y
If x Is y Then
' Insert code to run if x and y point to the same instance.
End If
En el ejemplo anterior, la primera comparación devuelve False y las comparaciones restantes devuelven True .
Vea también
InvalidCastException
Operador =
Prioridad de operador en Visual Basic
Operadores enumerados por funcionalidad
Solución de problemas de tipos de datos
Operadores de comparación en Visual Basic
Operadores de concatenación (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Vea también
System.Text
StringBuilder
Prioridad de operador en Visual Basic
Operadores de concatenación en Visual Basic
Operadores lógicos y bit a bit (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
A continuación se muestran los operadores lógicos y bit a bit definidos en Visual Basic.
And (operador)
NOT (operador)
OR (operador)
XOR (operador)
AndAlso (operador)
OrElse (operador)
IsFalse (operador)
IsTrue (operador)
Vea también
Prioridad de operador en Visual Basic
Operadores lógicos y bit a bit en Visual Basic
Operadores varios (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Vea también
Operadores enumerados por funcionalidad
Operador & (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Sintaxis
result = expression1 & expression2
Elementos
result
Obligatorio. Cualquier String o variable de Object .
expression1
Obligatorio. Cualquier expresión con un tipo de datos que se amplíe a String .
expression2
Obligatorio. Cualquier expresión con un tipo de datos que se amplíe a String .
Comentarios
Si el tipo de datos de expression1 o expression2 no es String pero se amplía a String , se convierte en
String . Si alguno de los tipos de datos no se amplía a String , el compilador genera un error.
El tipo de datos de result es String . Si una o ambas expresiones se evalúan como Nothing o tienen un valor de
DBNull.Value, se tratan como una cadena con un valor de "".
NOTE
El operador de & se puede sobrecargar, lo que significa que una clase o estructura puede volver a definir su
comportamiento cuando un operando tiene el tipo de esa clase o estructura. Si el código usa este operador en una clase o
estructura de este tipo, asegúrese de entender su comportamiento redefinido. Para obtener más información, consulta
Operator Procedures.
NOTE
El carácter de y comercial (&) también se puede usar para identificar variables como tipo Long . Para obtener más
información, vea caracteres de tipo.
Ejemplo
En este ejemplo se usa el operador & para forzar la concatenación de cadenas. El resultado es un valor de
cadena que representa la concatenación de los dos operandos de cadena.
Dim sampleStr As String
sampleStr = "Hello" & " World"
' The preceding statement sets sampleStr to "Hello World".
Vea también
Operador &=
Operadores de concatenación
Prioridad de operador en Visual Basic
Operadores enumerados por funcionalidad
Operadores de concatenación en Visual Basic
&= (operador) (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Concatena una expresión String a una variable o propiedad String y asigna el resultado a la variable o
propiedad.
Sintaxis
variableorproperty &= expression
Elementos
variableorproperty
Obligatorio. Cualquier variable o propiedad de String .
expression
Obligatorio. Cualquier expresión String .
Comentarios
El elemento del lado izquierdo del operador &= puede ser una variable escalar simple, una propiedad o un
elemento de una matriz. La variable o la propiedad no pueden ser de solo lectura. El operador &= concatena la
expresión de String de su derecha a la variable o propiedad de la String a su izquierda, y asigna el resultado a
la variable o propiedad de su izquierda.
Sobrecarga
El operador de & se puede sobrecargar, lo que significa que una clase o estructura puede volver a definir su
comportamiento cuando un operando tiene el tipo de esa clase o estructura. La sobrecarga del operador &
afecta al comportamiento del operador &= . Si el código usa &= en una clase o estructura que sobrecarga & ,
asegúrese de que entiende su comportamiento redefinido. Para obtener más información, consulta Operator
Procedures.
Ejemplo
En el ejemplo siguiente se usa el operador &= para concatenar dos variables String y asignar el resultado a la
primera variable.
Vea también
Operador &
Operador +=
Operadores de asignación
Operadores de concatenación
Prioridad de operador en Visual Basic
Operadores enumerados por funcionalidad
Instrucciones
* (Operador, Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Sintaxis
number1 * number2
Elementos
T ÉRM IN O DEF IN IC IÓ N
Resultado
El resultado es el producto de number1 y number2 .
Tipos admitidos
Todos los tipos numéricos, incluidos los tipos de punto flotante y sin signo y Decimal .
Comentarios
El tipo de datos del resultado depende de los tipos de los operandos. En la tabla siguiente se muestra cómo se
determina el tipo de datos del resultado.
Ambas expresiones son tipos de datos enteros (SByte, byte, Un tipo de datos numérico adecuado para los tipos de datos
Short, ushort, Integer, UInteger, Long, ULong) de number1 y number2 . Vea las tablas "aritmética de
enteros" en tipos de datos de resultados de operadores.
Sobrecarga
El operador de * se puede sobrecargar, lo que significa que una clase o estructura puede volver a definir su
comportamiento cuando un operando tiene el tipo de esa clase o estructura. Si el código usa este operador en
una clase o estructura de este tipo, asegúrese de entender su comportamiento redefinido. Para obtener más
información, consulta Operator Procedures.
Ejemplo
En este ejemplo se usa el operador * para multiplicar dos números. El resultado es el producto de los dos
operandos.
Vea también
Operador *=
Operadores aritméticos
Prioridad de operador en Visual Basic
Operadores enumerados por funcionalidad
Operadores aritméticos en Visual Basic
*= (Operador, Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Multiplica el valor de una variable o propiedad por el valor de una expresión y asigna el resultado a la variable o
propiedad.
Sintaxis
variableorproperty *= expression
Elementos
variableorproperty
Obligatorio. Cualquier variable o propiedad numérica.
expression
Obligatorio. Cualquier expresión numérica.
Comentarios
El elemento del lado izquierdo del operador *= puede ser una variable escalar simple, una propiedad o un
elemento de una matriz. La variable o la propiedad no pueden ser de solo lectura.
El operador *= multiplica primero el valor de la expresión (en el lado derecho del operador) por el valor de la
variable o propiedad (en el lado izquierdo del operador). A continuación, el operador asigna el resultado de la
operación a la variable o propiedad.
Sobrecarga
El operador * se puede sobrecargar, lo que significa que una clase o estructura puede volver a definir su
comportamiento cuando un operando tiene el tipo de esa clase o estructura. La sobrecarga del operador *
afecta al comportamiento del operador *= . Si el código usa *= en una clase o estructura que sobrecarga * ,
asegúrese de que entiende su comportamiento redefinido. Para obtener más información, consulta Operator
Procedures.
Ejemplo
En el ejemplo siguiente se usa el operador *= para multiplicar una variable Integer por un segundo y asignar el
resultado a la primera variable.
Vea también
Operador *
Operadores de asignación
Operadores aritméticos
Prioridad de operador en Visual Basic
Operadores enumerados por funcionalidad
Instrucciones
+ (Operador, Visual Basic)
27/11/2019 • 9 minutes to read • Edit Online
Suma dos números o devuelve el valor positivo de una expresión numérica. También se puede utilizar para
concatenar dos expresiones de cadena.
Sintaxis
expression1 + expression2
+expression1
Elementos
T ÉRM IN O DEF IN IC IÓ N
Resultado
Si expression1 y expression2 son ambos numéricos, el resultado es su suma aritmética.
Si expression2 está ausente, el operador de + es el operador unario de identidad para el valor sin modificar de
una expresión. En este sentido, la operación consiste en conservar el signo de expression1 , por lo que el
resultado es negativo si expression1 es negativo.
Si expression1 y expression2 son ambas cadenas, el resultado es la concatenación de sus valores.
Si expression1 y expression2 son de tipos mixtos, la acción tomada depende de sus tipos, su contenido y la
configuración de la instrucción Option Strict. Para obtener más información, vea las tablas de "Comentarios".
Tipos admitidos
Todos los tipos numéricos, incluidos los tipos de punto flotante y sin signo y Decimal ,y String .
Comentarios
En general, + realiza una suma aritmética siempre que sea posible y concatena solo cuando ambas expresiones
son cadenas.
Si ninguna de las expresiones es una Object , Visual Basic realiza las acciones siguientes.
T IP O S DE DATO S DE EXP RESIO N ES A C C IÓ N P O R EL C O M P IL A DO R
Ambas expresiones son tipos de datos numéricos ( SByte , Agregar. El tipo de datos del resultado es un tipo numérico
Byte , Short , UShort , Integer , UInteger , Long , adecuado para los tipos de datos de expression1 y
ULong , Decimal , Single o Double ) expression2 . Vea las tablas "aritmética de enteros" en tipos
de datos de resultados de operadores.
Una expresión es un tipo de datos numérico y la otra es una Si Option Strict se On , genere un error del compilador.
cadena
Si Option Strict es Off , convierta implícitamente el
String en Double y agregue.
Una expresión es un tipo de datos numérico y la otra no es Agregue, con Nothing valor cero.
nada
Una expresión es una cadena y la otra es Nothing Concatenate, con Nothing valor como "".
Si una expresión es una expresión de Object , Visual Basic realiza las acciones siguientes.
Object expresión contiene un valor numérico y el otro es Si Option Strict se On , genere un error del compilador.
un tipo de datos numérico
Si Option Strict se Off , agregue.
Object expresión contiene un valor numérico y el otro es Si Option Strict se On , genere un error del compilador.
de tipo String
Si Option Strict es Off , convierta implícitamente el
String en Double y agregue.
Object expresión contiene una cadena y la otra es un tipo Si Option Strict se On , genere un error del compilador.
de datos numérico
Si Option Strict es Off , convierta implícitamente la
cadena Object en Double y agregue.
Object expresión contiene una cadena y la otra es de tipo Si Option Strict se On , genere un error del compilador.
String
Si Option Strict es Off , convierta implícitamente
Object en String y concatene.
Si ambas expresiones son expresiones Object , Visual Basic realiza las siguientes acciones (solo
Option Strict Off ).
T IP O S DE DATO S DE EXP RESIO N ES A C C IÓ N P O R EL C O M P IL A DO R
Una expresión Object contiene un valor numérico y la otra Convierta implícitamente el Object de cadena en Double
contiene una cadena y agregue.
Si Object expresión se evalúa como Nothing o DBNull, el operador de + lo trata como un String con un valor
de "".
NOTE
Al utilizar el operador + , es posible que no pueda determinar si se producirá la concatenación de cadenas o de suma. Use
el operador & para la concatenación para eliminar la ambigüedad y proporcionar código autodocumentado.
Sobrecarga
El operador de + se puede sobrecargar, lo que significa que una clase o estructura puede volver a definir su
comportamiento cuando un operando tiene el tipo de esa clase o estructura. Si el código usa este operador en
una clase o estructura de este tipo, asegúrese de entender su comportamiento redefinido. Para obtener más
información, consulta Operator Procedures.
Ejemplo
En el ejemplo siguiente se usa el operador + para agregar números. Si los operandos son numéricos, Visual
Basic calcula el resultado aritmético. El resultado aritmético representa la suma de los dos operandos.
También puede usar el operador + para concatenar cadenas. Si los operandos son ambas cadenas, Visual Basic
las concatena. El resultado de la concatenación representa una sola cadena formada por el contenido de los dos
operandos uno tras otro.
Si los operandos son de tipos mixtos, el resultado depende de la configuración de la instrucción Option Strict. En
el ejemplo siguiente se muestra el resultado cuando se On``Option Strict .
Option Strict On
Para eliminar la ambigüedad, debe utilizar el operador & en lugar de + para la concatenación.
Vea también
Operador &
Operadores de concatenación
Operadores aritméticos
Operadores enumerados por funcionalidad
Prioridad de operador en Visual Basic
Operadores aritméticos en Visual Basic
Option Strict (instrucción)
+= (Operador, Visual Basic)
27/11/2019 • 4 minutes to read • Edit Online
Agrega el valor de una expresión numérica al valor de una variable o propiedad numérica y asigna el resultado a
la variable o propiedad. También se puede utilizar para concatenar una expresión String a una variable o
propiedad String y asignar el resultado a la variable o propiedad.
Sintaxis
variableorproperty += expression
Elementos
variableorproperty
Obligatorio. Cualquier variable o propiedad numérica o String .
expression
Obligatorio. Cualquier expresión numérica o de String .
Comentarios
El elemento del lado izquierdo del operador += puede ser una variable escalar simple, una propiedad o un
elemento de una matriz. La variable o la propiedad no pueden ser de solo lectura.
El operador += agrega el valor de su derecha a la variable o propiedad de su izquierda, y asigna el resultado a la
variable o propiedad de su izquierda. También se puede usar el operador += para concatenar la expresión de
String de su derecha a la variable o propiedad de String de la izquierda, y asignar el resultado a la variable o
propiedad de su izquierda.
NOTE
Al utilizar el operador += , es posible que no pueda determinar si se producirá la concatenación de cadenas o de suma. Use
el operador &= para la concatenación para eliminar la ambigüedad y proporcionar código autodocumentado.
Sobrecarga
El operador de + se puede sobrecargar, lo que significa que una clase o estructura puede volver a definir su
comportamiento cuando un operando tiene el tipo de esa clase o estructura. La sobrecarga del operador +
afecta al comportamiento del operador += . Si el código usa += en una clase o estructura que sobrecarga + ,
asegúrese de que entiende su comportamiento redefinido. Para obtener más información, consulta Operator
Procedures.
Ejemplo
En el ejemplo siguiente se usa el operador += para combinar el valor de una variable con otra. La primera parte
utiliza += con variables numéricas para agregar un valor a otro. La segunda parte utiliza += con variables de
String para concatenar un valor con otro. En ambos casos, el resultado se asigna a la primera variable.
Vea también
Operador +
Operadores de asignación
Operadores aritméticos
Operadores de concatenación
Prioridad de operador en Visual Basic
Operadores enumerados por funcionalidad
Instrucciones
= (Operador, Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Sintaxis
variableorproperty = value
Elementos
variableorproperty
Cualquier variable que se pueda escribir o cualquier propiedad.
value
Cualquier literal, constante o expresión.
Comentarios
El elemento del lado izquierdo del signo igual ( = ) puede ser una variable escalar simple, una propiedad o un
elemento de una matriz. La variable o la propiedad no pueden ser de solo lectura. El operador = asigna el
valor de su derecha a la variable o propiedad de su izquierda.
NOTE
El operador = también se usa como operador de comparación. Para obtener más información, vea operadores de
comparación.
Sobrecarga
El operador = solo se puede sobrecargar como operador de comparación relacional, no como operador de
asignación. Para obtener más información, consulta Operator Procedures.
Ejemplo
En el siguiente ejemplo se muestra el operador de asignación. El valor de la derecha se asigna a la variable de
la izquierda.
Devuelve la diferencia entre dos expresiones numéricas o el valor negativo de una expresión numérica.
Sintaxis
expression1 – expression2
–expression1
Elementos
expression1
Obligatorio. Cualquier expresión numérica.
expression2
Obligatorio a menos que el operador de – calcule un valor negativo. Cualquier expresión numérica.
Resultado
El resultado es la diferencia entre expression1 y expression2 , o el valor negado de expression1 .
El tipo de datos del resultado es un tipo numérico adecuado para los tipos de datos de expression1 y
expression2 . Vea las tablas "aritmética de enteros" en tipos de datos de resultados de operadores.
Tipos admitidos
todos los tipos numéricos. Esto incluye los tipos de punto flotante y sin signo y Decimal .
Comentarios
En el primer uso que se muestra en la sintaxis mostrada anteriormente, el operador – es el operador de resta
aritmética binaria para la diferencia entre dos expresiones numéricas.
En el segundo uso que se muestra en la sintaxis mostrada anteriormente, el operador – es el operador unario de
negación para el valor negativo de una expresión. En este sentido, la negación consiste en invertir el signo de
expression1 para que el resultado sea positivo si expression1 es negativo.
Si alguna de las expresiones se evalúa como Nothing, el operador – la trata como cero.
NOTE
El operador de – se puede sobrecargar, lo que significa que una clase o estructura puede volver a definir su
comportamiento cuando un operando tiene el tipo de esa clase o estructura. Si el código usa este operador en una clase o
estructura de este tipo, asegúrese de que entiende su comportamiento redefinido. Para obtener más información, consulta
Operator Procedures.
Ejemplo
En el ejemplo siguiente se usa el operador – para calcular y devolver la diferencia entre dos números y, a
continuación, para negar un número.
Después de la ejecución de estas instrucciones, binaryResult contiene 124,45 y unaryResult contiene – 334,90.
Vea también
-= (Operador) (Visual Basic)
Operadores aritméticos
Prioridad de operador en Visual Basic
Operadores enumerados por funcionalidad
Operadores aritméticos en Visual Basic
-= (Operador, Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Resta el valor de una expresión del valor de una variable o propiedad y asigna el resultado a la variable o
propiedad.
Sintaxis
variableorproperty -= expression
Elementos
variableorproperty
Obligatorio. Cualquier variable o propiedad numérica.
expression
Obligatorio. Cualquier expresión numérica.
Comentarios
El elemento del lado izquierdo del operador -= puede ser una variable escalar simple, una propiedad o un
elemento de una matriz. La variable o la propiedad no pueden ser de solo lectura.
El operador -= primero resta el valor de la expresión (en el lado derecho del operador) del valor de la variable o
de la propiedad (en el lado izquierdo del operador). A continuación, el operador asigna el resultado de la
operación a la variable o propiedad.
Sobrecarga
Se puede sobrecargarel operador-(Visual Basic) , lo que significa que una clase o estructura puede volver a definir
su comportamiento cuando un operando tiene el tipo de esa clase o estructura. La sobrecarga del operador -
afecta al comportamiento del operador -= . Si el código usa -= en una clase o estructura que sobrecarga - ,
asegúrese de que entiende su comportamiento redefinido. Para obtener más información, consulta Operator
Procedures.
Ejemplo
En el ejemplo siguiente se usa el operador -= para restar una variable Integer de otra y asignar el resultado a
la última variable.
Vea también
Operador-(Visual Basic)
Operadores de asignación
Operadores aritméticos
Prioridad de operador en Visual Basic
Operadores enumerados por funcionalidad
Instrucciones
Operadores de comparación (Visual Basic)
27/11/2019 • 10 minutes to read • Edit Online
Sintaxis
result = expression1 comparisonoperator expression2
result = object1 [Is | IsNot] object2
result = string Like pattern
Elementos
result
Obligatorio. Boolean valor que representa el resultado de la comparación.
expression1 , expression2
Obligatorio. Cualquier expresión.
comparisonoperator
Obligatorio. Cualquier operador de comparación relacional.
object1 , object2
Obligatorio. Cualquier nombre de objeto de referencia.
string
Obligatorio. Cualquier expresión String .
pattern
Obligatorio. Cualquier expresión String o intervalo de caracteres.
Comentarios
La tabla siguiente contiene una lista de los operadores de comparación relacionales y las condiciones que
determinan si result es True o False .
<= (menor o igual que) expression1 <= expression2 expression1 > expression2
>= (mayor o igual que) expression1 >= expression2 expression1 < expression2
NOTE
El operador = también se usa como operador de asignación.
El operador Is , el operador IsNot y el operador Like tienen funcionalidades de comparación específicas que
difieren de los operadores de la tabla anterior.
Comparar números
Al comparar una expresión de tipo Single con una de tipo Double , la expresión de Single se convierte en
Double . Este comportamiento es opuesto al comportamiento que se encuentra en Visual Basic 6.
Del mismo modo, al comparar una expresión de tipo Decimal con una expresión de tipo Single o Double , la
expresión de Decimal se convierte en Single o Double . En el caso de las expresiones Decimal , es posible que se
pierda cualquier valor fraccionario inferior a 1E-28. Esta pérdida de valor fraccionario puede hacer que dos valores
se comparen como iguales cuando no lo son. Por este motivo, debe tener cuidado al utilizar la igualdad ( = ) para
comparar dos variables de punto flotante. Es más seguro probar si el valor absoluto de la diferencia entre los dos
números es menor que una pequeña tolerancia aceptable.
Imprecisión de punto flotante
Al trabajar con números de punto flotante, tenga en cuenta que no siempre tienen una representación precisa en la
memoria. Esto podría dar lugar a resultados inesperados de ciertas operaciones, como la comparación de valores y
el operador mod. Para obtener más información, vea solución de problemas de tipos de datos.
Comparar cadenas
Cuando se comparan cadenas, las expresiones de cadena se evalúan en función de su criterio de ordenación
alfabético, que depende de la configuración Option Compare .
Option Compare Binary basa las comparaciones de cadenas en un criterio de ordenación derivado de las
representaciones binarias internas de los caracteres. La página de códigos determina el criterio de ordenación. En el
ejemplo siguiente se muestra un criterio de ordenación binario típico.
A < B < E < Z < a < b < e < z < À < Ê < Ø < à < ê < ø
Option Compare Text basa las comparaciones de cadenas en un criterio de ordenación textual que no distingue
entre mayúsculas y minúsculas, determinado por la configuración regional de la aplicación. Cuando se establece
Option Compare Text y se ordenan los caracteres en el ejemplo anterior, se aplica el siguiente criterio de ordenación
de texto:
(A=a) < (À= à) < (B=b) < (E=e) < (Ê= ê) < (Ø = ø) < (Z=z)
SI LO S O P ERA N DO S SO N L A C O M PA RA C IÓ N ES
Uno o ambos son tipos de referencia distintos de String Se inicia una InvalidCastException.
Las comparaciones numéricas tratan Nothing como 0. Las comparaciones de cadenas tratan Nothing como ""
(una cadena vacía).
Sobrecarga
Operadores de comparación relacionales ( < . <= , > , >= , = , <> ) se pueden sobrecargar, lo que significa que
una clase o estructura puede volver a definir su comportamiento cuando un operando tiene el tipo de esa clase o
estructura. Si el código usa cualquiera de estos operadores en una clase o estructura de este tipo, asegúrese de que
comprende el comportamiento redefinido. Para obtener más información, consulta Operator Procedures.
Observe que el operador = solo se puede sobrecargar como operador de comparación relacional, no como
operador de asignación.
Ejemplo
En el ejemplo siguiente se muestran varios usos de operadores de comparación relacionales, que se usan para
comparar expresiones. Los operadores de comparación relacional devuelven un resultado Boolean que indica si la
expresión indicada se evalúa como True . Cuando se aplican los operadores > y < a las cadenas, la comparación
se realiza utilizando el criterio de ordenación alfabético normal de las cadenas. Este orden puede depender de la
configuración regional. La ordenación distingue entre mayúsculas y minúsculas o no depende del valor Option
Compare .
Dim x As testClass
Dim y As New testClass()
x = y
If x Is y Then
' Insert code to run if x and y point to the same instance.
End If
En el ejemplo anterior, la primera comparación devuelve False y las comparaciones restantes devuelven True .
Vea también
InvalidCastException
Operador =
Prioridad de operador en Visual Basic
Operadores enumerados por funcionalidad
Solución de problemas de tipos de datos
Operadores de comparación en Visual Basic
Operadores de comparación (Visual Basic)
27/11/2019 • 10 minutes to read • Edit Online
Sintaxis
result = expression1 comparisonoperator expression2
result = object1 [Is | IsNot] object2
result = string Like pattern
Elementos
result
Obligatorio. Boolean valor que representa el resultado de la comparación.
expression1 , expression2
Obligatorio. Cualquier expresión.
comparisonoperator
Obligatorio. Cualquier operador de comparación relacional.
object1 , object2
Obligatorio. Cualquier nombre de objeto de referencia.
string
Obligatorio. Cualquier expresión String .
pattern
Obligatorio. Cualquier expresión String o intervalo de caracteres.
Comentarios
La tabla siguiente contiene una lista de los operadores de comparación relacionales y las condiciones que
determinan si result es True o False .
<= (menor o igual que) expression1 <= expression2 expression1 > expression2
>= (mayor o igual que) expression1 >= expression2 expression1 < expression2
NOTE
El operador = también se usa como operador de asignación.
El operador Is , el operador IsNot y el operador Like tienen funcionalidades de comparación específicas que
difieren de los operadores de la tabla anterior.
Comparar números
Al comparar una expresión de tipo Single con una de tipo Double , la expresión de Single se convierte en
Double . Este comportamiento es opuesto al comportamiento que se encuentra en Visual Basic 6.
Del mismo modo, al comparar una expresión de tipo Decimal con una expresión de tipo Single o Double , la
expresión de Decimal se convierte en Single o Double . En el caso de las expresiones Decimal , es posible que se
pierda cualquier valor fraccionario inferior a 1E-28. Esta pérdida de valor fraccionario puede hacer que dos valores
se comparen como iguales cuando no lo son. Por este motivo, debe tener cuidado al utilizar la igualdad ( = ) para
comparar dos variables de punto flotante. Es más seguro probar si el valor absoluto de la diferencia entre los dos
números es menor que una pequeña tolerancia aceptable.
Imprecisión de punto flotante
Al trabajar con números de punto flotante, tenga en cuenta que no siempre tienen una representación precisa en la
memoria. Esto podría dar lugar a resultados inesperados de ciertas operaciones, como la comparación de valores y
el operador mod. Para obtener más información, vea solución de problemas de tipos de datos.
Comparar cadenas
Cuando se comparan cadenas, las expresiones de cadena se evalúan en función de su criterio de ordenación
alfabético, que depende de la configuración Option Compare .
Option Compare Binary basa las comparaciones de cadenas en un criterio de ordenación derivado de las
representaciones binarias internas de los caracteres. La página de códigos determina el criterio de ordenación. En el
ejemplo siguiente se muestra un criterio de ordenación binario típico.
A < B < E < Z < a < b < e < z < À < Ê < Ø < à < ê < ø
Option Compare Text basa las comparaciones de cadenas en un criterio de ordenación textual que no distingue
entre mayúsculas y minúsculas, determinado por la configuración regional de la aplicación. Cuando se establece
Option Compare Text y se ordenan los caracteres en el ejemplo anterior, se aplica el siguiente criterio de ordenación
de texto:
(A=a) < (À= à) < (B=b) < (E=e) < (Ê= ê) < (Ø = ø) < (Z=z)
SI LO S O P ERA N DO S SO N L A C O M PA RA C IÓ N ES
Uno o ambos son tipos de referencia distintos de String Se inicia una InvalidCastException.
Las comparaciones numéricas tratan Nothing como 0. Las comparaciones de cadenas tratan Nothing como ""
(una cadena vacía).
Sobrecarga
Operadores de comparación relacionales ( < . <= , > , >= , = , <> ) se pueden sobrecargar, lo que significa que
una clase o estructura puede volver a definir su comportamiento cuando un operando tiene el tipo de esa clase o
estructura. Si el código usa cualquiera de estos operadores en una clase o estructura de este tipo, asegúrese de que
comprende el comportamiento redefinido. Para obtener más información, consulta Operator Procedures.
Observe que el operador = solo se puede sobrecargar como operador de comparación relacional, no como
operador de asignación.
Ejemplo
En el ejemplo siguiente se muestran varios usos de operadores de comparación relacionales, que se usan para
comparar expresiones. Los operadores de comparación relacional devuelven un resultado Boolean que indica si la
expresión indicada se evalúa como True . Cuando se aplican los operadores > y < a las cadenas, la comparación
se realiza utilizando el criterio de ordenación alfabético normal de las cadenas. Este orden puede depender de la
configuración regional. La ordenación distingue entre mayúsculas y minúsculas o no depende del valor Option
Compare .
Dim x As testClass
Dim y As New testClass()
x = y
If x Is y Then
' Insert code to run if x and y point to the same instance.
End If
En el ejemplo anterior, la primera comparación devuelve False y las comparaciones restantes devuelven True .
Vea también
InvalidCastException
Operador =
Prioridad de operador en Visual Basic
Operadores enumerados por funcionalidad
Solución de problemas de tipos de datos
Operadores de comparación en Visual Basic
Operadores de comparación (Visual Basic)
27/11/2019 • 10 minutes to read • Edit Online
Sintaxis
result = expression1 comparisonoperator expression2
result = object1 [Is | IsNot] object2
result = string Like pattern
Elementos
result
Obligatorio. Boolean valor que representa el resultado de la comparación.
expression1 , expression2
Obligatorio. Cualquier expresión.
comparisonoperator
Obligatorio. Cualquier operador de comparación relacional.
object1 , object2
Obligatorio. Cualquier nombre de objeto de referencia.
string
Obligatorio. Cualquier expresión String .
pattern
Obligatorio. Cualquier expresión String o intervalo de caracteres.
Comentarios
La tabla siguiente contiene una lista de los operadores de comparación relacionales y las condiciones que
determinan si result es True o False .
<= (menor o igual que) expression1 <= expression2 expression1 > expression2
>= (mayor o igual que) expression1 >= expression2 expression1 < expression2
NOTE
El operador = también se usa como operador de asignación.
El operador Is , el operador IsNot y el operador Like tienen funcionalidades de comparación específicas que
difieren de los operadores de la tabla anterior.
Comparar números
Al comparar una expresión de tipo Single con una de tipo Double , la expresión de Single se convierte en
Double . Este comportamiento es opuesto al comportamiento que se encuentra en Visual Basic 6.
Del mismo modo, al comparar una expresión de tipo Decimal con una expresión de tipo Single o Double , la
expresión de Decimal se convierte en Single o Double . En el caso de las expresiones Decimal , es posible que se
pierda cualquier valor fraccionario inferior a 1E-28. Esta pérdida de valor fraccionario puede hacer que dos valores
se comparen como iguales cuando no lo son. Por este motivo, debe tener cuidado al utilizar la igualdad ( = ) para
comparar dos variables de punto flotante. Es más seguro probar si el valor absoluto de la diferencia entre los dos
números es menor que una pequeña tolerancia aceptable.
Imprecisión de punto flotante
Al trabajar con números de punto flotante, tenga en cuenta que no siempre tienen una representación precisa en la
memoria. Esto podría dar lugar a resultados inesperados de ciertas operaciones, como la comparación de valores y
el operador mod. Para obtener más información, vea solución de problemas de tipos de datos.
Comparar cadenas
Cuando se comparan cadenas, las expresiones de cadena se evalúan en función de su criterio de ordenación
alfabético, que depende de la configuración Option Compare .
Option Compare Binary basa las comparaciones de cadenas en un criterio de ordenación derivado de las
representaciones binarias internas de los caracteres. La página de códigos determina el criterio de ordenación. En el
ejemplo siguiente se muestra un criterio de ordenación binario típico.
A < B < E < Z < a < b < e < z < À < Ê < Ø < à < ê < ø
Option Compare Text basa las comparaciones de cadenas en un criterio de ordenación textual que no distingue
entre mayúsculas y minúsculas, determinado por la configuración regional de la aplicación. Cuando se establece
Option Compare Text y se ordenan los caracteres en el ejemplo anterior, se aplica el siguiente criterio de ordenación
de texto:
(A=a) < (À= à) < (B=b) < (E=e) < (Ê= ê) < (Ø = ø) < (Z=z)
SI LO S O P ERA N DO S SO N L A C O M PA RA C IÓ N ES
Uno o ambos son tipos de referencia distintos de String Se inicia una InvalidCastException.
Las comparaciones numéricas tratan Nothing como 0. Las comparaciones de cadenas tratan Nothing como ""
(una cadena vacía).
Sobrecarga
Operadores de comparación relacionales ( < . <= , > , >= , = , <> ) se pueden sobrecargar, lo que significa que
una clase o estructura puede volver a definir su comportamiento cuando un operando tiene el tipo de esa clase o
estructura. Si el código usa cualquiera de estos operadores en una clase o estructura de este tipo, asegúrese de que
comprende el comportamiento redefinido. Para obtener más información, consulta Operator Procedures.
Observe que el operador = solo se puede sobrecargar como operador de comparación relacional, no como
operador de asignación.
Ejemplo
En el ejemplo siguiente se muestran varios usos de operadores de comparación relacionales, que se usan para
comparar expresiones. Los operadores de comparación relacional devuelven un resultado Boolean que indica si la
expresión indicada se evalúa como True . Cuando se aplican los operadores > y < a las cadenas, la comparación
se realiza utilizando el criterio de ordenación alfabético normal de las cadenas. Este orden puede depender de la
configuración regional. La ordenación distingue entre mayúsculas y minúsculas o no depende del valor Option
Compare .
Dim x As testClass
Dim y As New testClass()
x = y
If x Is y Then
' Insert code to run if x and y point to the same instance.
End If
En el ejemplo anterior, la primera comparación devuelve False y las comparaciones restantes devuelven True .
Vea también
InvalidCastException
Operador =
Prioridad de operador en Visual Basic
Operadores enumerados por funcionalidad
Solución de problemas de tipos de datos
Operadores de comparación en Visual Basic
Operadores de comparación (Visual Basic)
27/11/2019 • 10 minutes to read • Edit Online
Sintaxis
result = expression1 comparisonoperator expression2
result = object1 [Is | IsNot] object2
result = string Like pattern
Elementos
result
Obligatorio. Boolean valor que representa el resultado de la comparación.
expression1 , expression2
Obligatorio. Cualquier expresión.
comparisonoperator
Obligatorio. Cualquier operador de comparación relacional.
object1 , object2
Obligatorio. Cualquier nombre de objeto de referencia.
string
Obligatorio. Cualquier expresión String .
pattern
Obligatorio. Cualquier expresión String o intervalo de caracteres.
Comentarios
La tabla siguiente contiene una lista de los operadores de comparación relacionales y las condiciones que
determinan si result es True o False .
<= (menor o igual que) expression1 <= expression2 expression1 > expression2
>= (mayor o igual que) expression1 >= expression2 expression1 < expression2
NOTE
El operador = también se usa como operador de asignación.
Comparar números
Al comparar una expresión de tipo Single con una de tipo Double , la expresión de Single se convierte en
Double . Este comportamiento es opuesto al comportamiento que se encuentra en Visual Basic 6.
Del mismo modo, al comparar una expresión de tipo Decimal con una expresión de tipo Single o Double ,
la expresión de Decimal se convierte en Single o Double . En el caso de las expresiones Decimal , es posible
que se pierda cualquier valor fraccionario inferior a 1E-28. Esta pérdida de valor fraccionario puede hacer
que dos valores se comparen como iguales cuando no lo son. Por este motivo, debe tener cuidado al utilizar
la igualdad ( = ) para comparar dos variables de punto flotante. Es más seguro probar si el valor absoluto de
la diferencia entre los dos números es menor que una pequeña tolerancia aceptable.
Imprecisión de punto flotante
Al trabajar con números de punto flotante, tenga en cuenta que no siempre tienen una representación
precisa en la memoria. Esto podría dar lugar a resultados inesperados de ciertas operaciones, como la
comparación de valores y el operador mod. Para obtener más información, vea solución de problemas de
tipos de datos.
Comparar cadenas
Cuando se comparan cadenas, las expresiones de cadena se evalúan en función de su criterio de ordenación
alfabético, que depende de la configuración Option Compare .
Option Compare Binary basa las comparaciones de cadenas en un criterio de ordenación derivado de las
representaciones binarias internas de los caracteres. La página de códigos determina el criterio de
ordenación. En el ejemplo siguiente se muestra un criterio de ordenación binario típico.
A < B < E < Z < a < b < e < z < À < Ê < Ø < à < ê < ø
Option Compare Text basa las comparaciones de cadenas en un criterio de ordenación textual que no
distingue entre mayúsculas y minúsculas, determinado por la configuración regional de la aplicación. Cuando
se establece Option Compare Text y se ordenan los caracteres en el ejemplo anterior, se aplica el siguiente
criterio de ordenación de texto:
(A=a) < (À= à) < (B=b) < (E=e) < (Ê= ê) < (Ø = ø) < (Z=z)
SI LO S O P ERA N DO S SO N L A C O M PA RA C IÓ N ES
Uno o ambos son tipos de referencia distintos de String Se inicia una InvalidCastException.
Las comparaciones numéricas tratan Nothing como 0. Las comparaciones de cadenas tratan Nothing como
"" (una cadena vacía).
Sobrecarga
Operadores de comparación relacionales ( < . <= , > , >= , = , <> ) se pueden sobrecargar, lo que significa
que una clase o estructura puede volver a definir su comportamiento cuando un operando tiene el tipo de
esa clase o estructura. Si el código usa cualquiera de estos operadores en una clase o estructura de este tipo,
asegúrese de que comprende el comportamiento redefinido. Para obtener más información, consulta
Operator Procedures.
Observe que el operador = solo se puede sobrecargar como operador de comparación relacional, no como
operador de asignación.
Ejemplo
En el ejemplo siguiente se muestran varios usos de operadores de comparación relacionales, que se usan
para comparar expresiones. Los operadores de comparación relacional devuelven un resultado Boolean que
indica si la expresión indicada se evalúa como True . Cuando se aplican los operadores > y < a las
cadenas, la comparación se realiza utilizando el criterio de ordenación alfabético normal de las cadenas. Este
orden puede depender de la configuración regional. La ordenación distingue entre mayúsculas y minúsculas
o no depende del valor Option Compare .
Dim x As testClass
Dim y As New testClass()
x = y
If x Is y Then
' Insert code to run if x and y point to the same instance.
End If
En el ejemplo anterior, la primera comparación devuelve False y las comparaciones restantes devuelven
True .
Vea también
InvalidCastException
Operador =
Prioridad de operador en Visual Basic
Operadores enumerados por funcionalidad
Solución de problemas de tipos de datos
Operadores de comparación en Visual Basic
Operador de < de <(Visual Basic)
27/11/2019 • 4 minutes to read • Edit Online
Sintaxis
result = pattern << amount
Elementos
result
Obligatorio. Valor numérico entero. Resultado de desplazar el modelo de bits. El tipo de datos es el mismo que el
de pattern .
pattern
Obligatorio. Expresión numérica entera. Patrón de bits que se va a desplazar. El tipo de datos debe ser un tipo
entero ( SByte , Byte , Short , UShort , Integer , UInteger , Long o ULong ).
amount
Obligatorio. Expresión numérica. Número de bits que se va a desplazar el modelo de bits. El tipo de datos debe
Integer se o ampliarse a Integer .
Comentarios
Los turnos aritméticos no son circulares, lo que significa que los bits desplazados fuera de un extremo del
resultado no se reintroducen en el otro extremo. En un desplazamiento aritmético a la izquierda, los bits
desplazados más allá del intervalo del tipo de datos del resultado se descartan y las posiciones de bits que quedan
a la derecha se establecen en cero.
Para evitar un desplazamiento por más bits del que puede contener el resultado, Visual Basic enmascara el valor
de amount con una máscara de tamaño correspondiente al tipo de datos de pattern . El binario y estos valores se
usan para la cantidad de desplazamiento. Las máscaras de tamaño son las siguientes:
M Á SC A RA DE TA M A Ñ O
T IP O DE DATO S DE PATTERN M Á SC A RA DE TA M A Ñ O ( DEC IM A L ) ( H EXA DEC IM A L )
Si amount es cero, el valor de result es idéntico al valor de pattern . Si amount es negativo, se toma como un
valor sin signo y se enmascara con la máscara de tamaño adecuada.
Los desplazamientos aritméticos nunca generan excepciones de desbordamiento.
NOTE
El operador de << se puede sobrecargar, lo que significa que una clase o estructura puede volver a definir su
comportamiento cuando un operando tiene el tipo de esa clase o estructura. Si el código usa este operador en una clase o
estructura de este tipo, asegúrese de que entiende su comportamiento redefinido. Para obtener más información, consulta
Operator Procedures.
Ejemplo
En el ejemplo siguiente se usa el operador << para realizar los desplazamientos aritméticos a la izquierda en
valores enteros. El resultado siempre tiene el mismo tipo de datos que la expresión que se está desplazando.
Vea también
Operadores de desplazamiento de bits
Operadores de asignación
Operador <<=
Prioridad de operador en Visual Basic
Operadores enumerados por funcionalidad
Operadores aritméticos en Visual Basic
<<= operador (Visual Basic)
27/11/2019 • 3 minutes to read • Edit Online
Realiza un desplazamiento aritmético a la izquierda en el valor de una variable o propiedad y asigna el resultado a
la variable o propiedad.
Sintaxis
variableorproperty <<= amount
Elementos
variableorproperty
Obligatorio. Variable o propiedad de un tipo entero ( SByte , Byte , Short , UShort , Integer , UInteger , Long o
ULong ).
amount
Obligatorio. Expresión numérica de un tipo de datos que se amplía a Integer .
Comentarios
El elemento del lado izquierdo del operador <<= puede ser una variable escalar simple, una propiedad o un
elemento de una matriz. La variable o la propiedad no pueden ser de solo lectura.
El operador <<= primero realiza un desplazamiento aritmético a la izquierda en el valor de la variable o
propiedad. A continuación, el operador asigna de nuevo el resultado de la operación a esa variable o propiedad.
Los turnos aritméticos no son circulares, lo que significa que los bits desplazados fuera de un extremo del
resultado no se reintroducen en el otro extremo. En un desplazamiento aritmético a la izquierda, los bits
desplazados más allá del intervalo del tipo de datos del resultado se descartan y las posiciones de bits que quedan
a la derecha se establecen en cero.
Sobrecarga
Se puede sobrecargarel operador < < , lo que significa que una clase o estructura puede volver a definir su
comportamiento cuando un operando tiene el tipo de esa clase o estructura. La sobrecarga del operador <<
afecta al comportamiento del operador <<= . Si el código usa <<= en una clase o estructura que sobrecarga << ,
asegúrese de que entiende su comportamiento redefinido. Para obtener más información, consulta Operator
Procedures.
Ejemplo
En el ejemplo siguiente se usa el operador <<= para desplazar el modelo de bits de una variable de Integer a la
izquierda en la cantidad especificada y asignar el resultado a la variable.
Sintaxis
result = pattern >> amount
Elementos
result
Obligatorio. Valor numérico entero. Resultado de desplazar el modelo de bits. El tipo de datos es el mismo que el
de pattern .
pattern
Obligatorio. Expresión numérica entera. Patrón de bits que se va a desplazar. El tipo de datos debe ser un tipo
entero ( SByte , Byte , Short , UShort , Integer , UInteger , Long o ULong ).
amount
Obligatorio. Expresión numérica. Número de bits que se va a desplazar el modelo de bits. El tipo de datos debe
Integer se o ampliarse a Integer .
Comentarios
Los turnos aritméticos no son circulares, lo que significa que los bits desplazados fuera de un extremo del
resultado no se reintroducen en el otro extremo. En un desplazamiento aritmético a la derecha, se descartan los
bits desplazados más allá de la posición del bit más a la derecha y el bit de la izquierda (signo) se propaga a las
posiciones de bits que quedan a la izquierda. Esto significa que si pattern tiene un valor negativo, las posiciones
vacantes se establecen en uno; de lo contrario, se establecen en cero.
Tenga en cuenta que los tipos de datos Byte , UShort , UInteger y ULong no tienen signo, por lo que no hay
ningún bit de signo que propagar. Si pattern es de cualquier tipo sin signo, las posiciones vacías siempre se
establecen en cero.
Para evitar el desplazamiento por más bits del que puede contener el resultado, Visual Basic enmascara el valor de
amount con una máscara de tamaño correspondiente al tipo de datos de pattern . El binario y estos valores se
usan para la cantidad de desplazamiento. Las máscaras de tamaño son las siguientes:
M Á SC A RA DE TA M A Ñ O
T IP O DE DATO S DE PATTERN M Á SC A RA DE TA M A Ñ O ( DEC IM A L ) ( H EXA DEC IM A L )
Sobrecarga
El operador de >> se puede sobrecargar, lo que significa que una clase o estructura puede volver a definir su
comportamiento cuando un operando tiene el tipo de esa clase o estructura. Si el código usa este operador en una
clase o estructura de este tipo, asegúrese de entender su comportamiento redefinido. Para obtener más
información, consulta Operator Procedures.
Ejemplo
En el ejemplo siguiente se usa el operador >> para realizar los desplazamientos aritméticos a la derecha en los
valores enteros. El resultado siempre tiene el mismo tipo de datos que la expresión que se está desplazando.
Vea también
Operadores de desplazamiento de bits
Operadores de asignación
Operador >>=
Prioridad de operador en Visual Basic
Operadores enumerados por funcionalidad
Operadores aritméticos en Visual Basic
> > = operador (Visual Basic)
27/11/2019 • 3 minutes to read • Edit Online
Realiza un desplazamiento aritmético a la derecha en el valor de una variable o propiedad y asigna el resultado a
la variable o propiedad.
Sintaxis
variableorproperty >>= amount
Elementos
variableorproperty
Obligatorio. Variable o propiedad de un tipo entero ( SByte , Byte , Short , UShort , Integer , UInteger , Long o
ULong ).
amount
Obligatorio. Expresión numérica de un tipo de datos que se amplía a Integer .
Comentarios
El elemento del lado izquierdo del operador >>= puede ser una variable escalar simple, una propiedad o un
elemento de una matriz. La variable o la propiedad no pueden ser de solo lectura.
El operador >>= primero realiza un desplazamiento aritmético a la derecha en el valor de la variable o propiedad.
A continuación, el operador asigna el resultado de la operación a la variable o propiedad.
Los turnos aritméticos no son circulares, lo que significa que los bits desplazados fuera de un extremo del
resultado no se reintroducen en el otro extremo. En un desplazamiento aritmético a la derecha, se descartan los
bits desplazados más allá de la posición de bit situada más a la derecha y el bit del extremo izquierdo se propaga a
las posiciones de bits que quedan a la izquierda. Esto significa que si variableorproperty tiene un valor negativo,
las posiciones vacantes se establecen en una. Si variableorproperty es positivo, o si su tipo de datos es un tipo sin
signo, las posiciones vacías se establecen en cero.
Sobrecarga
Se puede sobrecargarel operador > > , lo que significa que una clase o estructura puede volver a definir su
comportamiento cuando un operando tiene el tipo de esa clase o estructura. La sobrecarga del operador >>
afecta al comportamiento del operador >>= . Si el código usa >>= en una clase o estructura que sobrecarga >> ,
asegúrese de que entiende su comportamiento redefinido. Para obtener más información, consulta Operator
Procedures.
Ejemplo
En el ejemplo siguiente se usa el operador >>= para desplazar el modelo de bits de una variable de Integer a la
derecha la cantidad especificada y asignar el resultado a la variable.
Dim var As Integer = 10
Dim shift As Integer = 2
var >>= shift
' The value of var is now 2 (two bits were lost off the right end).
Vea también
Operador >>
Operadores de asignación
Operadores de desplazamiento de bits
Prioridad de operador en Visual Basic
Operadores enumerados por funcionalidad
Instrucciones
/ (Operador, Visual Basic)
27/11/2019 • 4 minutes to read • Edit Online
Sintaxis
expression1 / expression2
Elementos
expression1
Obligatorio. Cualquier expresión numérica.
expression2
Obligatorio. Cualquier expresión numérica.
Tipos admitidos
Todos los tipos numéricos, incluidos los tipos de punto flotante y sin signo y Decimal .
Resultado
El resultado es el cociente completo de expression1 dividido por expression2 , incluido el resto.
El operador \ (Visual Basic) devuelve el cociente entero, que quita el resto.
Comentarios
El tipo de datos del resultado depende de los tipos de los operandos. En la tabla siguiente se muestra cómo se
determina el tipo de datos del resultado.
Antes de que se realice la división, las expresiones numéricas enteras se amplían a Double . Si asigna el resultado
a un tipo de datos entero, Visual Basic intenta convertir el resultado de Double a ese tipo. Esto puede producir
una excepción si el resultado no cabe en ese tipo. En concreto, vea "se ha intentado la división por cero" en esta
página de ayuda.
Si expression1 o expression2 se evalúa como Nothing, se trata como cero.
Entero (con signo o sin signo) Al intentar realizar la conversión de nuevo a un tipo entero se
produce OverflowException porque los tipos enteros no
pueden aceptar PositiveInfinity, NegativeInfinityo NaN
NOTE
El operador de / se puede sobrecargar, lo que significa que una clase o estructura puede volver a definir su
comportamiento cuando un operando tiene el tipo de esa clase o estructura. Si el código usa este operador en una clase o
estructura de este tipo, asegúrese de entender su comportamiento redefinido. Para obtener más información, consulta
Operator Procedures.
Ejemplo
En este ejemplo se usa el operador / para realizar una división de punto flotante. El resultado es el cociente de
los dos operandos.
Las expresiones del ejemplo anterior devuelven los valores 2,5 y 3,333333. Tenga en cuenta que el resultado es
siempre de punto flotante ( Double ), aunque ambos operandos son constantes de tipo entero.
Vea también
/= (Operador) (Visual Basic)
Operador (Visual Basic)
Tipos de datos de resultados de operador
Operadores aritméticos
Prioridad de operador en Visual Basic
Operadores enumerados por funcionalidad
Operadores aritméticos en Visual Basic
/= (Operador, Visual Basic)
27/11/2019 • 3 minutes to read • Edit Online
Divide el valor de una variable o propiedad por el valor de una expresión y asigna el resultado de punto flotante a
la variable o propiedad.
Sintaxis
variableorproperty /= expression
Elementos
variableorproperty
Obligatorio. Cualquier variable o propiedad numérica.
expression
Obligatorio. Cualquier expresión numérica.
Comentarios
El elemento del lado izquierdo del operador /= puede ser una variable escalar simple, una propiedad o un
elemento de una matriz. La variable o la propiedad no pueden ser de solo lectura.
El operador /= divide primero el valor de la variable o propiedad (en el lado izquierdo del operador) por el valor
de la expresión (en el lado derecho del operador). A continuación, el operador asigna el resultado de punto
flotante de esa operación a la variable o propiedad.
Esta instrucción asigna un valor Double a la variable o propiedad de la izquierda. Si Option Strict es On ,
variableorproperty debe ser Double . Si Option Strict es Off , Visual Basic realiza una conversión implícita y
asigna el valor resultante a variableorproperty , con un posible error en tiempo de ejecución. Para obtener más
información, vea conversiones de ampliación y restricción y Option Strict (instrucción).
Sobrecarga
El operador/(Visual Basic) se puede sobrecargar, lo que significa que una clase o estructura puede volver a definir
su comportamiento cuando un operando tiene el tipo de esa clase o estructura. La sobrecarga del operador /
afecta al comportamiento del operador /= . Si el código usa /= en una clase o estructura que sobrecarga / ,
asegúrese de que entiende su comportamiento redefinido. Para obtener más información, consulta Operator
Procedures.
Ejemplo
En el ejemplo siguiente se usa el operador /= para dividir una variable Integer por un segundo y asignar el
cociente a la primera variable.
Sintaxis
expression1 \ expression2
Elementos
expression1
Obligatorio. Cualquier expresión numérica.
expression2
Obligatorio. Cualquier expresión numérica.
Tipos admitidos
Todos los tipos numéricos, incluidos los tipos de punto flotante y sin signo y Decimal .
Resultado
El resultado es el cociente entero de expression1 dividida por expression2 , que descarta cualquier resto y solo
conserva la parte entera. Esto se conoce como truncamiento.
El tipo de datos del resultado es un tipo numérico adecuado para los tipos de datos de expression1 y
expression2 . Vea las tablas "aritmética de enteros" en tipos de datos de resultados de operadores.
El operador/(Visual Basic) devuelve el cociente completo, que conserva el resto de la parte fraccionaria.
Comentarios
Antes de realizar la división, Visual Basic intenta convertir cualquier expresión numérica de punto flotante en
Long . Si Option Strict se On , se produce un error del compilador. Si Option Strict se Off , es posible un
OverflowException si el valor está fuera del intervalo del tipo de datos Long. La conversión a Long también está
sujeta a redondeo bancario. Para obtener más información, vea "partes fraccionarias" en funciones de
conversión de tipos.
Si expression1 o expression2 se evalúa como Nothing, se trata como cero.
Ejemplo
En el ejemplo siguiente se usa el operador \ para realizar la división de enteros. El resultado es un entero que
representa el cociente entero de los dos operandos, con el resto descartado.
Las expresiones del ejemplo anterior devuelven los valores 2, 3, 33 y-22, respectivamente.
Vea también
\= (operador)
Operador/(Visual Basic)
Option Strict (instrucción)
Operadores aritméticos
Prioridad de operador en Visual Basic
Operadores enumerados por funcionalidad
Operadores aritméticos en Visual Basic
\= (operador)
27/11/2019 • 2 minutes to read • Edit Online
Divide el valor de una variable o propiedad por el valor de una expresión y asigna el resultado entero a la variable
o propiedad.
Sintaxis
variableorproperty \= expression
Elementos
variableorproperty
Obligatorio. Cualquier variable o propiedad numérica.
expression
Obligatorio. Cualquier expresión numérica.
Comentarios
El elemento del lado izquierdo del operador \= puede ser una variable escalar simple, una propiedad o un
elemento de una matriz. La variable o la propiedad no pueden ser de solo lectura.
El operador \= divide el valor de una variable o propiedad a su izquierda por el valor de su derecha, y asigna el
resultado entero a la variable o propiedad de su izquierda.
Para obtener más información sobre la división de enteros, vea \ (operador Visual Basic).
Sobrecarga
El operador de \ se puede sobrecargar, lo que significa que una clase o estructura puede volver a definir su
comportamiento cuando un operando tiene el tipo de esa clase o estructura. La sobrecarga del operador \
afecta al comportamiento del operador \= . Si el código usa \= en una clase o estructura que sobrecarga \ ,
asegúrese de que entiende su comportamiento redefinido. Para obtener más información, consulta Operator
Procedures.
Ejemplo
En el ejemplo siguiente se usa el operador \= para dividir una variable Integer por un segundo y asignar el
resultado entero a la primera variable.
Vea también
Operador (Visual Basic)
/= (Operador) (Visual Basic)
Operadores de asignación
Operadores aritméticos
Prioridad de operador en Visual Basic
Operadores enumerados por funcionalidad
Instrucciones
^ (Operador, Visual Basic)
27/11/2019 • 3 minutes to read • Edit Online
Sintaxis
number ^ exponent
Elementos
number
Obligatorio. Cualquier expresión numérica.
exponent
Obligatorio. Cualquier expresión numérica.
Resultado
El resultado es number elevado a la potencia de exponent , siempre como un valor de Double .
Tipos admitidos
Double . Los operandos de cualquier tipo diferente se convierten en Double .
Comentarios
Visual Basic siempre realiza la exponenciación en el tipo de datos Double.
El valor de exponent puede ser fraccionario, negativo o ambos.
Cuando se realiza más de una exponenciación en una sola expresión, el operador de ^ se evalúa como se
encuentra de izquierda a derecha.
NOTE
El operador de ^ se puede sobrecargar, lo que significa que una clase o estructura puede volver a definir su
comportamiento cuando un operando tiene el tipo de esa clase o estructura. Si el código usa este operador en una clase o
estructura de este tipo, asegúrese de entender su comportamiento redefinido. Para obtener más información, consulta
Operator Procedures.
Ejemplo
En el ejemplo siguiente se usa el operador ^ para elevar un número a la potencia de un exponente. El resultado
es el primer operando elevado a la potencia del segundo.
Dim exp1, exp2, exp3, exp4, exp5, exp6 As Double
exp1 = 2 ^ 2
exp2 = 3 ^ 3 ^ 3
exp3 = (-5) ^ 3
exp4 = (-5) ^ 4
exp5 = 8 ^ (1.0 / 3.0)
exp6 = 8 ^ (-1.0 / 3.0)
Vea también
Operador ^=
Operadores aritméticos
Prioridad de operador en Visual Basic
Operadores enumerados por funcionalidad
Operadores aritméticos en Visual Basic
^= (Operador, Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Eleva el valor de una variable o propiedad a la potencia de una expresión y asigna el resultado a la variable o
propiedad.
Sintaxis
variableorproperty ^= expression
Elementos
variableorproperty
Obligatorio. Cualquier variable o propiedad numérica.
expression
Obligatorio. Cualquier expresión numérica.
Comentarios
El elemento del lado izquierdo del operador ^= puede ser una variable escalar simple, una propiedad o un
elemento de una matriz. La variable o la propiedad no pueden ser de solo lectura.
El operador ^= primero genera el valor de la variable o la propiedad (en el lado izquierdo del operador) con la
potencia del valor de la expresión (en el lado derecho del operador). A continuación, el operador asigna el
resultado de la operación a la variable o propiedad.
Visual Basic siempre realiza la exponenciación en el tipo de datos Double. Los operandos de cualquier tipo
diferente se convierten en Double y el resultado siempre es Double .
El valor de expression puede ser fraccionario, negativo o ambos.
Sobrecarga
El operador ^ se puede sobrecargar, lo que significa que una clase o estructura puede volver a definir su
comportamiento cuando un operando tiene el tipo de esa clase o estructura. La sobrecarga del operador ^
afecta al comportamiento del operador ^= . Si el código usa ^= en una clase o estructura que sobrecarga ^ ,
asegúrese de que entiende su comportamiento redefinido. Para obtener más información, consulta Operator
Procedures.
Ejemplo
En el ejemplo siguiente se usa el operador ^= para elevar el valor de una variable Integer a la potencia de una
segunda variable y asignar el resultado a la primera variable.
Comprueba el valor del operando izquierdo para null ( Nothing ) antes de realizar una operación de acceso a
miembros ( ?. ) o de índice ( ?() ). Devuelve Nothing si el operando izquierdo se evalúa como Nothing . Tenga en
cuenta que, en las expresiones que normalmente devuelven tipos de valor, el operador condicional null devuelve un
Nullable<T>.
Estos operadores le ayudan a escribir menos código para controlar las comprobaciones de valores NULL,
especialmente cuando desciende en estructuras de datos. Por ejemplo:
Para la comparación, el código alternativo para la primera de estas expresiones sin un operador condicional NULL
es:
A veces es necesario realizar una acción en un objeto que puede ser null, en función del valor de un miembro
booleano en ese objeto (como la propiedad booleana IsAllowedFreeShipping en el ejemplo siguiente):
Puede acortar el código y evitar comprobar manualmente si hay valores NULL mediante el operador condicional
null de la siguiente manera:
Los operadores de condición NULL se cortocircuitan. Si una operación de una cadena de operaciones de índice y
acceso a miembros condicionales devuelve Nothing , se detiene el resto de la ejecución de la cadena. En el ejemplo
siguiente, C(E) no se evalúa si A , B o C se evalúan como Nothing .
A?.B?.C?(E)
Otro uso para el acceso de miembro condicional NULL es invocar delegados de una manera segura para
subprocesos con mucho menos código. En el ejemplo siguiente se definen dos tipos, un NewsBroadcaster y un
NewsReceiver . El delegado de NewsBroadcaster.SendNews envía los elementos de noticias al receptor.
Si no hay ningún elemento en la lista de invocación de SendNews , el delegado de SendNews produce una
NullReferenceException. Antes de los operadores condicionales null, el código como el siguiente garantiza que la
lista de invocación de delegado no se Nothing :
La nueva forma de hacerlo es segura para los subprocesos porque el compilador genera código para evaluar
SendNews solo una vez, manteniendo el resultado en una variable temporal. Debe llamar explícitamente al método
Invoke porque no hay ninguna sintaxis de invocación del delegado null condicional SendNews?(String) .
Vea también
Operadores (Visual Basic)
Guía de programación en Visual Basic
Referencia del lenguaje Visual Basic
?. etc? () operadores condicionales null (Visual Basic)
27/11/2019 • 4 minutes to read • Edit Online
Comprueba el valor del operando izquierdo para null ( Nothing ) antes de realizar una operación de acceso a
miembros ( ?. ) o de índice ( ?() ). Devuelve Nothing si el operando izquierdo se evalúa como Nothing . Tenga en
cuenta que, en las expresiones que normalmente devuelven tipos de valor, el operador condicional null devuelve
un Nullable<T>.
Estos operadores le ayudan a escribir menos código para controlar las comprobaciones de valores NULL,
especialmente cuando desciende en estructuras de datos. Por ejemplo:
Para la comparación, el código alternativo para la primera de estas expresiones sin un operador condicional NULL
es:
A veces es necesario realizar una acción en un objeto que puede ser null, en función del valor de un miembro
booleano en ese objeto (como la propiedad booleana IsAllowedFreeShipping en el ejemplo siguiente):
Puede acortar el código y evitar comprobar manualmente si hay valores NULL mediante el operador condicional
null de la siguiente manera:
Los operadores de condición NULL se cortocircuitan. Si una operación de una cadena de operaciones de índice y
acceso a miembros condicionales devuelve Nothing , se detiene el resto de la ejecución de la cadena. En el ejemplo
siguiente, C(E) no se evalúa si A , B o C se evalúan como Nothing .
A?.B?.C?(E)
Otro uso para el acceso de miembro condicional NULL es invocar delegados de una manera segura para
subprocesos con mucho menos código. En el ejemplo siguiente se definen dos tipos, un NewsBroadcaster y un
NewsReceiver . El delegado de NewsBroadcaster.SendNews envía los elementos de noticias al receptor.
Si no hay ningún elemento en la lista de invocación de SendNews , el delegado de SendNews produce una
NullReferenceException. Antes de los operadores condicionales null, el código como el siguiente garantiza que la
lista de invocación de delegado no se Nothing :
La nueva forma de hacerlo es segura para los subprocesos porque el compilador genera código para evaluar
SendNews solo una vez, manteniendo el resultado en una variable temporal. Debe llamar explícitamente al método
Invoke porque no hay ninguna sintaxis de invocación del delegado null condicional SendNews?(String) .
Vea también
Operadores (Visual Basic)
Guía de programación en Visual Basic
Referencia del lenguaje Visual Basic
AddressOf (Operador) (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Sintaxis
AddressOf procedurename
Elementos
procedurename
Obligatorio. Especifica el procedimiento al que debe hacer referencia el delegado recién creado.
Comentarios
El operador AddressOf crea un delegado que apunta a la función Sub o especificada por procedurename . Cuando
el procedimiento especificado es un método de instancia, el delegado hace referencia tanto a la instancia como
al método. A continuación, cuando se invoca al delegado, se llama al método especificado de la instancia
especificada.
El operador AddressOf se puede usar como operando de un constructor delegado o se puede usar en un
contexto en el que el compilador puede determinar el tipo del delegado.
Ejemplo
En este ejemplo se usa el operador AddressOf para designar un delegado que controle el evento de Click de
un botón.
Ejemplo
En el ejemplo siguiente se usa el operador AddressOf para designar la función de inicio de un subproceso.
Sub UseThread()
Dim t As New System.Threading.Thread(AddressOf CountSheep)
t.Start()
End Sub
Vea también
Declare (instrucción)
Function (instrucción)
Sub (instrucción)
Delegados
And (Operador, Visual Basic)
27/11/2019 • 5 minutes to read • Edit Online
Realiza una conjunción lógica de dos expresiones Boolean o una conjunción bit a bit de dos expresiones
numéricas.
Sintaxis
result = expression1 And expression2
Elementos
result
Obligatorio. Cualquier Boolean o expresión numérica. En la comparación booleana, result es la conjunción
lógica de dos valores Boolean . Para las operaciones bit a bit, result es un valor numérico que representa la
conjunción bit a bit de dos modelos de bits numéricos.
expression1
Obligatorio. Cualquier Boolean o expresión numérica.
expression2
Obligatorio. Cualquier Boolean o expresión numérica.
Comentarios
En la comparación booleana, result se True si y solo si expression1 y expression2 se evalúan como True . En
la tabla siguiente se muestra cómo se determina result .
NOTE
En una comparación booleana, el operador And siempre evalúa ambas expresiones, lo que podría incluir la realización de
llamadas a procedimientos. El operador AndAlso realiza un cortocircuito, lo que significa que si expression1 es False ,
expression2 no se evalúa.
Cuando se aplica a valores numéricos, el operador And realiza una comparación bit a bit de los bits colocados de
forma idéntica en dos expresiones numéricas y establece el bit correspondiente en result según la tabla
siguiente.
SI EL B IT DE EXPRESSION1 ES Y EL B IT DE EXPRESSION2 ES EL B IT DE RESULT ES
1 1 1
1 0 0
0 1 0
0 0 0
NOTE
Puesto que los operadores lógicos y bit a bit tienen una prioridad más baja que otros operadores aritméticos y relacionales,
las operaciones bit a bit deben ir entre paréntesis para garantizar resultados precisos.
Tipos de datos
Si los operandos constan de una expresión de Boolean y una expresión numérica, Visual Basic convierte la
expresión de Boolean en un valor numérico (– 1 para True y 0 para False ) y realiza una operación bit a bit.
Para una comparación booleana, el tipo de datos del resultado es Boolean . En una comparación bit a bit, el tipo
de datos del resultado es un tipo numérico adecuado para los tipos de datos de expression1 y expression2 . Vea
la tabla "comparaciones relacionales y bit a bit" en tipos de datos de resultados de operadores.
NOTE
El operador de And se puede sobrecargar, lo que significa que una clase o estructura puede volver a definir su
comportamiento cuando un operando tiene el tipo de esa clase o estructura. Si el código usa este operador en una clase o
estructura de este tipo, asegúrese de entender su comportamiento redefinido. Para obtener más información, consulta
Operator Procedures.
Ejemplo
En el ejemplo siguiente se usa el operador And para realizar una conjunción lógica entre dos expresiones. El
resultado es un valor Boolean que indica si las dos expresiones son True .
Dim a As Integer = 10
Dim b As Integer = 8
Dim c As Integer = 6
Dim firstCheck, secondCheck As Boolean
firstCheck = a > b And b > c
secondCheck = b > a And b > c
Ejemplo
En el ejemplo siguiente se usa el operador And para realizar una conjunción lógica de los bits individuales de dos
expresiones numéricas. El bit en el patrón del resultado se establece si los bits correspondientes de los operandos
están establecidos en 1.
Dim a As Integer = 10
Dim b As Integer = 8
Dim c As Integer = 6
Dim firstPattern, secondPattern, thirdPattern As Integer
firstPattern = (a And b)
secondPattern = (a And c)
thirdPattern = (b And c)
Vea también
Operadores lógicos y bit a bit (Visual Basic)
Prioridad de operador en Visual Basic
Operadores enumerados por funcionalidad
AndAlso (operador)
Operadores lógicos y bit a bit en Visual Basic
AndAlso (Operador, Visual Basic)
27/11/2019 • 5 minutes to read • Edit Online
Sintaxis
result = expression1 AndAlso expression2
Elementos
T ÉRM IN O DEF IN IC IÓ N
Comentarios
Se dice que una operación lógica es cortocircuitada si el código compilado puede omitir la evaluación de una
expresión en función del resultado de otra expresión. Si el resultado de la primera expresión evaluada determina
el resultado final de la operación, no es necesario evaluar la segunda expresión, porque no puede cambiar el
resultado final. El cortocircuito puede mejorar el rendimiento si la expresión omitida es compleja o si implica
llamadas a procedimientos.
Si ambas expresiones se evalúan como True , se True``result . En la tabla siguiente se muestra cómo se
determina result .
Tipos de datos
El operador AndAlso solo se define para el tipo de datos Boolean. Visual Basic convierte cada operando según
sea necesario para Boolean antes de evaluar la expresión. Si asigna el resultado a un tipo numérico, Visual Basic
lo convierte de Boolean a ese tipo, de modo que False se convierte en 0 y True se vuelve -1 . Para obtener
más información, vea conversiones de tipo booleano.
Sobrecarga
El operador and y el operador IsFalse se pueden sobrecargar, lo que significa que una clase o estructura puede
volver a definir su comportamiento cuando un operando tiene el tipo de esa clase o estructura. La sobrecarga de
los operadores And y IsFalse afecta al comportamiento del operador AndAlso . Si el código utiliza AndAlso en
una clase o estructura que sobrecarga And y IsFalse , asegúrese de entender su comportamiento redefinido.
Para obtener más información, consulta Operator Procedures.
Ejemplo
En el ejemplo siguiente se usa el operador AndAlso para realizar una conjunción lógica entre dos expresiones. El
resultado es un valor Boolean que representa si toda la expresión conunida es true. Si la primera expresión es
False , la segunda no se evalúa.
Dim a As Integer = 10
Dim b As Integer = 8
Dim c As Integer = 6
Dim firstCheck, secondCheck, thirdCheck As Boolean
firstCheck = a > b AndAlso b > c
secondCheck = b > a AndAlso b > c
thirdCheck = a > b AndAlso c > b
En el ejemplo anterior se generan los resultados de True , False y False , respectivamente. En el cálculo de
secondCheck , la segunda expresión no se evalúa porque la primera ya está False . Sin embargo, la segunda
expresión se evalúa en el cálculo de thirdCheck .
Ejemplo
En el ejemplo siguiente se muestra un procedimiento Function que busca un valor determinado entre los
elementos de una matriz. Si la matriz está vacía, o si se ha superado la longitud de la matriz, la instrucción While
no probará el elemento de la matriz con el valor de búsqueda.
Vea también
Operadores lógicos y bit a bit (Visual Basic)
Prioridad de operador en Visual Basic
Operadores enumerados por funcionalidad
And (operador)
IsFalse (operador)
Operadores lógicos y bit a bit en Visual Basic
Await (Operador) (Visual Basic)
15/01/2020 • 7 minutes to read • Edit Online
El operador Await se aplica a un operando de un método asincrónico o a una expresión lambda para
suspender la ejecución del método hasta que la tarea en espera se complete. La tarea representa el trabajo en
curso.
El método en el que se utiliza Await debe tener un modificador Async . Este tipo de método, que se define
mediante el modificador Async y que generalmente contiene una o más expresiones Await , se denomina
método asincrónico.
NOTE
Las palabras clave Async y Await se incluyeron en Visual Studio 2012. Para obtener una introducción a la
programación asincrónica, vea programación asincrónica con Async y Await.
Normalmente, la tarea a la que se aplica el operador Await es el valor devuelto de una llamada a un método
que implementa el modelo asincrónico basado en tareas, es decir, un Task o un Task<TResult>.
En el código siguiente, el método HttpClientGetByteArrayAsync devuelve getContentsTask , un tipo
Task(Of Byte()) . La tarea garantiza que la matriz de bytes real se generará cuando finalice la operación. El
operador Await se aplica a getContentsTask para suspender la ejecución en SumPageSizesAsync hasta que se
complete getContentsTask . Mientras tanto, el control vuelve al llamador de SumPageSizesAsync . Cuando
getContentsTask haya finalizado, la expresión Await se evalúa como una matriz de bytes.
' To use the HttpClient type in desktop apps, you must include a using directive and add a
' reference for the System.Net.Http namespace.
Dim client As HttpClient = New HttpClient()
' . . .
Dim getContentsTask As Task(Of Byte()) = client.GetByteArrayAsync(url)
Dim urlContents As Byte() = Await getContentsTask
' Equivalently, now that you see how it works, you can write the same thing in a single line.
'Dim urlContents As Byte() = Await client.GetByteArrayAsync(url)
' . . .
End Function
IMPORTANT
Para obtener el ejemplo completo, vea Walkthrough: Accessing the Web by Using Async and Await (Tutorial: Acceso a la
web usando Async y Await). Puede descargar el ejemplo desde Ejemplos de código para desarrolladores en el sitio web
de Microsoft. El ejemplo está en el proyecto AsyncWalkthrough_HttpClient.
Si Await se aplica al resultado de una llamada al método que devuelve Task(Of TResult) , el tipo de la
expresión Await será TResult. Si Await se aplica al resultado de una llamada al método que devuelve Task , la
expresión Await no devuelve un valor. En el siguiente ejemplo se ilustra la diferencia.
' Await used with a method that returns a Task(Of TResult).
Dim result As TResult = Await AsyncMethodThatReturnsTaskTResult()
Una expresión o instrucción Await no bloquea el subproceso en el que se ejecuta. En su lugar, hace que el
compilador suscriba el resto del método asincrónico, después de la expresión Await , como una continuación
de la tarea esperada. A continuación, el control vuelve al llamador del método asincrónico. Cuando la tarea se
completa, invoca su continuación y la ejecución del método asincrónico se reanuda donde se quedó.
Una expresión Await solo puede aparecer en el cuerpo de un método envolvente inmediato o una expresión
lambda marcados con el modificador Async . El término Await solo sirve como palabra clave en ese contexto.
En cualquier otra parte, se interpretará como identificador. Dentro del método Async o de la expresión lambda,
una expresión de Await no puede aparecer en una expresión de consulta, en el bloque Catch o Finally de
una instrucción try... Detectar... Finally, en la expresión de variable de control de bucle de un bucle For o
For Each , o en el cuerpo de una instrucción SyncLock .
Excepciones
La mayoría de los métodos asincrónicos devuelven un objeto Task o Task<TResult>. Las propiedades de la tarea
devuelta llevan información acerca de su estado e historial, por ejemplo, si la tarea se ha completado, si el
método asincrónico produjo una excepción o si se ha cancelado y cuál es el resultado final. El operador Await
tiene acceso a esas propiedades.
Si espera un método asincrónico que devuelve una tarea y causa una excepción, el operador Await volverá a
generar la excepción.
Si espera un método asincrónico que devuelve una tarea y se cancela, el operador Await volverá a generar
OperationCanceledException.
Una única tarea en estado de error puede reflejar varias excepciones. Por ejemplo, la tarea podría ser el
resultado de una llamada a Task.WhenAll. Cuando espera dicha tarea, la operación await vuelve a generar
únicamente una de las excepciones. Sin embargo, no se puede predecir cuál de las excepciones se vuelve a
generar.
Para obtener ejemplos de control de errores en métodos asincrónicos, vea try... Detectar... Finally.
Ejemplo
El ejemplo siguiente de Windows Forms muestra el uso de Await en un método asincrónico,
WaitAsynchronouslyAsync . Compare el comportamiento de dicho método con el de WaitSynchronously . Sin un
operador Await , WaitSynchronously se ejecuta sincrónicamente a pesar del uso del modificador Async en su
definición y una llamada a Thread.Sleep en el cuerpo.
Private Async Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
' Call the method that runs asynchronously.
Dim result As String = Await WaitAsynchronouslyAsync()
' The following method runs synchronously, despite the use of Async.
' You cannot move or resize the Form1 window while Thread.Sleep
' is running because the UI thread is blocked.
Public Async Function WaitSynchronously() As Task(Of String)
' Import System.Threading for the Sleep method.
Thread.Sleep(10000)
Return "Finished"
End Function
Vea también
Programación asincrónica con Async y Await
Tutorial: Acceso a Web mediante Async y Await
Async
DirectCast (Operador) (Visual Basic)
27/11/2019 • 3 minutes to read • Edit Online
Comentarios
DirectCast no utiliza las rutinas auxiliares de Visual Basic en tiempo de ejecución para la conversión, por lo que
puede proporcionar un rendimiento algo mejor que CType al convertir a y desde el tipo de datos Object .
La palabra clave DirectCast se utiliza de manera similar a la forma en que se usa la función ctype y la palabra
clave del operador TryCast . Proporcione una expresión como primer argumento y un tipo al que convertirlo
como segundo argumento. DirectCast requiere una relación de herencia o implementación entre los tipos de
datos de los dos argumentos. Esto significa que un tipo debe heredar de o implementar el otro.
Errores y errores
DirectCast genera un error del compilador si detecta que no existe ninguna relación de herencia o de
implementación. Pero la falta de un error del compilador no garantiza una conversión correcta. Si la conversión
deseada es de restricción, podría producirse un error en tiempo de ejecución. Si esto sucede, el tiempo de
ejecución produce un error de InvalidCastException.
TryCast (operador) Solo tipos de referencia Un tipo debe heredar de o No devuelve nada
implementar el otro tipo
Ejemplo
En el ejemplo siguiente se muestran dos usos de DirectCast , uno que produce un error en tiempo de ejecución
y otro que se ejecuta correctamente.
Dim q As Object = 2.37
Dim i As Integer = CType(q, Integer)
' The following conversion fails at run time
Dim j As Integer = DirectCast(q, Integer)
Dim f As New System.Windows.Forms.Form
Dim c As System.Windows.Forms.Control
' The following conversion succeeds.
c = DirectCast(f, System.Windows.Forms.Control)
En el ejemplo anterior, el tipo en tiempo de ejecución de q es Double . CType se realiza correctamente porque
Double se puede convertir en Integer . Sin embargo, se produce un error en el primer DirectCast en tiempo
de ejecución porque el tipo de Double en tiempo de ejecución no tiene ninguna relación de herencia con
Integer , aunque exista una conversión. La segunda DirectCast se realiza correctamente porque convierte de
tipo Form al tipo Control, del que Form hereda.
Vea también
Convert.ChangeType
Conversiones de ampliación y de restricción
Conversiones implícitas y explícitas
Expresión de función (Visual Basic)
08/01/2020 • 5 minutes to read • Edit Online
Declara los parámetros y el código que definen una expresión lambda de función.
Sintaxis
Function ( [ parameterlist ] ) expression
- or -
Function ( [ parameterlist ] )
[ statements ]
End Function
Componentes de
T ÉRM IN O DE ESQ UEM A JSO N
Notas
Una expresión lambda es una función sin un nombre que calcula y devuelve un valor. Puede usar una expresión
lambda en cualquier lugar en el que pueda usar un tipo de delegado, excepto como argumento para
RemoveHandler . Para obtener más información sobre los delegados y el uso de expresiones lambda con delegados,
vea instrucción Delegate y conversión de delegado relajado.
Ejemplo
En los ejemplos siguientes se muestran dos maneras de crear expresiones lambda simples. El primero usa un Dim
para proporcionar un nombre para la función. Para llamar a la función, envíe un valor para el parámetro.
Ejemplo
Como alternativa, puede declarar y ejecutar la función al mismo tiempo.
Ejemplo
A continuación se muestra un ejemplo de una expresión lambda que incrementa su argumento y devuelve el valor.
En el ejemplo se muestra la sintaxis de la expresión lambda de una sola línea y de varias líneas para una función.
Para obtener más ejemplos, consulte expresiones lambda.
Ejemplo
Las expresiones lambda subyacen a muchos de los operadores de consulta en Language-Integrated Query (LINQ)
y se pueden usar explícitamente en las consultas basadas en métodos. En el ejemplo siguiente se muestra una
consulta LINQ típica, seguida de la conversión de la consulta en formato de método.
Dim londonCusts = From cust In db.Customers
Where cust.City = "London"
Select cust
Para obtener más información sobre los métodos de consulta, vea consultas. Para obtener más información acerca
de los operadores de consulta estándar, vea información general sobre operadores de consulta estándar.
Vea también
Function (instrucción)
Expresiones lambda
Operadores y expresiones
Instrucciones
Comparaciones de valores
Expresiones booleanas
If (operador)
Conversión de delegado flexible
GetType (Operador, Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Devuelve un objeto Type para el tipo especificado. El objeto Type proporciona información sobre el tipo, como sus
propiedades, métodos y eventos.
Sintaxis
GetType(typename)
Parámetros
PA RÁ M ET RO DESC RIP C IÓ N
Comentarios
El operador GetType devuelve el objeto Type para el typename especificado. Puede pasar el nombre de cualquier
tipo definido en typename . Entre estas estructuras se incluyen las siguientes:
Cualquier tipo de datos Visual Basic, como Boolean o Date .
Cualquier .NET Framework clase, estructura, módulo o interfaz, como System.ArgumentException o
System.Double.
Cualquier clase, estructura, módulo o interfaz definida por la aplicación.
Cualquier matriz definida por la aplicación.
Cualquier delegado definido por la aplicación.
Cualquier enumeración definida por Visual Basic, la .NET Framework o la aplicación.
Si desea obtener el objeto de tipo de una variable de objeto, use el método Type.GetType.
El operador GetType puede ser útil en las siguientes circunstancias:
Debe tener acceso a los metadatos de un tipo en tiempo de ejecución. El objeto Type proporciona
metadatos, como los miembros de tipo e información de implementación. Necesita esto, por ejemplo, para
reflejarse en un ensamblado. Para obtener más información, consulta System.Reflection.
Desea comparar dos referencias de objeto para ver si hacen referencia a instancias del mismo tipo. Si lo
hacen, GetType devuelve referencias al mismo objeto Type.
Ejemplo
En los siguientes ejemplos se muestra el operador de GetType en uso.
' The following statement returns the Type object for Integer.
MsgBox(GetType(Integer).ToString())
' The following statement returns the Type object for one-dimensional string arrays.
MsgBox(GetType(String()).ToString())
Vea también
Prioridad de operador en Visual Basic
Operadores enumerados por funcionalidad
Operadores y expresiones
GetXmlNamespace (Operador) (Visual Basic)
27/11/2019 • 3 minutes to read • Edit Online
Obtiene el objeto XNamespace que corresponde al prefijo de espacio de nombres XML especificado.
Sintaxis
GetXmlNamespace(xmlNamespacePrefix)
Elementos
xmlNamespacePrefix
Opcional. Cadena que identifica el prefijo del espacio de nombres XML. Si se proporciona, esta cadena debe ser un
identificador XML válido. Para obtener más información, vea nombres de elementos y atributos XML declarados. Si
no se especifica ningún prefijo, se devuelve el espacio de nombres predeterminado. Si no se especifica ningún
espacio de nombres predeterminado, se devuelve el espacio de nombres vacío.
Valor devuelto
Objeto XNamespace que corresponde al prefijo del espacio de nombres XML.
Comentarios
El operador GetXmlNamespace obtiene el XNamespace objeto que corresponde al xmlNamespacePrefix de prefijo de
espacio de nombres XML.
Puede usar prefijos de espacio de nombres XML directamente en literales XML y propiedades de eje XML. Sin
embargo, debe usar el operador GetXmlNamespace para convertir un prefijo de espacio de nombres en un objeto
XNamespace antes de poder usarlo en el código. Puede anexar un nombre de elemento no calificado a un objeto
XNamespace para obtener un objeto XName completo, que requieren muchos métodos LINQ to XML.
Ejemplo
En el ejemplo siguiente se importa ns como un prefijo de espacio de nombres XML. A continuación, usa el prefijo
del espacio de nombres para crear un literal XML y acceder al primer nodo secundario que tiene el nombre
completo ns:phone . A continuación, pasa ese nodo secundario a la subrutina ShowName , que construye un nombre
completo mediante el operador GetXmlNamespace . A continuación, la subrutina ShowName pasa el nombre completo
al método Ancestors para obtener el nodo primario ns:contact .
' Place Imports statements at the top of your program.
Imports <xmlns:ns="http://SomeNamespace">
Module GetXmlNamespaceSample
Sub RunSample()
Dim contact =
<ns:contact>
<ns:name>Patrick Hines</ns:name>
<ns:phone ns:type="home">206-555-0144</ns:phone>
<ns:phone ns:type="work">425-555-0145</ns:phone>
</ns:contact>
ShowName(contact.<ns:phone>(0))
End Sub
End Module
Vea también
Imports (instrucción), espacio de nombres XML
Obtener acceso a XML en Visual Basic
If (Operador) (Visual Basic)
27/03/2020 • 6 minutes to read • Edit Online
Utiliza la evaluación de cortocircuito para devolver condicionalmente uno de dos valores. Se If puede llamar al
operador con tres argumentos o con dos argumentos.
Sintaxis
If( [argument1,] argument2, argument3 )
Un If operador al que se llama IIf con tres argumentos funciona como una función, excepto que utiliza la
evaluación de cortocircuito. Una IIf función siempre evalúa los tres argumentos, mientras que un If operador
que tiene tres argumentos evalúa solo dos de ellos. El If primer argumento se evalúa y el Boolean resultado
True False se convierte como un valor, o . Si el True valor argument2 es , se evalúa y argument3 se devuelve su
valor, pero no se evalúa. Si el valor Boolean de False argument3 la expresión es , se argument2 evalúa y se
devuelve su valor, pero no se evalúa. Los siguientes ejemplos ilustran el uso de If cuando se utilizan tres
argumentos:
' This statement prints TruePart, because the first argument is true.
Console.WriteLine(If(True, "TruePart", "FalsePart"))
' This statement prints FalsePart, because the first argument is false.
Console.WriteLine(If(False, "TruePart", "FalsePart"))
Dim number = 3
' With number set to 3, this statement prints Positive.
Console.WriteLine(If(number >= 0, "Positive", "Negative"))
number = -1
' With number set to -1, this statement prints Negative.
Console.WriteLine(If(number >= 0, "Positive", "Negative"))
En el ejemplo siguiente se muestra el valor de la evaluación de cortocircuitos. El ejemplo muestra dos number
intentos divisor de divisor dividir variable por variable excepto cuando es cero. En ese caso, se debe devolver
un 0 y no se debe intentar realizar la división porque se produciría un error en tiempo de ejecución. Dado If que
la expresión utiliza la evaluación de cortocircuito, evalúa el segundo o el tercer argumento, dependiendo del valor
del primer argumento. Si el primer argumento es true, el divisor no es cero y es seguro evaluar el segundo
argumento y realizar la división. Si el primer argumento es false, solo se evalúa el tercer argumento y se devuelve
un 0. Por lo tanto, cuando el divisor es 0, no se intenta realizar la división y no se produce ningún error. Sin IIf
embargo, dado que no utiliza la evaluación de cortocircuito, el segundo argumento se evalúa incluso cuando el
primer argumento es false. Esto provoca un error de división por cero en tiempo de ejecución.
number = 12
' When the divisor is 0, IIf causes a run-time error, but If does not.
divisor = 0
Console.WriteLine(If(divisor <> 0, number \ divisor, 0))
' Console.WriteLine(IIf(divisor <> 0, number \ divisor, 0))
Cuando Boolean se omite el argumento, el primer argumento debe ser una referencia o un tipo de valor que
acepta valores NULL. Si el primer argumento Nothing se evalúa como , se devuelve el valor del segundo
argumento. En todos los demás casos, se devuelve el valor del primer argumento. En el ejemplo siguiente se
muestra cómo funciona esta evaluación:
' Variable first is a nullable type.
Dim first? As Integer = 3
Dim second As Integer = 6
second = Nothing
' Variable first <> Nothing, so the value of first is returned again.
Console.WriteLine(If(first, second))
first = Nothing
second = 6
' Variable first = Nothing, so 6 is returned.
Console.WriteLine(If(first, second))
Vea también
IIf
Tipos de valores que aceptan valores NULL
Nothing
Is (Operador, Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Sintaxis
result = object1 Is object2
Elementos
result
Obligatorio. Cualquier valor de Boolean .
object1
Obligatorio. Cualquier nombre de Object .
object2
Obligatorio. Cualquier nombre de Object .
Comentarios
El operador Is determina si dos referencias de objeto hacen referencia al mismo objeto. Sin embargo, no
realiza comparaciones de valores. Si object1 y object2 hacen referencia a la misma instancia de objeto
exacta, se True``result . Si no es así, result se False .
también se puede usar Is con la palabra clave TypeOf para crear una expresión TypeOf ... Is , que comprueba
si una variable de objeto es compatible con un tipo de datos.
NOTE
La palabra clave Is también se usa en la Instrucción Case.
Ejemplo
En el ejemplo siguiente se usa el operador Is para comparar pares de referencias a objetos. Los resultados se
asignan a un valor Boolean que representa si los dos objetos son idénticos.
Dim myObject As New Object
Dim otherObject As New Object
Dim yourObject, thisObject, thatObject As Object
Dim myCheck As Boolean
yourObject = myObject
thisObject = myObject
thatObject = otherObject
' The following statement sets myCheck to True.
myCheck = yourObject Is thisObject
' The following statement sets myCheck to False.
myCheck = thatObject Is thisObject
' The following statement sets myCheck to False.
myCheck = myObject Is thatObject
thatObject = myObject
' The following statement sets myCheck to True.
myCheck = thisObject Is thatObject
Como se muestra en el ejemplo anterior, puede utilizar el operador Is para probar los objetos enlazados en
tiempo de compilación y en tiempo de ejecución.
Vea también
TypeOf (operador)
IsNot (operador)
Operadores de comparación en Visual Basic
Prioridad de operador en Visual Basic
Operadores enumerados por funcionalidad
Operadores y expresiones
IsFalse (Operador) (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
NOTE
El operador de IsFalse se puede sobrecargar, lo que significa que una clase o estructura puede volver a definir su
comportamiento cuando su operando tiene el tipo de esa clase o estructura. Si el código usa este operador en una clase o
estructura de este tipo, asegúrese de entender su comportamiento redefinido. Para obtener más información, consulta
Operator Procedures.
Ejemplo
En el ejemplo de código siguiente se define el contorno de una estructura que incluye definiciones para los
operadores IsFalse y IsTrue .
Public Structure p
Dim a As Double
Public Shared Operator IsFalse(ByVal w As p) As Boolean
Dim b As Boolean
' Insert code to calculate IsFalse of w.
Return b
End Operator
Public Shared Operator IsTrue(ByVal w As p) As Boolean
Dim b As Boolean
' Insert code to calculate IsTrue of w.
Return b
End Operator
End Structure
Vea también
IsTrue (operador)
Definir un operador
AndAlso (operador)
IsNot (Operador) (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Sintaxis
result = object1 IsNot object2
Elementos
result Obligatorio. Valor Boolean .
object1 Obligatorio. Cualquier Object variable o expresión.
object2 Obligatorio. Cualquier Object variable o expresión.
Comentarios
El operador IsNot determina si dos referencias de objeto hacen referencia a objetos diferentes. Sin embargo,
no realiza comparaciones de valores. Si object1 y object2 hacen referencia a la misma instancia de objeto
exacta, se False``result . Si no es así, result se True .
IsNot es lo contrario del operador de Is . La ventaja de IsNot es que puede evitar una sintaxis poco
complicada con Not y Is , lo que puede resultar difícil de leer.
Puede usar los operadores Is y IsNot para probar los objetos enlazados en tiempo de compilación y en
tiempo de ejecución.
Ejemplo
En el ejemplo de código siguiente se usa el operador Is y el operador IsNot para realizar la misma
comparación.
Vea también
Is (operador)
TypeOf (operador)
Prioridad de operador en Visual Basic
Comprobar si dos objetos son iguales
IsTrue (Operador) (Visual Basic)
27/11/2019 • 3 minutes to read • Edit Online
NOTE
El operador de IsTrue se puede sobrecargar, lo que significa que una clase o estructura puede volver a definir su
comportamiento cuando su operando tiene el tipo de esa clase o estructura. Si el código usa este operador en una clase o
estructura de este tipo, asegúrese de entender su comportamiento redefinido. Para obtener más información, consulta
Operator Procedures.
Ejemplo
En el ejemplo de código siguiente se define el contorno de una estructura que incluye definiciones para los
operadores IsFalse y IsTrue .
Public Structure p
Dim a As Double
Public Shared Operator IsFalse(ByVal w As p) As Boolean
Dim b As Boolean
' Insert code to calculate IsFalse of w.
Return b
End Operator
Public Shared Operator IsTrue(ByVal w As p) As Boolean
Dim b As Boolean
' Insert code to calculate IsTrue of w.
Return b
End Operator
End Structure
Vea también
IsFalse (operador)
Definir un operador
OrElse (operador)
Like (operador, Visual Basic)
27/11/2019 • 10 minutes to read • Edit Online
IMPORTANT
El operador Like no se admite actualmente en los proyectos de .NET Core y .NET Standard.
Sintaxis
result = string Like pattern
Elementos
result
Obligatorio. Cualquier variable de Boolean . El resultado es un valor Boolean que indica si el string satisface o
no el pattern .
string
Obligatorio. Cualquier expresión String .
pattern
Obligatorio. Cualquier String expresión que se ajuste a las convenciones de coincidencia de patrones descritas
en "Comentarios".
Comentarios
Si el valor de string satisface el patrón incluido en pattern , se True``result . Si la cadena no satisface el
modelo, result se False . Si tanto string como pattern son cadenas vacías, el resultado es True .
Método de comparación
El comportamiento del operador Like depende de la instrucción Option Compare. El método predeterminado
de comparación de cadenas para cada archivo de código fuente es Option Compare Binary .
Opciones de patrón
La coincidencia de patrones integrada proporciona una herramienta versátil para comparaciones de cadenas. Las
características de coincidencia de patrones permiten hacer coincidir cada carácter de string con un carácter
específico, un carácter comodín, una lista de caracteres o un intervalo de caracteres. En la tabla siguiente se
muestran los caracteres permitidos en pattern y en qué coinciden.
Listas de caracteres
Se puede usar un grupo de uno o varios caracteres ( charlist ) entre corchetes ( [ ] ) para buscar coincidencias
con cualquier carácter individual de string y puede incluir prácticamente cualquier código de carácter, incluidos
los dígitos.
Un signo de exclamación ( ! ) al principio de charlist significa que se realiza una coincidencia si se encuentra
algún carácter excepto los caracteres de charlist en string . Cuando se usa fuera de corchetes, el signo de
exclamación coincide con sí mismo.
Caracteres especiales
Para hacer coincidir los caracteres especiales entre corchetes ( [ ), signos de interrogación ( ? ), signo de número
( # ) y asterisco ( * ), escríbalos entre corchetes. El corchete de cierre ( ] ) no se puede usar dentro de un grupo
para que coincida, pero se puede usar fuera de un grupo como un carácter individual.
La [] de la secuencia de caracteres se considera una cadena de longitud cero ( "" ). Sin embargo, no puede
formar parte de una lista de caracteres entre corchetes. Si desea comprobar si una posición en string contiene
uno de un grupo de caracteres o ningún carácter, puede usar Like dos veces. Para obtener un ejemplo, vea
Cómo: buscar coincidencias de una cadena con un patrón.
Intervalos de caracteres
Mediante el uso de un guión ( – ) para separar los límites inferior y superior del intervalo, charlist puede
especificar un intervalo de caracteres. Por ejemplo, [A–Z] da como resultado una coincidencia si la posición de
carácter correspondiente en string contiene cualquier carácter dentro del intervalo A – Z y [!H–L] da como
resultado una coincidencia si la posición del carácter correspondiente contiene algún carácter situado fuera del
intervalo H - L .
Cuando se especifica un intervalo de caracteres, deben aparecer en orden ascendente, es decir, de menor a
mayor. Por lo tanto, [A–Z] es un patrón válido, pero [Z–A] no.
Varios intervalos de caracteres
Para especificar varios intervalos para la misma posición de carácter, colóquelos dentro de los mismos corchetes
sin delimitadores. Por ejemplo, [A–CX–Z] da como resultado una coincidencia si la posición de carácter
correspondiente en string contiene cualquier carácter dentro del intervalo A – C o el intervalo X - Z .
Uso del guión
Un guión ( – ) puede aparecer al principio (después de un signo de exclamación, si existe) o al final de charlist
para que coincida. En cualquier otra ubicación, el guión identifica un intervalo de caracteres delimitado por los
caracteres situados a cada lado del guión.
Secuencia de intercalación
El significado de un intervalo especificado depende del orden de los caracteres en tiempo de ejecución, según
determine Option Compare y la configuración regional del sistema en el que se está ejecutando el código. Con
Option Compare Binary , el intervalo [A–E] coincide con A , B , C , D y E . Con Option Compare Text , [A–E]
coincide con A , a , À , à , B , b , C , c , D , d , E y e . El intervalo no coincide con Ê o ê porque los
caracteres acentuados se intercalan después de los caracteres no acentuados en el criterio de ordenación.
Caracteres de dígrafo
En algunos idiomas, hay caracteres alfabéticos que representan dos caracteres independientes. Por ejemplo,
varios lenguajes usan el æ de caracteres para representar los caracteres a y e cuando aparecen juntos. El
operador Like reconoce que el carácter de un solo gráfico y los dos caracteres individuales son equivalentes.
Cuando se especifica un idioma que usa un carácter de dígrafo en la configuración regional del sistema, una
aparición del carácter de un solo gráfico en pattern o string coincide con la secuencia de dos caracteres
equivalentes de la otra cadena. De forma similar, un carácter de dígrafo en pattern entre corchetes (por sí solo,
en una lista o en un intervalo) coincide con la secuencia de dos caracteres equivalentes en string .
Sobrecarga
El operador de Like se puede sobrecargar, lo que significa que una clase o estructura puede volver a definir su
comportamiento cuando un operando tiene el tipo de esa clase o estructura. Si el código usa este operador en
una clase o estructura de este tipo, asegúrese de entender su comportamiento redefinido. Para obtener más
información, consulta Operator Procedures.
Ejemplo
En este ejemplo se usa el operador Like para comparar cadenas con varios patrones. Los resultados van a una
variable Boolean que indica si cada cadena satisface el patrón.
Dim testCheck As Boolean
' The following statement returns True (does "F" satisfy "F"?)
testCheck = "F" Like "F"
' The following statement returns False for Option Compare Binary
' and True for Option Compare Text (does "F" satisfy "f"?)
testCheck = "F" Like "f"
' The following statement returns False (does "F" satisfy "FFF"?)
testCheck = "F" Like "FFF"
' The following statement returns True (does "aBBBa" have an "a" at the
' beginning, an "a" at the end, and any number of characters in
' between?)
testCheck = "aBBBa" Like "a*a"
' The following statement returns True (does "F" occur in the set of
' characters from "A" through "Z"?)
testCheck = "F" Like "[A-Z]"
' The following statement returns False (does "F" NOT occur in the
' set of characters from "A" through "Z"?)
testCheck = "F" Like "[!A-Z]"
' The following statement returns True (does "a2a" begin and end with
' an "a" and have any single-digit number in between?)
testCheck = "a2a" Like "a#a"
' The following statement returns True (does "aM5b" begin with an "a",
' followed by any character from the set "L" through "P", followed
' by any single-digit number, and end with any character NOT in
' the character set "c" through "e"?)
testCheck = "aM5b" Like "a[L-P]#[!c-e]"
' The following statement returns True (does "BAT123khg" begin with a
' "B", followed by any single character, followed by a "T", and end
' with zero or more characters of any type?)
testCheck = "BAT123khg" Like "B?T*"
' The following statement returns False (does "CAT123khg"?) begin with
' a "B", followed by any single character, followed by a "T", and
' end with zero or more characters of any type?)
testCheck = "CAT123khg" Like "B?T*"
Vea también
InStr
StrComp
Operadores de comparación
Prioridad de operador en Visual Basic
Operadores enumerados por funcionalidad
Option Compare (instrucción)
Operadores y expresiones
Comprobar si una cadena coincide con un modelo
Operador mod (Visual Basic)
27/11/2019 • 6 minutes to read • Edit Online
Sintaxis
result = number1 Mod number2
Elementos
result
Obligatorio. Cualquier variable o propiedad numérica.
number1
Obligatorio. Cualquier expresión numérica.
number2
Obligatorio. Cualquier expresión numérica.
Tipos admitidos
todos los tipos numéricos. Esto incluye los tipos de punto flotante y sin signo y Decimal .
Resultado
El resultado es el resto después de que number1 se divida por number2 . Por ejemplo, la expresión 14 Mod 4 se
evalúa como 2.
NOTE
Hay una diferencia entre el resto y el módulo en las matemáticas, con resultados diferentes para los números negativos.
El operador de Mod en Visual Basic, el operador de op_Modulus de .NET Framework y la instrucción de REM Il
subyacente realizan una operación de resto.
El resultado de una operación de Mod conserva el signo del dividendo, number1 y, por tanto, puede ser positivo
o negativo. El resultado siempre está en el intervalo (- number2 , number2 ), exclusivo. Por ejemplo:
Public Module Example
Public Sub Main()
Console.WriteLine($" 8 Mod 3 = {8 Mod 3}")
Console.WriteLine($"-8 Mod 3 = {-8 Mod 3}")
Console.WriteLine($" 8 Mod -3 = {8 Mod -3}")
Console.WriteLine($"-8 Mod -3 = {-8 Mod -3}")
End Sub
End Module
' The example displays the following output:
' 8 Mod 3 = 2
' -8 Mod 3 = -2
' 8 Mod -3 = 2
' -8 Mod -3 = -2
Comentarios
Si number1 o number2 es un valor de punto flotante, se devuelve el resto del punto flotante de la división. El
tipo de datos del resultado es el tipo de datos más pequeño que puede contener todos los valores posibles que
son el resultado de la división con los tipos de datos de number1 y number2 .
Si number1 o number2 se evalúa como Nothing, se trata como cero.
Entre los operadores relacionados se incluyen los siguientes:
El operador \ (Visual Basic) devuelve el cociente entero de una división. Por ejemplo, la expresión
14 \ 4 se evalúa como 3.
El operador/(Visual Basic) devuelve el cociente completo, incluido el resto, como un número de punto
flotante. Por ejemplo, la expresión 14 / 4 se evalúa como 3,5.
Fórmula equivalente
La expresión a Mod b es equivalente a cualquiera de las siguientes fórmulas:
a - (b * (a \ b))
a - (b * Fix(a / b))
Sobrecarga
El operador de Mod se puede sobrecargar, lo que significa que una clase o estructura puede volver a definir su
comportamiento. Si el código se aplica Mod a una instancia de una clase o estructura que incluya este tipo de
sobrecarga, asegúrese de que comprende su comportamiento redefinido. Para obtener más información,
consulta Operator Procedures.
Ejemplo
En el ejemplo siguiente se usa el operador Mod para dividir dos números y devolver solo el resto. Si cualquier
número es un número de punto flotante, el resultado es un número de punto flotante que representa el resto.
Debug.WriteLine(10 Mod 5)
' Output: 0
Debug.WriteLine(10 Mod 3)
' Output: 1
Debug.WriteLine(-10 Mod 3)
' Output: -1
Debug.WriteLine(12 Mod 4.3)
' Output: 3.4
Debug.WriteLine(12.6 Mod 5)
' Output: 2.6
Debug.WriteLine(47.9 Mod 9.35)
' Output: 1.15
Ejemplo
En el ejemplo siguiente se muestran los posibles imprecisión de operandos de punto flotante. En la primera
instrucción, los operandos son Double y 0,2 es una fracción binaria repetida infinitamente con un valor
almacenado de 0.20000000000000001. En la segunda instrucción, el carácter de tipo literal D fuerza a ambos
operandos a Decimal y 0,2 tiene una representación precisa.
Vea también
Int
Fix
Operadores aritméticos
Prioridad de operador en Visual Basic
Operadores enumerados por funcionalidad
Solución de problemas de tipos de datos
Operadores aritméticos en Visual Basic
Operador (Visual Basic)
Operador de nombre: Visual Basic
07/01/2020 • 2 minutes to read • Edit Online
El operador NameOf obtiene el nombre de una variable, un tipo o un miembro como la constante de cadena:
Como se muestra en el ejemplo anterior, en el caso de un tipo y un espacio de nombres, el nombre generado por
lo general no está completo.
El operador NameOf se evalúa en tiempo de compilación y no tiene efecto en tiempo de ejecución.
Puede usar el operador NameOf para hacer que el código de comprobación de argumentos sea más fácil de
mantener:
Vea también
Referencia del lenguaje Visual Basic
Operadores (Visual Basic)
New (Operador, Visual Basic)
27/11/2019 • 3 minutes to read • Edit Online
Presenta una cláusula New para crear una nueva instancia de objeto, especifica una restricción de constructor
en un parámetro de tipo o identifica un procedimiento Sub como un constructor de clase.
Comentarios
En una declaración o una instrucción de asignación, una cláusula New debe especificar una clase definida a
partir de la cual se pueda crear la instancia. Esto significa que la clase debe exponer uno o más constructores a
los que puede tener acceso el código de llamada.
Puede usar una cláusula New en una instrucción de declaración o una instrucción de asignación. Cuando se
ejecuta la instrucción, llama al constructor adecuado de la clase especificada, pasando los argumentos que ha
proporcionado. En el siguiente ejemplo se muestra la creación de instancias de una clase Customer que tiene
dos constructores, uno que no toma parámetros y otro que toma un parámetro de cadena:
' For customer2, call the constructor that takes the name of the
' customer as an argument.
Dim customer2 As New Customer("Blue Yonder Airlines")
' With Option Infer set to On, the following declaration declares
' and instantiates a new instance of Customer.
Dim customer4 = New Customer("Coho Winery")
Dado que las matrices son clases, New puede crear una nueva instancia de la matriz, como se muestra en el
ejemplo siguiente:
' The following example requires that Option Infer be set to On.
Dim intArray3() = New Integer() {6, 7, 8}
NOTE
La palabra clave New también se usa en las listas de parámetros de tipo para especificar que el tipo proporcionado debe
exponer un constructor sin parámetros accesible. Para obtener más información sobre los parámetros de tipo y las
restricciones, vea Type List.
Para crear un procedimiento de constructor para una clase, establezca el nombre de una Sub procedimiento
en la palabra clave New . Para obtener más información, vea duración del objeto: cómo se crean y destruyen los
objetos.
La palabra clave New se puede usar en los siguientes contextos:
Dim (instrucción)
Of
Sub (instrucción)
Vea también
OutOfMemoryException
Palabras clave
Lista de tipos
Generic Types in Visual Basic
Duración de los objetos: cómo se crean y destruyen
Not (Operador, Visual Basic)
27/11/2019 • 3 minutes to read • Edit Online
Realiza una negación lógica de una expresión de Boolean o una negación bit a bit en una expresión numérica.
Sintaxis
result = Not expression
Elementos
result
Obligatorio. Cualquier Boolean o expresión numérica.
expression
Obligatorio. Cualquier Boolean o expresión numérica.
Comentarios
En el caso de las expresiones Boolean , en la tabla siguiente se muestra cómo se determina result .
SI EXPRESSION ES EL VA LO R DE RESULT ES
True False
False True
En el caso de las expresiones numéricas, el operador Not invierte los valores de bit de cualquier expresión
numérica y establece el bit correspondiente en result según la tabla siguiente.
SI EL B IT DE EXPRESSION ES EL B IT DE RESULT ES
1 0
0 1
NOTE
Puesto que los operadores lógicos y bit a bit tienen una prioridad más baja que otros operadores aritméticos y relacionales,
las operaciones bit a bit deben ir entre paréntesis para garantizar una ejecución precisa.
Tipos de datos
En el caso de una negación booleana, el tipo de datos del resultado es Boolean . En el caso de una negación bit a
bit, el tipo de datos del resultado es el mismo que el de expression . Sin embargo, si la expresión es Decimal , el
resultado es Long .
Sobrecarga
El operador de Not se puede sobrecargar, lo que significa que una clase o estructura puede volver a definir su
comportamiento cuando su operando tiene el tipo de esa clase o estructura. Si el código usa este operador en una
clase o estructura de este tipo, asegúrese de entender su comportamiento redefinido. Para obtener más
información, consulta Operator Procedures.
Ejemplo
En el ejemplo siguiente se usa el operador Not para realizar una negación lógica en una expresión Boolean . El
resultado es un valor Boolean que representa el inverso del valor de la expresión.
Dim a As Integer = 10
Dim b As Integer = 8
Dim c As Integer = 6
Dim firstCheck, secondCheck As Boolean
firstCheck = Not (a > b)
secondCheck = Not (b > a)
Ejemplo
En el ejemplo siguiente se usa el operador Not para realizar la negación lógica de los bits individuales de una
expresión numérica. El bit en el patrón del resultado se establece en la inversa del bit correspondiente en el patrón
de operando, incluido el bit de signo.
Dim a As Integer = 10
Dim b As Integer = 8
Dim c As Integer = 6
Dim firstPattern, secondPattern, thirdPattern As Integer
firstPattern = (Not a)
secondPattern = (Not b)
thirdPattern = (Not c)
Vea también
Operadores lógicos y bit a bit (Visual Basic)
Prioridad de operador en Visual Basic
Operadores enumerados por funcionalidad
Operadores lógicos y bit a bit en Visual Basic
Or (Operador, Visual Basic)
27/11/2019 • 5 minutes to read • Edit Online
Realiza una disyunción lógica entre dos expresiones Boolean , o una disyunción bit a bit entre dos expresiones
numéricas.
Sintaxis
result = expression1 Or expression2
Elementos
result
Obligatorio. Cualquier Boolean o expresión numérica. En Boolean comparación, result es la disyunción lógica
inclusiva de dos valores Boolean . Para las operaciones bit a bit, result es un valor numérico que representa la
disyunción bit a bit inclusiva de dos modelos de bits numéricos.
expression1
Obligatorio. Cualquier Boolean o expresión numérica.
expression2
Obligatorio. Cualquier Boolean o expresión numérica.
Comentarios
Para la comparación de Boolean , result se False si y solo si expression1 y expression2 se evalúan como
False . En la tabla siguiente se muestra cómo se determina result .
NOTE
En una comparación de Boolean , el operador Or siempre evalúa ambas expresiones, lo que podría incluir la realización de
llamadas a procedimientos. El operador OrElse realiza un cortocircuito, lo que significa que si expression1 es True ,
expression2 no se evalúa.
Para las operaciones bit a bit, el operador Or realiza una comparación bit a bit de los bits colocados de forma
idéntica en dos expresiones numéricas y establece el bit correspondiente en result según la tabla siguiente.
SI EL B IT DE EXPRESSION1 ES Y EL B IT DE EXPRESSION2 ES EL B IT DE RESULT ES
1 1 1
1 0 1
0 1 1
0 0 0
NOTE
Puesto que los operadores lógicos y bit a bit tienen una prioridad más baja que otros operadores aritméticos y relacionales,
las operaciones bit a bit deben ir entre paréntesis para garantizar una ejecución precisa.
Tipos de datos
Si los operandos constan de una expresión de Boolean y una expresión numérica, Visual Basic convierte la
expresión de Boolean en un valor numérico (– 1 para True y 0 para False ) y realiza una operación bit a bit.
Para una comparación de Boolean , se Boolean el tipo de datos del resultado. En una comparación bit a bit, el tipo
de datos del resultado es un tipo numérico adecuado para los tipos de datos de expression1 y expression2 . Vea
la tabla "comparaciones relacionales y bit a bit" en tipos de datos de resultados de operadores.
Sobrecarga
El operador de Or se puede sobrecargar, lo que significa que una clase o estructura puede volver a definir su
comportamiento cuando un operando tiene el tipo de esa clase o estructura. Si el código usa este operador en
una clase o estructura de este tipo, asegúrese de entender su comportamiento redefinido. Para obtener más
información, consulta Operator Procedures.
Ejemplo
En el ejemplo siguiente se usa el operador Or para realizar una disyunción lógica inclusiva entre dos expresiones.
El resultado es un valor Boolean que representa si una de las dos expresiones es True .
Dim a As Integer = 10
Dim b As Integer = 8
Dim c As Integer = 6
Dim firstCheck, secondCheck, thirdCheck As Boolean
firstCheck = a > b Or b > c
secondCheck = b > a Or b > c
thirdCheck = b > a Or c > b
Ejemplo
En el ejemplo siguiente se usa el operador Or para realizar una disyunción lógica inclusiva en los bits
individuales de dos expresiones numéricas. El bit del modelo de resultado se establece si alguno de los bits
correspondientes de los operandos se establece en 1.
Dim a As Integer = 10
Dim b As Integer = 8
Dim c As Integer = 6
Dim firstPattern, secondPattern, thirdPattern As Integer
firstPattern = (a Or b)
secondPattern = (a Or c)
thirdPattern = (b Or c)
Vea también
Operadores lógicos y bit a bit (Visual Basic)
Prioridad de operador en Visual Basic
Operadores enumerados por funcionalidad
OrElse (operador)
Operadores lógicos y bit a bit en Visual Basic
OrElse (Operador) (Visual Basic)
27/11/2019 • 4 minutes to read • Edit Online
Sintaxis
result = expression1 OrElse expression2
Elementos
result
Obligatorio. Cualquier expresión Boolean .
expression1
Obligatorio. Cualquier expresión Boolean .
expression2
Obligatorio. Cualquier expresión Boolean .
Comentarios
Se dice que una operación lógica es cortocircuitada si el código compilado puede omitir la evaluación de una
expresión en función del resultado de otra expresión. Si el resultado de la primera expresión evaluada determina
el resultado final de la operación, no es necesario evaluar la segunda expresión, porque no puede cambiar el
resultado final. El cortocircuito puede mejorar el rendimiento si la expresión omitida es compleja o si implica
llamadas a procedimientos.
Si una o ambas expresiones se evalúan como True , result se True . En la tabla siguiente se muestra cómo se
determina result .
Tipos de datos
El operador OrElse solo se define para el tipo de datos Boolean. Visual Basic convierte cada operando según sea
necesario para Boolean antes de evaluar la expresión. Si asigna el resultado a un tipo numérico, Visual Basic lo
convierte de Boolean a ese tipo, de modo que False se convierte en 0 y True se vuelve -1 . Para obtener
más información, vea conversiones de tipo booleano.
Sobrecarga
El operador o y el operador IsTrue se pueden sobrecargar, lo que significa que una clase o estructura puede
volver a definir su comportamiento cuando un operando tiene el tipo de esa clase o estructura. La sobrecarga de
los operadores Or y IsTrue afecta al comportamiento del operador OrElse . Si el código utiliza OrElse en una
clase o estructura que sobrecarga Or y IsTrue , asegúrese de entender su comportamiento redefinido. Para
obtener más información, consulta Operator Procedures.
Ejemplo
En el ejemplo siguiente se usa el operador OrElse para realizar una disyunción lógica entre dos expresiones. El
resultado es un valor Boolean que representa si una de las dos expresiones es true. Si la primera expresión es
True , la segunda no se evalúa.
Dim a As Integer = 10
Dim b As Integer = 8
Dim c As Integer = 6
Dim firstCheck, secondCheck, thirdCheck As Boolean
firstCheck = a > b OrElse b > c
secondCheck = b > a OrElse b > c
thirdCheck = b > a OrElse c > b
En el ejemplo anterior se generan los resultados de True , True y False respectivamente. En el cálculo de
firstCheck , la segunda expresión no se evalúa porque la primera ya está True . Sin embargo, la segunda
expresión se evalúa en el cálculo de secondCheck .
Ejemplo
En el ejemplo siguiente se muestra una instrucción If ... Then que contiene dos llamadas a procedimiento. Si la
primera llamada devuelve True , no se llama al segundo procedimiento. Esto podría producir resultados
inesperados si el segundo procedimiento realiza tareas importantes que siempre deben realizarse cuando se
ejecuta esta sección del código.
Vea también
Operadores lógicos y bit a bit (Visual Basic)
Prioridad de operador en Visual Basic
Operadores enumerados por funcionalidad
OR (operador)
IsTrue (operador)
Operadores lógicos y bit a bit en Visual Basic
Subexpresión (Visual Basic)
27/11/2019 • 3 minutes to read • Edit Online
Declara los parámetros y el código que definen una expresión lambda de subrutina.
Sintaxis
Sub ( [ parameterlist ] ) statement
- or -
Sub ( [ parameterlist ] )
[ statements ]
End Sub
Elementos
T ÉRM IN O DEF IN IC IÓ N
Comentarios
Una expresión lambda es una subrutina que no tiene un nombre y que ejecuta una o más instrucciones. Puede usar
una expresión lambda en cualquier lugar en el que pueda usar un tipo de delegado, excepto como argumento para
RemoveHandler . Para obtener más información sobre los delegados y el uso de expresiones lambda con delegados,
vea instrucción Delegate y conversión de delegado relajado.
Vea también
Sub (instrucción)
Expresiones lambda
Operadores y expresiones
Instrucciones
Conversión de delegado flexible
TryCast (Operador) (Visual Basic)
27/11/2019 • 3 minutes to read • Edit Online
Comentarios
Si se produce un error en una conversión intentó, CType y DirectCast producen un error InvalidCastException.
Esto puede afectar negativamente al rendimiento de la aplicación. TryCast no devuelve nada, de modo que, en
lugar de tener que controlar una posible excepción, solo es necesario probar el resultado devuelto con Nothing .
La palabra clave TryCast se utiliza de la misma manera que se usa la función ctype y la palabra clave del
operador DirectCast . Proporcione una expresión como primer argumento y un tipo al que convertirlo como
segundo argumento. TryCast solo funciona en tipos de referencia, como clases e interfaces. Requiere una
relación de herencia o implementación entre los dos tipos. Esto significa que un tipo debe heredar de o
implementar el otro.
Errores y errores
TryCast genera un error del compilador si detecta que no existe ninguna relación de herencia o de
implementación. Pero la falta de un error del compilador no garantiza una conversión correcta. Si la conversión
deseada es de restricción, podría producirse un error en tiempo de ejecución. Si esto ocurre, TryCast no
devuelve nada.
Ejemplo
En el ejemplo siguiente se muestra cómo utilizar TryCast .
Function PrintTypeCode(ByVal obj As Object) As String
Dim objAsConvertible As IConvertible = TryCast(obj, IConvertible)
If objAsConvertible Is Nothing Then
Return obj.ToString() & " does not implement IConvertible"
Else
Return "Type code is " & objAsConvertible.GetTypeCode()
End If
End Function
Vea también
Conversiones de ampliación y de restricción
Conversiones implícitas y explícitas
TypeOf (Operador, Visual Basic)
27/11/2019 • 3 minutes to read • Edit Online
Comprueba si el tipo en tiempo de ejecución del resultado de una expresión es compatible con el tipo
especificado.
Sintaxis
result = TypeOf objectexpression Is typename
Elementos
result
Devuelto. Valor Boolean .
objectexpression
Obligatorio. Cualquier expresión que se evalúa como un tipo de referencia.
typename
Obligatorio. Cualquier nombre de tipo de datos.
Comentarios
El operador TypeOf determina si el tipo en tiempo de ejecución de objectexpression es compatible con
typename . La compatibilidad depende de la categoría del tipo de typename . En la tabla siguiente se muestra cómo
se determina la compatibilidad.
Ejemplo
En el ejemplo siguiente se usan expresiones TypeOf ... Is para probar la compatibilidad de tipo de dos variables
de referencia de objeto con diversos tipos de datos.
La variable refInteger tiene un tipo en tiempo de ejecución de Integer . Es compatible con Integer pero no con
Double . La variable refForm tiene un tipo en tiempo de ejecución de Form. Es compatible con Form porque es su
tipo, con Control porque Form hereda de Control, y con IComponent porque Form hereda de Component, que
implementa IComponent. Sin embargo, refForm no es compatible con Label.
Vea también
Is (operador)
IsNot (operador)
Operadores de comparación en Visual Basic
Prioridad de operador en Visual Basic
Operadores enumerados por funcionalidad
Operadores y expresiones
Xor (Operador, Visual Basic)
27/11/2019 • 6 minutes to read • Edit Online
Realiza una exclusión lógica en dos expresiones de Boolean o una exclusión bit a bit de dos expresiones
numéricas.
Sintaxis
result = expression1 Xor expression2
Elementos
result
Obligatorio. Cualquier Boolean o variable numérica. En la comparación booleana, result es la exclusión lógica
(disyunción lógica exclusiva) de dos valores Boolean . Para las operaciones bit a bit, result es un valor numérico
que representa la exclusión bit a bit (disyunción bit a bit exclusiva) de dos modelos de bits numéricos.
expression1
Obligatorio. Cualquier Boolean o expresión numérica.
expression2
Obligatorio. Cualquier Boolean o expresión numérica.
Comentarios
En la comparación booleana, result se True si y solo si exactamente uno de expression1 y expression2 se
evalúa como True . Es decir, si y solo si expression1 y expression2 se evalúan como valores de Boolean
opuestos. En la tabla siguiente se muestra cómo se determina result .
NOTE
En una comparación booleana, el operador Xor siempre evalúa ambas expresiones, lo que podría incluir la realización de
llamadas a procedimientos. No hay ningún homólogo de cortocircuito en Xor , porque el resultado siempre depende de
ambos operandos. Para los operadores lógicos de cortocircuito , vea operador AndAlso y operador OrElse.
Para las operaciones bit a bit, el operador Xor realiza una comparación bit a bit de los bits colocados de forma
idéntica en dos expresiones numéricas y establece el bit correspondiente en result según la tabla siguiente.
SI EL B IT DE EXPRESSION1 ES Y EL B IT DE EXPRESSION2 ES EL B IT DE RESULT ES
1 1 0
1 0 1
0 1 1
0 0 0
NOTE
Puesto que los operadores lógicos y bit a bit tienen una prioridad más baja que otros operadores aritméticos y relacionales,
las operaciones bit a bit deben ir entre paréntesis para garantizar una ejecución precisa.
Por ejemplo, 5 Xor 3 es 6. Para ver por qué es así, convierta 5 y 3 en sus representaciones binarias, 101 y 011. A
continuación, use la tabla anterior para determinar que 101 XOR 011 es 110, que es la representación binaria del
número decimal 6.
Tipos de datos
Si los operandos constan de una expresión de Boolean y una expresión numérica, Visual Basic convierte la
expresión de Boolean en un valor numérico (– 1 para True y 0 para False ) y realiza una operación bit a bit.
Para una comparación de Boolean , se Boolean el tipo de datos del resultado. En una comparación bit a bit, el tipo
de datos del resultado es un tipo numérico adecuado para los tipos de datos de expression1 y expression2 . Vea
la tabla "comparaciones relacionales y bit a bit" en tipos de datos de resultados de operadores.
Sobrecarga
El operador de Xor se puede sobrecargar, lo que significa que una clase o estructura puede volver a definir su
comportamiento cuando un operando tiene el tipo de esa clase o estructura. Si el código usa este operador en una
clase o estructura de este tipo, asegúrese de que entiende su comportamiento redefinido. Para obtener más
información, consulta Operator Procedures.
Ejemplo
En el ejemplo siguiente se usa el operador Xor para realizar una exclusión lógica (disyunción lógica exclusiva) en
dos expresiones. El resultado es un valor Boolean que indica si se True exactamente una de las expresiones.
Dim a As Integer = 10
Dim b As Integer = 8
Dim c As Integer = 6
Dim firstCheck, secondCheck, thirdCheck As Boolean
firstCheck = a > b Xor b > c
secondCheck = b > a Xor b > c
thirdCheck = b > a Xor c > b
Ejemplo
En el ejemplo siguiente se usa el operador Xor para realizar una exclusión lógica (disyunción lógica exclusiva) en
los bits individuales de dos expresiones numéricas. El bit en el patrón del resultado se establece si exactamente
uno de los bits correspondientes de los operandos está establecido en 1.
Vea también
Operadores lógicos y bit a bit (Visual Basic)
Prioridad de operador en Visual Basic
Operadores enumerados por funcionalidad
Operadores lógicos y bit a bit en Visual Basic
Propiedades (Visual Basic)
05/12/2019 • 2 minutes to read • Edit Online
En esta página se enumeran las propiedades que son miembros de Visual Basic módulos. Otras propiedades que
son miembros de objetos Visual Basic específicos se enumeran en objetos.
Vea también
Referencia del lenguaje Visual Basic
Consultas (Visual Basic)
08/01/2020 • 3 minutes to read • Edit Online
Esta sección
Aggregate (cláusula)
Describe la cláusula Aggregate , que aplica una o varias funciones de agregado a una colección.
Distinct (cláusula)
Describe la cláusula Distinct , que restringe los valores de la variable de rango actual para eliminar los valores
duplicados en los resultados de la consulta.
From (cláusula)
Describe la cláusula From , que especifica una colección y una variable de rango para una consulta.
Group By (cláusula)
Describe la cláusula Group By , que agrupa los elementos del resultado de una consulta y se puede usar para
aplicar funciones de agregado a cada grupo.
Group Join (cláusula)
Describe la cláusula Group Join , que combina dos colecciones en una sola colección jerárquica.
Join (cláusula)
Describe la cláusula Join , que combina dos colecciones en una sola colección.
Let (cláusula)
Describe la cláusula Let , que calcula un valor y lo asigna a una nueva variable en la consulta.
Order By (cláusula)
Describe la cláusula Order By , que especifica el criterio de ordenación de las columnas de una consulta.
Select (cláusula)
Describe la cláusula Select , que declara un conjunto de variables de rango para una consulta.
Skip (cláusula)
Describe la cláusula Skip , que omite un número especificado de elementos de una colección y, a continuación,
devuelve los elementos restantes.
Skip While (cláusula)
Describe la cláusula Skip While , que omite los elementos de una colección siempre que se true una condición
especificada y, a continuación, devuelve los elementos restantes.
Take (cláusula)
Describe la cláusula Take , que devuelve un número especificado de elementos contiguos desde el principio de
una colección.
Take While (cláusula)
Describe la cláusula Take While , que incluye los elementos de una colección siempre que se true una
condición especificada y se omiten los elementos restantes.
Where (cláusula)
Describe la cláusula Where , que especifica una condición de filtrado para una consulta.
Vea también
LINQ
Introducción a LINQ en Visual Basic
Aggregate (Cláusula, Visual Basic)
27/11/2019 • 12 minutes to read • Edit Online
Sintaxis
Aggregate element [As type] In collection _
[, element2 [As type2] In collection2, [...]]
[ clause ]
Into expressionList
Elementos
T ÉRM IN O DEF IN IC IÓ N
Comentarios
La cláusula Aggregate se puede utilizar para incluir funciones de agregado en las consultas. Las funciones de
agregado realizan comprobaciones y cálculos sobre un conjunto de valores y devuelven un valor único. Puede
tener acceso al valor calculado mediante el uso de un miembro del tipo de resultado de la consulta. Las funciones
de agregado estándar que puede utilizar son las funciones All , Any , Average , Count , LongCount , Max , Min y
Sum . Estas funciones resultan familiares a los desarrolladores que están familiarizados con los agregados de
SQL. Se describen en la sección siguiente de este tema.
El resultado de una función de agregado se incluye en el resultado de la consulta como un campo del tipo de
resultado de la consulta. Puede proporcionar un alias para que el resultado de la función de agregado
especifique el nombre del miembro del tipo de resultado de la consulta que contendrá el valor agregado. Si no se
proporciona ningún alias, se utiliza el nombre de la función de agregado.
La cláusula Aggregate puede iniciar una consulta o se puede incluir como una cláusula adicional en una consulta.
Si la cláusula Aggregate comienza una consulta, el resultado es un valor único que es el resultado de la función
de agregado especificada en la cláusula Into . Si se especifica más de una función de agregado en la cláusula
Into , la consulta devuelve un tipo único con una propiedad independiente para hacer referencia al resultado de
cada función de agregado en la cláusula Into . Si la cláusula Aggregate se incluye como una cláusula adicional
en una consulta, el tipo devuelto en la colección de consultas tendrá una propiedad independiente para hacer
referencia al resultado de cada función de agregado en la cláusula Into .
Funciones de agregado
A continuación se enumeran las funciones de agregado estándar que se pueden usar con la cláusula Aggregate .
Todos
Devuelve true si todos los elementos de la colección satisfacen una condición especificada; de lo contrario,
devuelve false . Este es un ejemplo:
Cualquiera
Devuelve true si algún elemento de la colección satisface una condición especificada; de lo contrario, devuelve
false . Este es un ejemplo:
Average
Calcula el promedio de todos los elementos de la colección o calcula una expresión proporcionada para todos los
elementos de la colección. Este es un ejemplo:
Recuento
Cuenta el número de elementos de la colección. Puede proporcionar una expresión Boolean opcional para
contar solo el número de elementos de la colección que satisfacen una condición. Este es un ejemplo:
Grupo
Hace referencia a los resultados de la consulta agrupados como resultado de una cláusula Group By o
Group Join . La función Group solo es válida en la cláusula Into de una cláusula Group By o Group Join . Para
obtener más información y ejemplos, vea cláusula Group by y Group join.
LongCount
Cuenta el número de elementos de la colección. Puede proporcionar una expresión Boolean opcional para
contar solo el número de elementos de la colección que satisfacen una condición. Devuelve el resultado como
Long . Para obtener un ejemplo, vea la función de agregado Count .
Max
Calcula el valor máximo de la colección o calcula una expresión proporcionada para todos los elementos de la
colección. Este es un ejemplo:
Min
Calcula el valor mínimo de la colección o calcula una expresión proporcionada para todos los elementos de la
colección. Este es un ejemplo:
Sum
Calcula la suma de todos los elementos de la colección o calcula una expresión proporcionada para todos los
elementos de la colección. Este es un ejemplo:
Ejemplo
En el ejemplo siguiente se muestra cómo utilizar la cláusula Aggregate para aplicar funciones de agregado al
resultado de una consulta.
Dim customerOrderTotal =
From cust In customers
Aggregate order In cust.Orders
Into Sum(order.Total), MaxOrder = Max(order.Total),
MinOrder = Min(order.Total), Avg = Average(order.Total)
Imports System.Runtime.CompilerServices
Module UserDefinedAggregates
Return medianValue
End Function
' "Cast" the collection of generic items as type Double and call the
' Median() method to calculate the median value.
<Extension()>
Function Median(Of T)(ByVal values As IEnumerable(Of T),
ByVal selector As Func(Of T, Double)) As Double
Return (From element In values Select selector(element)).Median()
End Function
End Module
En el ejemplo siguiente se muestran consultas de ejemplo que llaman a la función de agregado Median en una
colección de tipo Integer y una colección de tipo Double . La consulta que llama a la función de agregado
Median en la colección de tipo Double llama a la sobrecarga del método Median que acepta, como entrada, una
colección de tipo Double . La consulta que llama a la función de agregado Median en la colección de tipo
Integer llama a la sobrecarga genérica del método Median .
Module Module1
Sub Main()
Dim numbers1 = {1, 2, 3, 4, 5}
End Module
Vea también
Introducción a LINQ en Visual Basic
Consultas
Select (cláusula)
From (cláusula)
Where (cláusula)
Group By (cláusula)
Distinct (Cláusula, Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Restringe los valores de la variable de rango actual para eliminar los valores duplicados en las cláusulas de
consulta subsiguientes.
Sintaxis
Distinct
Comentarios
Puede usar la cláusula Distinct para devolver una lista de elementos únicos. La cláusula Distinct hace que la
consulta omita los resultados de la consulta duplicada. La cláusula Distinct se aplica a los valores duplicados
para todos los campos devueltos especificados por la cláusula Select . Si no se especifica ninguna cláusula de
Select , la cláusula de Distinct se aplica a la variable de rango de la consulta identificada en la cláusula From . Si
la variable de rango no es un tipo inmutable, la consulta solo omitirá el resultado de una consulta si todos los
miembros del tipo coinciden con el resultado de una consulta existente.
Ejemplo
La siguiente expresión de consulta combina una lista de clientes y una lista de pedidos de cliente. La cláusula
Distinct se incluye para devolver una lista de nombres de clientes únicos y fechas de pedido.
Vea también
Introducción a LINQ en Visual Basic
Consultas
From (cláusula)
Select (cláusula)
Where (cláusula)
Equals (Cláusula, Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Comentarios
La palabra clave Equals se usa en los contextos siguientes:
Group Join (cláusula)
Join (cláusula)
Vea también
Palabras clave
From (Cláusula, Visual Basic)
27/11/2019 • 6 minutes to read • Edit Online
Sintaxis
From element [ As type ] In collection [ _ ]
[, element2 [ As type2 ] In collection2 [, ... ] ]
Elementos
T ÉRM IN O DEF IN IC IÓ N
Comentarios
La cláusula From se utiliza para identificar los datos de origen de una consulta y las variables que se usan para
hacer referencia a un elemento de la colección de origen. Estas variables se denominan variables de rango. La
cláusula From es necesaria para una consulta, excepto cuando se usa la cláusula Aggregate para identificar una
consulta que devuelve solo resultados agregados. Para obtener más información, vea cláusula Aggregate.
Puede especificar varias cláusulas From en una consulta para identificar varias colecciones que se van a
combinar. Cuando se especifican varias colecciones, se recorren en iteración de forma independiente o puede
combinarlas si están relacionadas. Puede combinar colecciones implícitamente mediante la cláusula Select , o
explícitamente mediante las cláusulas Join o Group Join . Como alternativa, puede especificar varias
colecciones y variables de rango en una sola cláusula de From , con cada variable de rango relacionada y
colección separadas de las otras por una coma. En el ejemplo de código siguiente se muestran ambas opciones
de sintaxis para la cláusula From .
La cláusula From define el ámbito de una consulta, que es similar al ámbito de un bucle de For . Por lo tanto,
cada variable de rango de element en el ámbito de una consulta debe tener un nombre único. Dado que puede
especificar varias cláusulas de From para una consulta, las cláusulas de From subsiguientes pueden hacer
referencia a las variables de rango de la cláusula From , o bien pueden hacer referencia a las variables de rango
de una cláusula From anterior. Por ejemplo, en el ejemplo siguiente se muestra una cláusula From anidada en la
que la colección de la segunda cláusula se basa en una propiedad de la variable de rango de la primera cláusula.
Cada cláusula de From puede ir seguida de cualquier combinación de cláusulas de consulta adicionales para
refinar la consulta. Puede refinar la consulta de las siguientes maneras:
Combine varias colecciones implícitamente mediante el uso de las cláusulas From y Select ,o
explícitamente mediante el uso de las cláusulas Join o Group Join .
Utilice la cláusula Where para filtrar el resultado de la consulta.
Ordene el resultado mediante la cláusula Order By .
Agrupe resultados similares juntos mediante la cláusula Group By .
Utilice la cláusula Aggregate para identificar las funciones de agregado que se van a evaluar para todo el
resultado de la consulta.
Utilice la cláusula Let para introducir una variable de iteración cuyo valor se determina mediante una
expresión en lugar de una colección.
Utilice la cláusula Distinct para omitir los resultados de la consulta duplicada.
Identifique las partes del resultado que se van a devolver mediante las cláusulas Skip , Take ,
Skip While y Take While .
Ejemplo
La siguiente expresión de consulta utiliza una cláusula From para declarar una variable de rango cust para
cada Customer objeto de la colección de customers . La cláusula Where usa la variable de rango para restringir
la salida a los clientes de la región especificada. El bucle For Each muestra el nombre de la compañía para cada
cliente en el resultado de la consulta.
Vea también
Consultas
Introducción a LINQ en Visual Basic
For Each...Next (instrucción)
For...Next (instrucción)
Select (cláusula)
Where (cláusula)
Aggregate (cláusula)
Distinct (cláusula)
Join (cláusula)
Group Join (cláusula)
Order By (cláusula)
Let (cláusula)
Skip (cláusula)
Take (cláusula)
Skip While (cláusula)
Take While (cláusula)
Group By (Cláusula, Visual Basic)
27/11/2019 • 3 minutes to read • Edit Online
Agrupa los elementos de los resultados de una consulta. También se puede usar para aplicar funciones de
agregado a cada grupo. La operación de agrupación se basa en una o varias claves.
Sintaxis
Group [ listField1 [, listField2 [...] ] By keyExp1 [, keyExp2 [...] ]
Into aggregateList
Elementos
listField1 , listField2
Opcional. Uno o más campos de la variable o las variables de consulta que identifican explícitamente los
campos que se incluirán en el resultado agrupado. Si no se especifica ningún campo, se incluyen todos los
campos de la variable o las variables de consulta en el resultado agrupado.
keyExp1
Obligatorio. Expresión que identifica la clave que se va a usar para determinar los grupos de elementos.
Puede especificar más de una clave para especificar una clave compuesta.
keyExp2
Opcional. Uno o más claves adicionales que se combinan con keyExp1 para crear una clave compuesta.
aggregateList
Obligatorio. Una o más expresiones que identifican cómo se agregan los grupos. Para identificar un
nombre de miembro para los resultados agrupados, use la palabra clave Group , que puede estar en
cualquiera de los formatos siguientes:
Into Group
O bien,
Comentarios
Puede usar la cláusula Group By para dividir los resultados de una consulta en grupos. La agrupación se basa en
una clave o una clave compuesta formada por varias claves. Los elementos que están asociados con valores de
clave coincidentes se incluyen en el mismo grupo.
El parámetro aggregateList de la cláusula Into y la palabra clave Group se usan para identificar el nombre del
miembro usado para hacer referencia al grupo. También puede incluir funciones de agregado en la cláusula Into
para calcular los valores de los elementos agrupados. Para obtener una lista de las funciones de agregado
estándar, consulte Aggregate Clause.
Ejemplo
En el ejemplo de código siguiente se agrupa una lista de clientes según su ubicación (país o región) y se
proporciona un recuento de los clientes de cada grupo. Los resultados se ordenan por nombre de país o región.
Los resultados agrupados se ordenan por nombre de ciudad.
Vea también
Introducción a LINQ en Visual Basic
Consultas
Select (cláusula)
From (cláusula)
Order By (cláusula)
Aggregate (cláusula)
Group Join (cláusula)
Group Join (Cláusula, Visual Basic)
27/11/2019 • 5 minutes to read • Edit Online
Combina dos colecciones en una sola colección jerárquica. La operación de combinación se basa en las claves
coincidentes.
Sintaxis
Group Join element [As type] In collection _
On key1 Equals key2 [ And key3 Equals key4 [... ] ] _
Into expressionList
Elementos
T ÉRM IN O DEF IN IC IÓ N
key1 Equals key2 Obligatorio. Identifica las claves para las colecciones que se
están combinando. Debe utilizar el operador Equals para
comparar las claves de las colecciones que se están
combinando. Puede combinar condiciones de combinación
mediante el operador And para identificar varias claves. El
parámetro key1 debe ser de la colección en el lado
izquierdo del operador Join . El parámetro key2 debe ser
de la colección del lado derecho del operador Join .
Comentarios
La cláusula Group Join combina dos colecciones basadas en los valores de clave coincidentes de las colecciones
que se van a combinar. La colección resultante puede contener un miembro que hace referencia a una colección
de elementos de la segunda colección que coinciden con el valor de clave de la primera colección. También
puede especificar las funciones de agregado que se van a aplicar a los elementos agrupados de la segunda
colección. Para obtener información sobre las funciones de agregado, vea cláusula Aggregate.
Considere, por ejemplo, una colección de administradores y una colección de empleados. Los elementos de
ambas colecciones tienen una propiedad ManagerID que identifica a los empleados que informan a un
administrador determinado. Los resultados de una operación de combinación contendrían un resultado para
cada administrador y empleado con un valor de ManagerID coincidente. Los resultados de una operación de
Group Join contienen la lista completa de administradores. Cada resultado de administrador tendría un
miembro que hacía referencia a la lista de empleados que coincidían con el administrador específico.
La colección resultante de una operación de Group Join puede contener cualquier combinación de valores de la
colección identificada en la cláusula From y las expresiones identificadas en la cláusula Into de la cláusula
Group Join . Para obtener más información sobre las expresiones válidas para la cláusula Into , consulte
Aggregate (cláusula).
Una operación Group Join devolverá todos los resultados de la colección identificada en el lado izquierdo del
operador Group Join . Esto es así incluso si no hay ninguna coincidencia en la colección que se está combinando.
Esto es como un LEFT OUTER JOIN en SQL.
Puede usar la cláusula Join para combinar colecciones en una sola colección. Esto es equivalente a un
INNER JOIN en SQL.
Ejemplo
En el ejemplo de código siguiente se combinan dos colecciones mediante la cláusula Group Join .
Vea también
Introducción a LINQ en Visual Basic
Consultas
Select (cláusula)
From (cláusula)
Join (cláusula)
Where (cláusula)
Group By (cláusula)
Join (Cláusula, Visual Basic)
27/11/2019 • 6 minutes to read • Edit Online
Combina dos colecciones en una sola colección. La operación de combinación se basa en las claves coincidentes y
utiliza el operador Equals .
Sintaxis
Join element In collection _
[ joinClause _ ]
[ groupJoinClause ... _ ]
On key1 Equals key2 [ And key3 Equals key4 [... ]
Elementos
element Obligatorio. Variable de control de la colección que se va a combinar.
collection
Obligatorio. Colección que se va a combinar con la colección identificada en el lado izquierdo del operador Join .
Una cláusula Join se puede anidar en otra cláusula Join o en una cláusula Group Join .
joinClause
Opcional. Una o varias cláusulas de Join adicionales para restringir aún más la consulta.
groupJoinClause
Opcional. Una o varias cláusulas de Group Join adicionales para restringir aún más la consulta.
key1 Equals key2
Obligatorio. Identifica las claves para las colecciones que se están combinando. Debe utilizar el operador Equals
para comparar las claves de las colecciones que se están combinando. Puede combinar condiciones de
combinación mediante el operador And para identificar varias claves. key1 debe ser de la colección en el lado
izquierdo del operador de Join . key2 debe ser de la colección del lado derecho del operador de Join .
Las claves utilizadas en la condición de combinación pueden ser expresiones que incluyen más de un elemento de
la colección. Sin embargo, cada expresión clave solo puede contener elementos de su colección respectiva.
Comentarios
La cláusula Join combina dos colecciones basadas en los valores de clave coincidentes de las colecciones que se
van a combinar. La colección resultante puede contener cualquier combinación de valores de la colección
identificada en el lado izquierdo del operador Join y la colección identificada en la cláusula Join . La consulta
devolverá solo los resultados para los que se cumple la condición especificada por el operador Equals . Esto es
equivalente a un INNER JOIN en SQL.
Puede usar varias cláusulas Join en una consulta para combinar dos o más colecciones en una sola colección.
Puede realizar una combinación implícita para combinar colecciones sin la cláusula Join . Para ello, incluya varias
cláusulas In en la cláusula From y especifique una cláusula Where que identifique las claves que desea usar
para la combinación.
Puede usar la cláusula Group Join para combinar colecciones en una sola colección jerárquica. Esto es como un
LEFT OUTER JOIN en SQL.
Ejemplo
En el ejemplo de código siguiente se realiza una combinación implícita para combinar una lista de clientes con sus
pedidos.
Ejemplo
En el ejemplo de código siguiente se combinan dos colecciones mediante la cláusula Join .
Imports System.Diagnostics
Imports System.Security.Permissions
<SecurityPermission(SecurityAction.Demand)>
Public Sub ListProcesses()
Dim processDescriptions As New List(Of ProcessDescription)
processDescriptions.Add(New ProcessDescription With {
.ProcessName = "explorer",
.Description = "Windows Explorer"})
processDescriptions.Add(New ProcessDescription With {
.ProcessName = "winlogon",
.Description = "Windows Logon"})
processDescriptions.Add(New ProcessDescription With {
.ProcessName = "cmd",
.Description = "Command Window"})
processDescriptions.Add(New ProcessDescription With {
.ProcessName = "iexplore",
.Description = "Internet Explorer"})
End Class
Ejemplo
En el ejemplo de código siguiente se combinan dos colecciones mediante la cláusula Join con dos columnas de
clave.
Imports System.Diagnostics
Imports System.Security.Permissions
<SecurityPermission(SecurityAction.Demand)>
Public Sub ListProcesses()
Dim processDescriptions As New List(Of ProcessDescription2)
End Class
Vea también
Introducción a LINQ en Visual Basic
Consultas
Select (cláusula)
From (cláusula)
Group Join (cláusula)
Where (cláusula)
Cláusula Let (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Sintaxis
Let variable = expression [, ...]
Elementos
T ÉRM IN O DEF IN IC IÓ N
Comentarios
La cláusula Let permite calcular valores para cada resultado de la consulta y hacer referencia a ellos mediante un
alias. El alias se puede usar en otras cláusulas, como la cláusula Where . La cláusula Let le permite crear una
instrucción de consulta que es más fácil de leer, ya que puede especificar un alias para una cláusula Expression
incluida en la consulta y sustituir el alias cada vez que se use la cláusula Expression.
Puede incluir cualquier número de asignaciones de variable y expression en la cláusula Let . Separe cada
asignación con una coma (,).
Ejemplo
En el ejemplo de código siguiente se usa la cláusula Let para calcular un 10% de descuento en productos.
Vea también
Introducción a LINQ en Visual Basic
Consultas
Select (cláusula)
From (cláusula)
Where (cláusula)
Order By (Cláusula, Visual Basic)
27/11/2019 • 4 minutes to read • Edit Online
Sintaxis
Order By orderExp1 [ Ascending | Descending ] [, orderExp2 [...] ]
Elementos
orderExp1
Obligatorio. Uno o más campos del resultado de la consulta actual que identifican cómo ordenar los valores
devueltos. Los nombres de campo deben estar separados por comas (,). Puede identificar cada campo como
ordenado en orden ascendente o descendente mediante el uso de las palabras clave Ascending o Descending . Si
no se especifica ninguna palabra clave Ascending o Descending , el criterio de ordenación predeterminado es
ascendente. Los campos de criterio de ordenación tienen prioridad de izquierda a derecha.
Comentarios
Puede utilizar la cláusula Order By para ordenar los resultados de una consulta. La cláusula Order By solo
puede ordenar un resultado en función de la variable de rango del ámbito actual. Por ejemplo, la cláusula Select
introduce un nuevo ámbito en una expresión de consulta con nuevas variables de iteración para ese ámbito. Las
variables de rango definidas antes de una cláusula de Select en una consulta no están disponibles después de la
cláusula Select . Por lo tanto, si desea ordenar los resultados por un campo que no está disponible en la cláusula
Select , debe colocar la cláusula Order By antes de la cláusula Select . Un ejemplo de Cuándo tendría que
hacer esto es cuando desea ordenar la consulta por campos que no se devuelven como parte del resultado.
El orden ascendente y descendente de un campo viene determinado por la implementación de la interfaz
IComparable para el tipo de datos del campo. Si el tipo de datos no implementa la interfaz IComparable, se omite
el criterio de ordenación.
Ejemplo
La siguiente expresión de consulta utiliza una cláusula From para declarar una variable de rango book para la
colección books . La cláusula Order By ordena el resultado de la consulta por precio en orden ascendente (el
valor predeterminado). Los libros con el mismo precio se ordenan por título en orden ascendente. La cláusula
Select selecciona las propiedades Title y Price como los valores devueltos por la consulta.
Ejemplo
La siguiente expresión de consulta utiliza la cláusula Order By para ordenar el resultado de la consulta por precio
en orden descendente. Los libros con el mismo precio se ordenan por título en orden ascendente.
Dim titlesDescendingPrice = From book In books
Order By book.Price Descending, book.Title
Select book.Title, book.Price
Ejemplo
La siguiente expresión de consulta utiliza una cláusula Select para seleccionar el título del libro, el precio, la
fecha de publicación y el autor. A continuación, rellena los campos Title , Price , PublishDate y Author de la
variable de rango para el nuevo ámbito. La cláusula Order By ordena la nueva variable de rango por nombre de
autor, título del libro y, a continuación, precio. Cada columna se ordena en el orden predeterminado (ascendente).
Dim bookOrders =
From book In books
Select book.Title, book.Price, book.PublishDate, book.Author
Order By Author, Title, Price
Vea también
Introducción a LINQ en Visual Basic
Consultas
Select (cláusula)
From (cláusula)
Select (Cláusula, Visual Basic)
27/11/2019 • 6 minutes to read • Edit Online
Sintaxis
Select [ var1 = ] fieldName1 [, [ var2 = ] fieldName2 [...] ]
Elementos
var1
Opcional. Un alias que se puede utilizar para hacer referencia a los resultados de la expresión de columna.
fieldName1
Obligatorio. Nombre del campo que se va a devolver en el resultado de la consulta.
Comentarios
Puede usar la cláusula Select para definir los resultados que se van a devolver desde una consulta. Esto le
permite definir los miembros de un nuevo tipo anónimo creado por una consulta o establecer como destino los
miembros de un tipo con nombre devuelto por una consulta. La cláusula Select no es necesaria para una
consulta. Si no se especifica ninguna cláusula de Select , la consulta devolverá un tipo basado en todos los
miembros de las variables de rango identificadas para el ámbito actual. Para obtener más información, vea
Tipos anónimos. Cuando una consulta crea un tipo con nombre, devolverá un resultado de tipo
IEnumerable<T> donde T es el tipo creado.
La cláusula Select puede hacer referencia a cualquier variable del ámbito actual. Esto incluye las variables de
rango identificadas en la cláusula From (o en las cláusulas From ). También incluye las nuevas variables creadas
con un alias mediante las cláusulas Aggregate , Let , Group By o Group Join , o bien las variables de una
cláusula Select anterior en la expresión de consulta. La cláusula Select también puede incluir valores
estáticos. Por ejemplo, en el ejemplo de código siguiente se muestra una expresión de consulta en la que la
cláusula Select define el resultado de la consulta como un nuevo tipo anónimo con cuatro miembros:
ProductName , Price , Discount y DiscountedPrice . Los valores de miembro ProductName y Price se toman de
la variable de rango de producto que se define en la cláusula From . El valor del miembro DiscountedPrice se
calcula en la cláusula Let . El miembro Discount es un valor estático.
La cláusula Select presenta un nuevo conjunto de variables de rango para las cláusulas de consulta
posteriores, y las variables de rango anteriores ya no están en el ámbito. La última cláusula Select de una
expresión de consulta determina el valor devuelto de la consulta. Por ejemplo, la consulta siguiente devuelve el
nombre de la compañía y el ID. de pedido de cada pedido de cliente cuyo total supera el 500. La primera
cláusula Select identifica las variables de rango para la cláusula Where y la segunda cláusula Select . La
segunda cláusula Select identifica los valores devueltos por la consulta como un nuevo tipo anónimo.
Si la cláusula Select identifica un solo elemento que se va a devolver, la expresión de consulta devuelve una
colección del tipo de ese único elemento. Si la cláusula Select identifica varios elementos para devolver, la
expresión de consulta devuelve una colección de un nuevo tipo anónimo, basado en los elementos
seleccionados. Por ejemplo, las dos consultas siguientes devuelven colecciones de dos tipos diferentes basados
en la cláusula Select . La primera consulta devuelve una colección de nombres de compañía como cadenas. La
segunda consulta devuelve una colección de objetos Customer rellenados con los nombres e información de
dirección de la compañía.
Ejemplo
La siguiente expresión de consulta utiliza una cláusula From para declarar una variable de rango cust para la
colección customers . La cláusula Select selecciona el nombre del cliente y el valor del identificador y rellena
las columnas CompanyName y CustomerID de la nueva variable de rango. La instrucción For Each recorre en
bucle cada objeto devuelto y muestra las columnas CompanyName y CustomerID de cada registro.
Vea también
Introducción a LINQ en Visual Basic
Consultas
From (cláusula)
Where (cláusula)
Order By (cláusula)
Tipos anónimos
Skip (Cláusula, Visual Basic)
27/11/2019 • 3 minutes to read • Edit Online
Omite un número especificado de elementos de una colección y, a continuación, devuelve los elementos restantes.
Sintaxis
Skip count
Elementos
count
Obligatorio. Un valor o una expresión que se evalúa como el número de elementos de la secuencia que se va a
omitir.
Comentarios
La cláusula Skip hace que una consulta omita los elementos al principio de una lista de resultados y devuelva los
elementos restantes. El número de elementos que se van a omitir se identifica mediante el parámetro count .
Puede usar la cláusula Skip con la cláusula Take para devolver un intervalo de datos de cualquier segmento de
una consulta. Para ello, pase el índice del primer elemento del intervalo a la cláusula Skip y el tamaño del
intervalo a la cláusula Take .
Al utilizar la cláusula Skip en una consulta, puede que también tenga que asegurarse de que los resultados se
devuelven en un orden que permita que la cláusula Skip omita los resultados deseados. Para obtener más
información sobre cómo ordenar los resultados de una consulta, vea cláusula order by.
Puede usar la cláusula SkipWhile para especificar que solo se omitan determinados elementos, en función de una
condición proporcionada.
Ejemplo
En el ejemplo de código siguiente se usa la cláusula Skip junto con la cláusula Take para devolver datos de una
consulta en páginas. La función GetCustomers usa la cláusula Skip para omitir los clientes de la lista hasta el valor
del índice de inicio proporcionado y usa la cláusula Take para devolver una página de clientes a partir de ese
valor de índice.
Public Sub PagingSample()
Dim pageNumber As Integer = 0
Dim pageSize As Integer = 10
Console.WriteLine(vbCrLf)
pageNumber += 1
customersPage = GetCustomers(pageNumber * pageSize, pageSize)
Loop
End Sub
Return returnCustomers
End Function
Vea también
Introducción a LINQ en Visual Basic
Consultas
Select (cláusula)
From (cláusula)
Order By (cláusula)
Skip While (cláusula)
Take (cláusula)
Skip While (Cláusula, Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Omite los elementos de una colección siempre que el valor de una condición especificada sea true y, a
continuación, devuelve los elementos restantes.
Sintaxis
Skip While expression
Elementos
T ÉRM IN O DEF IN IC IÓ N
Comentarios
La cláusula omite los elementos desde el principio del resultado de una consulta hasta que el
Skip While
expression proporcionado devuelve false . Después de que expression devuelve false , la consulta devuelve
todos los elementos restantes. El expression se omite para los resultados restantes.
La cláusula Skip While difiere de la cláusula Where en que la cláusula Where se puede utilizar para excluir todos
los elementos de una consulta que no cumplan una condición determinada. La cláusula Skip While excluye los
elementos solo hasta la primera vez que la condición no se cumple. La cláusula Skip While es muy útil cuando se
trabaja con un resultado de consulta ordenado.
Puede omitir un número específico de resultados desde el principio del resultado de una consulta mediante la
cláusula Skip .
Ejemplo
En el ejemplo de código siguiente se usa la cláusula Skip While para omitir los resultados hasta que se encuentre
el primer cliente de la Estados Unidos.
Public Sub SkipWhileSample()
Dim customers = GetCustomerList()
' Return customers starting from the first U.S. customer encountered.
Dim customerList = From cust In customers
Order By cust.Country
Skip While IsInternationalCustomer(cust)
Return True
End Function
Vea también
Introducción a LINQ en Visual Basic
Consultas
Select (cláusula)
From (cláusula)
Skip (cláusula)
Take While (cláusula)
Where (cláusula)
Take (Cláusula, Visual Basic)
27/11/2019 • 3 minutes to read • Edit Online
Sintaxis
Take count
Elementos
count
Obligatorio. Un valor o una expresión que se evalúa como el número de elementos de la secuencia que se va a
devolver.
Comentarios
La cláusula Take hace que una consulta incluya un número especificado de elementos contiguos desde el
principio de una lista de resultados. El número de elementos que se van a incluir se especifica mediante el
parámetro count .
Puede usar la cláusula Take con la cláusula Skip para devolver un intervalo de datos de cualquier segmento de
una consulta. Para ello, pase el índice del primer elemento del intervalo a la cláusula Skip y el tamaño del
intervalo a la cláusula Take . En este caso, la cláusula Take debe especificarse después de la cláusula Skip .
Al utilizar la cláusula Take en una consulta, puede que también tenga que asegurarse de que los resultados se
devuelven en un orden que permita a la cláusula Take incluir los resultados deseados. Para obtener más
información sobre cómo ordenar los resultados de una consulta, vea cláusula order by.
Puede usar la cláusula TakeWhile para especificar que solo se devuelvan determinados elementos, en función de
una condición proporcionada.
Ejemplo
En el ejemplo de código siguiente se usa la cláusula Take junto con la cláusula Skip para devolver datos de una
consulta en páginas. La función GetCustomers usa la cláusula Skip para omitir los clientes de la lista hasta el
valor del índice de inicio proporcionado, y usa la cláusula Take para devolver una página de clientes a partir de
ese valor de índice.
Public Sub PagingSample()
Dim pageNumber As Integer = 0
Dim pageSize As Integer = 10
Console.WriteLine(vbCrLf)
pageNumber += 1
customersPage = GetCustomers(pageNumber * pageSize, pageSize)
Loop
End Sub
Return returnCustomers
End Function
Vea también
Introducción a LINQ en Visual Basic
Consultas
Select (cláusula)
From (cláusula)
Order By (cláusula)
Take While (cláusula)
Skip (cláusula)
Take While (Cláusula, Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Incluye los elementos de una colección siempre que el valor de una condición especificada sea true y, a
continuación, omite los elementos restantes.
Sintaxis
Take While expression
Elementos
T ÉRM IN O DEF IN IC IÓ N
Comentarios
La cláusula incluye elementos desde el principio del resultado de una consulta hasta que el
Take While
expression proporcionado devuelve false . Una vez que el expression devuelva false , la consulta omitirá
todos los elementos restantes. El expression se omite para los resultados restantes.
La cláusula Take While difiere de la cláusula Where en que la cláusula Where se puede utilizar para incluir todos
los elementos de una consulta que cumplan una condición determinada. La cláusula Take While solo incluye
elementos hasta la primera vez que la condición no se cumple. La cláusula Take While es muy útil cuando se
trabaja con un resultado de consulta ordenado.
Ejemplo
En el ejemplo de código siguiente se usa la cláusula Take While para recuperar los resultados hasta que se
encuentre el primer cliente sin ningún pedido.
Public Sub TakeWhileSample()
Dim customers = GetCustomerList()
' Return customers until the first customer with no orders is found.
Dim customersWithOrders = From cust In customers
Order By cust.Orders.Count Descending
Take While HasOrders(cust)
Return False
End Function
Vea también
Introducción a LINQ en Visual Basic
Consultas
Select (cláusula)
From (cláusula)
Take (cláusula)
Skip While (cláusula)
Where (cláusula)
Where (Cláusula, Visual Basic)
27/11/2019 • 5 minutes to read • Edit Online
Sintaxis
Where condition
Elementos
condition
Obligatorio. Una expresión que determina si los valores del elemento actual de la colección se incluyen en la
colección de salida. La expresión debe evaluarse como un valor Boolean o el equivalente de un valor Boolean .
Si la condición se evalúa como True , el elemento se incluye en el resultado de la consulta; de lo contrario, el
elemento se excluye del resultado de la consulta.
Comentarios
La cláusula Where permite filtrar los datos de la consulta seleccionando solo los elementos que cumplen
determinados criterios. Los elementos cuyos valores hacen que la cláusula Where se evalúe como True se
incluyen en el resultado de la consulta; se excluyen otros elementos. La expresión que se utiliza en una cláusula
Where debe evaluarse como un Boolean o el equivalente de un Boolean , como un entero que se evalúa como
False cuando su valor es cero. Puede combinar varias expresiones en una cláusula Where mediante
operadores lógicos como And , Or , AndAlso , OrElse , Is y IsNot .
De forma predeterminada, las expresiones de consulta no se evalúan hasta que se tiene acceso a ellas; por
ejemplo, cuando están enlazadas a datos o se recorren en iteración en un bucle For . Como resultado, la
cláusula Where no se evalúa hasta que se tiene acceso a la consulta. Si tiene valores externos a la consulta que
se usan en la cláusula Where , asegúrese de que se usa el valor adecuado en la cláusula Where en el momento
en que se ejecuta la consulta. Para obtener más información sobre la ejecución de consultas, vea escribir su
primera consulta LINQ.
Puede llamar a funciones dentro de una cláusula Where para realizar un cálculo o una operación en un valor del
elemento actual de la colección. Llamar a una función en una cláusula Where puede hacer que la consulta se
ejecute inmediatamente cuando se define en lugar de cuando se tiene acceso a ella. Para obtener más
información sobre la ejecución de consultas, vea escribir su primera consulta LINQ.
Ejemplo
La siguiente expresión de consulta utiliza una cláusula From para declarar una variable de rango cust para
cada Customer objeto de la colección de customers . La cláusula Where usa la variable de rango para restringir
la salida a los clientes de la región especificada. El bucle For Each muestra el nombre de la compañía para cada
cliente en el resultado de la consulta.
Sub DisplayCustomersForRegion(ByVal customers As List(Of Customer),
ByVal region As String)
Ejemplo
En el ejemplo siguiente se usa And y Or operadores lógicos en la cláusula Where .
' Get a list of elements that have an atomic number from 12 to 14,
' or that have a name that ends in "r".
Dim subset = From theElement In elements
Where (theElement.AtomicNumber >= 12 And theElement.AtomicNumber < 15) _
Or theElement.Name.EndsWith("r")
Order By theElement.Name
' Output:
' Aluminum 13
' Magnesium 12
' Silicon 14
' Sulfur 16
End Sub
Vea también
Introducción a LINQ en Visual Basic
Consultas
From (cláusula)
Select (cláusula)
For Each...Next (instrucción)
Instrucciones (Visual Basic)
05/12/2019 • 2 minutes to read • Edit Online
En los temas de esta sección, se incluyen tablas de la declaración y las instrucciones ejecutables de Visual Basic, y
de listas importantes que se aplican a muchas instrucciones.
Esta sección
Instrucciones de la A a la E
Instrucciones de la F a la P
Instrucciones de la Q a la Z
Cláusulas
Contextos de declaración y niveles de acceso predeterminados
Lista de atributos
Lista de parámetros
Lista de tipos
Secciones relacionadas
Referencia del lenguaje Visual Basic
Instrucciones A-E
27/11/2019 • 2 minutes to read • Edit Online
Salir
Vea también
Instrucciones de la F a la P
Instrucciones de la Q a la Z
Referencia del lenguaje Visual Basic
AddHandler (Instrucción)
27/11/2019 • 2 minutes to read • Edit Online
Sintaxis
AddHandler event, AddressOf eventhandler
Elementos
Comentarios
Las instrucciones AddHandler y RemoveHandler permiten iniciar y detener el control de eventos en cualquier
momento durante la ejecución del programa.
La firma del procedimiento eventhandler debe coincidir con la firma del event de eventos.
La palabra clave Handles y la instrucción AddHandler permiten especificar que determinados procedimientos
controlen eventos determinados, pero hay diferencias. La instrucción AddHandler conecta los procedimientos a
los eventos en tiempo de ejecución. Use la palabra clave Handles al definir un procedimiento para especificar
que controla un evento determinado. Para obtener más información, vea identificadores.
NOTE
En el caso de los eventos personalizados, la instrucción AddHandler invoca al descriptor de acceso AddHandler del
evento. Para obtener más información sobre los eventos personalizados, vea Event Statement.
Ejemplo
Sub TestEvents()
Dim Obj As New Class1
' Associate an event handler with an event.
AddHandler Obj.Ev_Event, AddressOf EventHandler
' Call the method to raise the event.
Obj.CauseSomeEvent()
' Stop handling events.
RemoveHandler Obj.Ev_Event, AddressOf EventHandler
' This event will not be handled.
Obj.CauseSomeEvent()
End Sub
Sub EventHandler()
' Handle the event.
MsgBox("EventHandler caught event.")
End Sub
Vea también
RemoveHandler (instrucción)
Handles
Event (instrucción)
Eventos
Call (Instrucción, Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Sintaxis
[ Call ] procedureName [ (argumentList) ]
Elementos
Comentarios
Puede usar la palabra clave Call al llamar a un procedimiento. Para la mayoría de las llamadas a
procedimientos, no es necesario usar esta palabra clave.
Normalmente se usa la palabra clave Call cuando la expresión llamada no comienza por un identificador. No se
recomienda el uso de la palabra clave Call para otros usos.
Si el procedimiento devuelve un valor, la instrucción Call lo descarta.
Ejemplo
En el código siguiente se muestran dos ejemplos en los que la palabra clave Call es necesaria para llamar a un
procedimiento. En ambos ejemplos, la expresión llamada no comienza por un identificador.
Sub TestCall()
Call (Sub() Console.Write("Hello"))()
Class TheClass
Public Sub ShowText()
Console.Write(" World")
End Sub
End Class
Vea también
Function (instrucción)
Sub (instrucción)
Declare (instrucción)
Expresiones lambda
Instrucción Class (Visual Basic)
27/11/2019 • 8 minutes to read • Edit Online
Declara el nombre de una clase e introduce la definición de las variables, propiedades, eventos y
procedimientos que la clase incluye.
Sintaxis
[ <attributelist> ] [ accessmodifier ] [ Shadows ] [ MustInherit | NotInheritable ] [ Partial ] _
Class name [ ( Of typelist ) ]
[ Inherits classname ]
[ Implements interfacenames ]
[ statements ]
End Class
Elementos
T ÉRM IN O DEF IN IC IÓ N
- público
- protegido
- Friend
- privado
- Friend protegido
- protegido privado
Comentarios
Una instrucción Class define un nuevo tipo de datos. Una clase es un bloque de creación fundamental de
la programación orientada a objetos (OOP). Para obtener más información, vea objetos y clases.
Class solo se puede utilizar en un espacio de nombres o un nivel de módulo. Esto significa que el
contexto de la declaración de una clase debe ser un archivo de código fuente, un espacio de nombres, una
clase, una estructura, un módulo o una interfaz y no puede ser un procedimiento o un bloque. Para obtener
más información, vea Declaration Contexts and Default Access Levels (Contextos de declaración y niveles
de acceso predeterminados).
Cada instancia de una clase tiene una duración independiente de todas las demás instancias. Esta duración
comienza cuando la crea una nueva cláusula de operador o una función como CreateObject. Finaliza
cuando todas las variables que apuntan a la instancia se han establecido en Nothing o en instancias de
otras clases.
Las clases tienen acceso de forma predeterminada a Friend . Los niveles de acceso se pueden ajustar con
los modificadores de acceso. Para obtener más información, consulte niveles de acceso en Visual Basic.
Reglas
Anidamiento. Puede definir una clase dentro de otra. La clase externa se denomina clase
contenedoray la clase interna se denomina clase anidada.
Herencia. Si la clase usa la instrucción Inherits, solo puede especificar una clase base o una interfaz.
Una clase no puede heredar de más de un elemento.
Una clase no puede heredar de otra clase con un nivel de acceso más restrictivo. Por ejemplo, una
clase Public no puede heredar de una clase Friend .
Una clase no puede heredar de una clase anidada dentro de ella.
Aplicación. Si la clase usa la instrucción Implements, debe implementar todos los miembros
definidos por cada interfaz que especifique en interfacenames . Una excepción a esto es la
reimplementación de un miembro de clase base. Para obtener más información, vea el tema sobre
la reimplementación en implementaciones.
Propiedad predeterminada. Una clase puede especificar como máximo una propiedad como su
propiedad predeterminada. Para obtener más información, vea default.
Comportamiento
Nivel de acceso. Dentro de una clase, puede declarar cada miembro con su propio nivel de acceso.
Los miembros de clase tienen como valor predeterminado el acceso público , excepto las variables y
constantes, que tienen como valor predeterminado el acceso privado . Cuando una clase tiene un
acceso más restringido que uno de sus miembros, el nivel de acceso de la clase tiene prioridad.
ID. Una clase está en el ámbito A lo largo de su espacio de nombres, clase, estructura o módulo que
lo contiene.
El ámbito de cada miembro de clase es toda la clase.
Validez. Visual Basic no admite clases estáticas. Un módulo proporciona el equivalente funcional de
una clase estática. Para obtener más información, vea Module Statement.
Los miembros de clase tienen duración en función de cómo y dónde se declaran. Para obtener más
información, vea duración en Visual Basic.
Evaluación. El código fuera de una clase debe calificar el nombre de un miembro con el nombre de
esa clase.
Si el código incluido en una clase anidada hace una referencia no calificada a un elemento de
programación, Visual Basic busca el elemento en primer lugar en la clase anidada, luego en la clase
contenedora y así sucesivamente hasta el elemento contenedor más externo.
Clases y módulos
Estos elementos tienen muchas similitudes, pero también hay algunas diferencias importantes.
Terminología. Las versiones anteriores de Visual Basic reconocen dos tipos de módulos: módulos
de clase (archivos. CLS) y módulos estándar (archivos. Bas). La versión actual llama a estas clases y
módulos, respectivamente.
Miembros compar tidos. Puede controlar si un miembro de una clase es un miembro compartido
o de instancia.
Orientación de objeto. Las clases están orientadas a objetos, pero los módulos no lo son. Puede
crear una o varias instancias de una clase. Para obtener más información, vea objetos y clases.
Ejemplo
En el ejemplo siguiente se usa una instrucción Class para definir una clase y varios miembros.
Class BankAccount
Shared interestRate As Decimal
Private accountNumber As String
Private accountBalance As Decimal
Public holdOnAccount As Boolean = False
Vea también
Objetos y clases
Estructuras y clases
Interface (instrucción)
Module (instrucción)
Property (instrucción)
Duración de los objetos: cómo se crean y destruyen
Generic Types in Visual Basic
Utilizar una clase genérica
Instrucción Const (Visual Basic)
27/11/2019 • 9 minutes to read • Edit Online
Sintaxis
[ <attributelist> ] [ accessmodifier ] [ Shadows ]
Const constantlist
Elementos
attributelist
Opcional. Lista de atributos que se aplican a todas las constantes declaradas en esta instrucción. Vea lista de
atributos entre corchetes angulares (" < " y " > ").
accessmodifier
Opcional. Úselo para especificar qué código puede tener acceso a estas constantes. Puede ser Public,
Protected, Friend, Protected Friend, Privateo Private Protected.
Shadows
Opcional. Use esto para volver a declarar y ocultar un elemento de programación en una clase base. Vea
Shadows.
constantlist
Obligatorio. Lista de constantes que se declaran en esta instrucción.
constant [ , constant ... ]
PA RT E DESC RIP C IÓ N
Comentarios
Si tiene un valor que nunca cambia en la aplicación, puede definir una constante con nombre y utilizarla en
lugar de un valor literal. Un nombre es más fácil de recordar que un valor. Puede definir la constante una sola
vez y usarla en muchos lugares del código. Si en una versión posterior necesita volver a definir el valor, la
Const instrucción es el único lugar que necesita para realizar un cambio.
Solo puede usar Const en el nivel de módulo o de procedimiento. Esto significa que el contexto de la
declaración de una variable debe ser una clase, una estructura, un módulo, un procedimiento o un bloque, y
no puede ser un archivo de código fuente, un espacio de nombres o una interfaz. Para obtener más
información, vea Declaration Contexts and Default Access Levels (Contextos de declaración y niveles de
acceso predeterminados).
Las constantes locales (dentro de un procedimiento) tienen como valor predeterminado el acceso público y
no se pueden usar modificadores de acceso en ellas. Las constantes de miembro de clase y módulo (fuera de
cualquier procedimiento) tienen como valor predeterminado el acceso privado y las constantes de miembro
de estructura tienen como valor predeterminado el acceso público. Los niveles de acceso se pueden ajustar
con los modificadores de acceso.
Reglas
Contexto de declaración. Una constante declarada en el nivel de módulo, fuera de cualquier
procedimiento, es una constante de miembro; es miembro de la clase, estructura o módulo que lo
declara.
Una constante declarada en el nivel de procedimiento es una constante local; es local para el
procedimiento o bloque que lo declara.
Sus. Solo puede aplicar atributos a constantes de miembro, no a constantes locales. Un atributo
contribuye a la información en los metadatos del ensamblado, lo que no es significativo para el
almacenamiento temporal, como las constantes locales.
Modificadores. De forma predeterminada, todas las constantes son Shared , Static y ReadOnly . No
se puede usar ninguna de estas palabras clave al declarar una constante.
En el nivel de procedimiento, no se puede usar Shadows o cualquier modificador de acceso para
declarar constantes locales.
Varias constantes. Puede declarar varias constantes en la misma instrucción de declaración,
especificando la parte constantname de cada una. Varias constantes se separan mediante comas.
Ejemplo
En el ejemplo siguiente se usa la instrucción Const para declarar constantes que se usan en lugar de los
valores literales.
Ejemplo
Si define una constante con el tipo de datos Object , el compilador Visual Basic le asigna el tipo de
initializer , en lugar de Object . En el ejemplo siguiente, la constante naturalLogBase tiene Decimal de tipo
en tiempo de ejecución.
En el ejemplo anterior se usa el método ToString en el objeto Type devuelto por el operador GetType, porque
Type no se puede convertir en String con CStr .
Vea también
Asc
AscW
Enum (instrucción)
#Const (directiva)
Dim (instrucción)
ReDim (instrucción)
Conversiones implícitas y explícitas
Constantes y enumeraciones
Constantes y enumeraciones
Funciones de conversión de tipos
Continue (Instrucción, Visual Basic)
27/11/2019 • 3 minutes to read • Edit Online
Sintaxis
Continue { Do | For | While }
Comentarios
Puede transferir desde dentro de un bucle Do , For o While a la siguiente iteración del bucle. El control pasa
inmediatamente a la prueba de la condición de bucle, que es equivalente a transferir a la instrucción For o
While , o a la instrucción Do o Loop que contiene la cláusula Until o While .
Puede usar Continue en cualquier ubicación del bucle que permita las transferencias. Las reglas que permiten la
transferencia de control son las mismas que con la instrucción Goto.
Por ejemplo, si un bucle está contenido completamente dentro de un bloque Try , un bloque Catch o un bloque
Finally , puede usar Continue para transferir fuera del bucle. Por otra parte, si la estructura Try ... End Try se
encuentra dentro del bucle, no se puede usar Continue para transferir el control fuera del bloque de Finally y
se puede usar para transferir fuera de un bloque Try o Catch solo si se transfiere completamente de la
estructura Try ... End Try .
Si tiene bucles anidados del mismo tipo, por ejemplo un bucle Do dentro de otro bucle Do , una instrucción
Continue Do omite la siguiente iteración del bucle de Do más interno que lo contiene. No se puede usar
Continue para pasar a la siguiente iteración de un bucle contenedor del mismo tipo.
Si tiene bucles anidados de distintos tipos, por ejemplo, un bucle Do dentro de un bucle For , puede ir
directamente a la siguiente iteración de cualquier bucle mediante Continue Do o Continue For .
Ejemplo
En el ejemplo de código siguiente se usa la instrucción Continue While para ir a la columna siguiente de una
matriz si un divisor es cero. El Continue While está dentro de un bucle de For . Se transfiere a la instrucción
While col < lastcol , que es la siguiente iteración del bucle While más interno que contiene el bucle For .
Dim row, col As Integer
Dim lastrow As Integer = 6
Dim lastcol As Integer = 10
Dim a(,) As Double = New Double(lastrow, lastcol) {}
Dim b(7) As Double
row = -1
While row < lastrow
row += 1
col = -1
While col < lastcol
col += 1
a(row, col) = 0
For i As Integer = 0 To b.GetUpperBound(0)
If b(i) = col Then
Continue While
Else
a(row, col) += (row + b(i)) / (col - b(i))
End If
Next i
End While
End While
Vea también
Do...Loop (instrucción)
For...Next (instrucción)
While...End While (instrucción)
Try...Catch...Finally (instrucción)
Declare Statement
27/11/2019 • 16 minutes to read • Edit Online
Sintaxis
[ <attributelist> ] [ accessmodifier ] [ Shadows ] [ Overloads ] _
Declare [ charsetmodifier ] [ Sub ] name Lib "libname" _
[ Alias "aliasname" ] [ ([ parameterlist ]) ]
' -or-
[ <attributelist> ] [ accessmodifier ] [ Shadows ] [ Overloads ] _
Declare [ charsetmodifier ] [ Function ] name Lib "libname" _
[ Alias "aliasname" ] [ ([ parameterlist ]) ] [ As returntype ]
Elementos
T ÉRM IN O DEF IN IC IÓ N
- público
- protegido
- Friend
- privado
- Friend protegido
- protegido privado
O bien,
Comentarios
A veces es necesario llamar a un procedimiento definido en un archivo (por ejemplo, un archivo DLL o un
recurso de código) fuera del proyecto. Al hacerlo, el compilador Visual Basic no tiene acceso a la
información que necesita para llamar al procedimiento correctamente, como dónde se encuentra el
procedimiento, cómo se identifica, su secuencia de llamada y tipo de valor devuelto, y el juego de
caracteres de cadena que usa. La instrucción Declare crea una referencia a un procedimiento externo y
proporciona esta información necesaria.
Solo se puede usar Declare en un nivel de módulo. Esto significa que el contexto de la declaración de
una referencia externa debe ser una clase, una estructura o un módulo, y no puede ser un archivo de
código fuente, un espacio de nombres, una interfaz, un procedimiento o un bloque. Para obtener más
información, vea Declaration Contexts and Default Access Levels (Contextos de declaración y niveles de
acceso predeterminados).
Las referencias externas tienen como valor predeterminado el acceso público . Los niveles de acceso se
pueden ajustar con los modificadores de acceso.
Reglas
Sus. Puede aplicar atributos a una referencia externa. Cualquier atributo que aplique solo tiene
efecto en el proyecto, no en el archivo externo.
Modificadores. Los procedimientos externos se compartenimplícitamente. No se puede usar la
palabra clave Shared al declarar una referencia externa, y no se puede modificar su estado
compartido.
Un procedimiento externo no puede participar en la invalidación, la implementación de miembros
de interfaz o la administración de eventos. En consecuencia, no se puede usar la palabra clave
Overrides , Overridable , NotOverridable , MustOverride , Implements o Handles en una
instrucción Declare .
Nombre del procedimiento externo. No es necesario asignar a esta referencia externa el
mismo nombre (en name ) que el nombre de punto de entrada del procedimiento dentro de su
archivo externo ( aliasname ). Puede usar una cláusula Alias para especificar el nombre del punto
de entrada. Esto puede ser útil si el procedimiento externo tiene el mismo nombre que un
modificador Visual Basic reservado o una variable, un procedimiento o cualquier otro elemento de
programación en el mismo ámbito.
NOTE
Los nombres de punto de entrada en la mayoría de los archivos dll distinguen mayúsculas de minúsculas.
Número de procedimiento externo. Como alternativa, puede usar una cláusula Alias para
especificar el número ordinal del punto de entrada en la tabla de exportación del archivo externo.
Para ello, empiece aliasname por un signo de número ( # ). Esto puede ser útil si no se permite
ningún carácter en el nombre del procedimiento externo en Visual Basic, o si el archivo externo
exporta el procedimiento sin un nombre.
NOTE
Si el procedimiento externo no se escribió para el .NET Framework, debe tener cuidado de que los tipos de
datos se correspondan. Por ejemplo, si declara una referencia externa a un procedimiento Visual Basic 6,0
con un parámetro Integer (16 bits en Visual Basic 6,0), debe identificar el argumento correspondiente
como Short en la instrucción Declare , porque es el tipo entero de 16 bits en Visual Basic. Del mismo
modo, Long tiene un ancho de datos diferente en Visual Basic 6,0 y Date se implementa de forma
diferente.
NOTE
El compilador Visual Basic no comprueba si los tipos de datos son compatibles con los del procedimiento
externo. Si hay un error de coincidencia, el Common Language Runtime genera una excepción de
MarshalDirectiveException en tiempo de ejecución.
Tipos de datos predeterminados. Si Option Strict se Off y no se especifica el tipo de datos
de un parámetro en parameterlist , el compilador de Visual Basic convierte el argumento
correspondiente al tipo de datos del objeto. Del mismo modo, si no se especifica returntype , el
compilador toma el tipo de datos devuelto como Object .
NOTE
Dado que está tratando con un procedimiento externo que puede haberse escrito en una plataforma
diferente, es peligroso realizar suposiciones sobre los tipos de datos o para permitir que se conviertan en
valores predeterminados. Es mucho más seguro especificar el tipo de datos de cada parámetro y del valor
devuelto, si hay alguno. Esto también mejora la legibilidad del código.
Comportamiento
ID. Una referencia externa está en el ámbito a lo largo de su clase, estructura o módulo.
Validez. Una referencia externa tiene la misma duración que la clase, estructura o módulo en el
que se declara.
Llamar a un procedimiento externo. Se llama a un procedimiento externo del mismo modo
que se llama a un procedimiento Function o Sub ; para ello, se usa en una expresión, si devuelve
un valor, o si se especifica en una instrucción de llamada si no devuelve un valor.
Los argumentos se pasan al procedimiento externo exactamente como se especifica en
parameterlist en la instrucción Declare . No tenga en cuenta cómo se declararon originalmente
los parámetros en el archivo externo. De forma similar, si hay un valor devuelto, úselo exactamente
como se especifica en returntype en la instrucción Declare .
Juegos de caracteres. Puede especificar en charsetmodifier la forma en que Visual Basic debe
serializar las cadenas cuando llama al procedimiento externo. El modificador Ansi dirige Visual
Basic para calcular las referencias de todas las cadenas a valores ANSI y el modificador Unicode le
indica que calcule las referencias de todas las cadenas a valores Unicode. El modificador Auto
dirige Visual Basic para calcular las referencias de cadenas según .NET Framework reglas basadas
en la name de referencia externa, o aliasname si se especifica. El valor predeterminado es Ansi .
charsetmodifier también especifica el modo en que Visual Basic debe buscar el procedimiento
externo en su archivo externo. Ansi y Unicode Visual Basic directos para buscarlo sin modificar
su nombre durante la búsqueda. Auto dirige Visual Basic para determinar el juego de caracteres
base de la plataforma en tiempo de ejecución y posiblemente modificar el nombre del
procedimiento externo, como se indica a continuación:
En una plataforma ANSI, como Windows 95, Windows 98 o Windows Millennium Edition,
primero debe buscar el procedimiento externo sin modificar el nombre. Si se produce un
error, anexe "a" al final del nombre del procedimiento externo y búsquelo de nuevo.
En una plataforma Unicode, como Windows NT, Windows 2000 o Windows XP, primero
debe buscar el procedimiento externo sin modificar el nombre. Si se produce un error,
anexe "W" al final del nombre del procedimiento externo y búsquelo de nuevo.
Método. Visual Basic utiliza el mecanismo de invocación de plataforma .NET Framework (PInvoke)
para resolver y tener acceso a procedimientos externos. La instrucción Declare y la clase
DllImportAttribute utilizan este mecanismo automáticamente y no se necesita ningún
conocimiento de PInvoke. Para obtener más información, consulte Tutorial: llamar a las API de
Windows.
IMPORTANT
Si el procedimiento externo se ejecuta fuera del Common Language Runtime (CLR), se trata de código no
administrado. Cuando llame a este procedimiento, por ejemplo, una función de la API de Windows o un método
COM, podría exponer la aplicación a riesgos de seguridad. Para obtener más información, vea instrucciones de
codificación segura para código no administrado.
Ejemplo
En el ejemplo siguiente se declara una referencia externa a un procedimiento Function que devuelve el
nombre de usuario actual. A continuación, llama al procedimiento externo GetUserNameA como parte del
procedimiento getUser .
Ejemplo
El DllImportAttribute proporciona una forma alternativa de usar funciones en código no administrado. En
el ejemplo siguiente se declara una función importada sin usar una instrucción Declare .
<DllImportAttribute("kernel32.dll", EntryPoint:="MoveFileW",
SetLastError:=True, CharSet:=CharSet.Unicode,
ExactSpelling:=True,
CallingConvention:=CallingConvention.StdCall)>
Public Shared Function MoveFile(ByVal src As String,
ByVal dst As String) As Boolean
' This function copies a file from the path src to the path dst.
' Leave this function empty. The DLLImport attribute forces calls
' to MoveFile to be forwarded to MoveFileW in KERNEL32.DLL.
End Function
Vea también
LastDllError
Imports (instrucción), espacio de nombres y tipo .NET
AddressOf (operador)
Function (instrucción)
Sub (instrucción)
Lista de parámetros
Call (instrucción)
Tutorial: Llamar a las API de Windows
Delegate (Instrucción)
27/11/2019 • 7 minutes to read • Edit Online
Se usa para declarar un delegado. Un delegado es un tipo de referencia que hace referencia a un método
Shared de un tipo o a un método de instancia de un objeto. Cualquier procedimiento con parámetros
coincidentes y tipos de valor devueltos se puede utilizar para crear una instancia de esta clase de delegado.
Posteriormente, el procedimiento se puede invocar mediante la instancia del delegado.
Sintaxis
[ <attrlist> ] [ accessmodifier ] _
[ Shadows ] Delegate [ Sub | Function ] name [( Of typeparamlist )] [([ parameterlist ])] [ As type ]
Elementos
T ÉRM IN O DEF IN IC IÓ N
Comentarios
La instrucción Delegate define el parámetro y los tipos devueltos de una clase de delegado. Cualquier
procedimiento con parámetros coincidentes y tipos de valor devueltos se puede utilizar para crear una
instancia de esta clase de delegado. Posteriormente, el procedimiento se puede invocar mediante la instancia
de delegado, llamando al método Invoke del delegado.
Los delegados se pueden declarar en el nivel de espacio de nombres, módulo, clase o estructura, pero no
dentro de un procedimiento.
Cada clase delegada define un constructor que se pasa la especificación de un método de objeto. Un
argumento para un constructor delegado debe ser una referencia a un método o una expresión lambda.
Para especificar una referencia a un método, utilice la siguiente sintaxis:
AddressOf [ expression .] methodname
El tipo de tiempo de compilación de expression debe ser el nombre de una clase o una interfaz que contiene
un método del nombre especificado cuya firma coincida con la firma de la clase delegada. methodname puede
ser un método compartido o un método de instancia. methodname no es opcional, incluso si se crea un
delegado para el método predeterminado de la clase.
Para especificar una expresión lambda, utilice la siguiente sintaxis:
Function ([ parm As type , parm2 As type2 , ...]) expression
La firma de la función debe coincidir con la del tipo de delegado. Para obtener más información sobre las
expresiones lambda, vea Expresiones lambda.
Para obtener más información sobre los delegados, consulte Delegados.
Ejemplo
En el ejemplo siguiente se usa la instrucción Delegate para declarar un delegado para que opere con dos
números y devolver un número. El método DelegateTest toma una instancia de un delegado de este tipo y lo
usa para operar en pares de números.
Function AddNumbers(
ByVal x As Double,
ByVal y As Double
) As Double
Return x + y
End Function
Function SubtractNumbers(
ByVal x As Double,
ByVal y As Double
) As Double
Return x - y
End Function
Sub DelegateTest(
ByVal x As Double,
ByVal op As MathOperator,
ByVal y As Double
)
Dim ret As Double
ret = op.Invoke(x, y) ' Call the method.
MsgBox(ret)
End Sub
Vea también
AddressOf (operador)
Of
Delegados
Utilizar una clase genérica
Generic Types in Visual Basic
Covarianza y contravarianza
In
Out
DIM (instrucción Visual Basic)
03/02/2020 • 24 minutes to read • Edit Online
Sintaxis
[ <attributelist> ] [ accessmodifier ] [[ Shared ] [ Shadows ] | [ Static ]] [ ReadOnly ]
Dim [ WithEvents ] variablelist
Partes
attributelist
Opcional. Especifica que se trata de variables de objeto que hacen referencia a las instancias de
una clase que puede generar eventos. Vea WithEvents.
variablelist
Necesario. Lista de variables que se declaran en esta instrucción.
variable [ , variable ... ]
PA RT E DESC RIP C IÓ N
Observaciones
El compilador Visual Basic usa la instrucción Dim para determinar el tipo de datos de la variable y otra
información, como el código que puede tener acceso a la variable. En el ejemplo siguiente se declara
una variable que contiene un valor Integer .
Puede especificar cualquier tipo de datos o el nombre de una enumeración, estructura, clase o interfaz.
Para un tipo de referencia, use la palabra clave New para crear una nueva instancia de la clase o la
estructura especificada por el tipo de datos. Si utiliza New , no utiliza una expresión de inicializador. En
su lugar, se proporcionan argumentos, si son necesarios, al constructor de la clase a partir de la cual se
crea la variable.
Dim bottomLabel As New System.Windows.Forms.Label
Puede declarar una variable en un procedimiento, un bloque, una clase, una estructura o un módulo.
No se puede declarar una variable en un archivo de código fuente, un espacio de nombres o una
interfaz. Para obtener más información, vea Declaration Contexts and Default Access Levels (Contextos
de declaración y niveles de acceso predeterminados).
Una variable que se declara en el nivel de módulo, fuera de cualquier procedimiento, es una variable o
campo miembro . Las variables de miembro están en el ámbito a lo largo de su clase, estructura o
módulo. Una variable que se declara en el nivel de procedimiento es una variable local. Las variables
locales están en el ámbito solo dentro de su procedimiento o bloque.
Los modificadores de acceso siguientes se usan para declarar variables fuera de un procedimiento:
Public , Protected , Friend , Protected Friend y Private . Para obtener más información, consulte
niveles de acceso en Visual Basic.
La palabra clave Dim es opcional y normalmente se omite si se especifica cualquiera de los siguientes
modificadores: Public , Protected , Friend , Protected Friend , Private , Shared , Shadows , Static ,
ReadOnly o WithEvents .
Si Option Explicit es on (valor predeterminado), el compilador requiere una declaración para cada
variable que se use. Para obtener más información, vea Option Explicit (instrucción).
Para obtener más información sobre los inicializadores de objeto, vea Cómo: declarar un objeto usando
un inicializadorde objeto, inicializadores de objeto: tipos con nombre y anónimos, y tipos anónimos.
Si se declara más de una variable con una As cláusula, no se puede proporcionar un inicializador para
ese grupo de variables.
Puede especificar tipos de datos diferentes para variables diferentes mediante una cláusula de As
independiente para cada variable que declare. Cada variable toma el tipo de datos especificado en la
primera cláusula As encontrada después de su parte variablename .
Matrices
Puede declarar una variable para que contenga una matriz, que puede contener varios valores. Para
especificar que una variable contiene una matriz, siga el variablename inmediatamente con paréntesis.
Para obtener más información sobre las matrices, consulte Matrices.
Puede especificar el límite inferior y superior de cada dimensión de una matriz. Para ello, incluya una
boundslist dentro de los paréntesis. Para cada dimensión, el boundslist especifica el límite superior
y, opcionalmente, el límite inferior. El límite inferior es siempre cero, tanto si se especifica como si no.
Cada índice puede variar de cero a través de su valor de límite superior.
Las dos instrucciones siguientes son equivalentes. Cada instrucción declara una matriz de 21
elementos Integer . Al tener acceso a la matriz, el índice puede variar de 0 a 20.
La instrucción siguiente declara una matriz bidimensional de tipo Double . La matriz tiene 4 filas (3 + 1)
de 6 columnas (5 + 1) cada una. Tenga en cuenta que un límite superior representa el valor más alto
posible para el índice, no la longitud de la dimensión. La longitud de la dimensión es el límite superior
más uno.
Dim matrix2(3, 5) As Double
Si la matriz tiene más de una dimensión, debe incluir comas entre paréntesis para indicar el número de
dimensiones.
Puede declarar una matriz de longitud cero declarando una de las dimensiones de la matriz para que
sea-1. Una variable que contiene una matriz de longitud cero no tiene el valor Nothing . Ciertas
funciones Common Language Runtime requieren matrices de longitud cero. Si intenta obtener acceso
a una matriz de este tipo, se produce una excepción en tiempo de ejecución. Para más información,
consulte Matrices.
Puede inicializar los valores de una matriz mediante un literal de matriz. Para ello, incluya los valores
de inicialización entre llaves ( {} ).
Para obtener más información sobre los literales de matriz, vea matrices.
¿T IP O DE DATO S ¿IN IC IA L IZ A DO R
ESP EC IF IC A DO ? ESP EC IF IC A DO ? E JEM P LO RESULTA DO
¿T IP O DE DATO S ¿IN IC IA L IZ A DO R
ESP EC IF IC A DO ? ESP EC IF IC A DO ? E JEM P LO RESULTA DO
Si especifica un tipo de datos pero no especifica un inicializador, Visual Basic inicializa la variable en el
valor predeterminado para su tipo de datos. En la tabla siguiente se muestran los valores de
inicialización predeterminados.
Char Binario 0
T IP O DE DATO S VA LO R P REDET ERM IN A DO
Boolean False
Cada elemento de una estructura se inicializa como si fuera una variable independiente. Si declara la
longitud de una matriz pero no inicializa sus elementos, cada elemento se inicializa como si fuera una
variable independiente.
DEC L A RA C IÓ N DE
P RO C EDIM IEN TO VA RIA B L E IN IC IA L IZ A DA L A VA RIA B L E DE JA DE EXIST IR
En una clase o estructura, el La primera vez que se llama al Cuando el programa detiene la
procedimiento es Shared procedimiento en una instancia ejecución
específica o en la propia clase o
estructura
En una clase o estructura, el La primera vez que se llama al Cuando se libera la instancia para la
procedimiento no es Shared procedimiento en una instancia recolección de elementos no
específica utilizados (GC)
Atributos y modificadores
Solo puede aplicar atributos a las variables de miembro, no a las variables locales. Un atributo aporta
información a los metadatos del ensamblado, lo que no es significativo para el almacenamiento
temporal, como las variables locales.
En el nivel de módulo, no se puede usar el modificador Static para declarar variables de miembro. En
el nivel de procedimiento, no se puede usar Shared , Shadows , ReadOnly , WithEvents o cualquier
modificador de acceso para declarar variables locales.
Puede especificar qué código puede tener acceso a una variable proporcionando un accessmodifier .
Las variables de miembro de clase y módulo (fuera de cualquier procedimiento) tienen como valor
predeterminado el acceso privado y las variables miembro de estructura tienen como valor
predeterminado el acceso público. Los niveles de acceso se pueden ajustar con los modificadores de
acceso. No se pueden usar modificadores de acceso en variables locales (dentro de un procedimiento).
Solo puede especificar WithEvents en variables de miembro, no en variables locales dentro de un
procedimiento. Si especifica WithEvents , el tipo de datos de la variable debe ser un tipo de clase
específico, no Object . No se puede declarar una matriz con WithEvents . Para obtener más
información sobre los eventos, vea eventos.
NOTE
El código fuera de una clase, estructura o módulo debe calificar el nombre de una variable miembro con el
nombre de esa clase, estructura o módulo. El código fuera de un procedimiento o bloque no puede hacer
referencia a ninguna variable local dentro de ese procedimiento o bloque.
Ejemplo
En el siguiente ejemplo se declaran variables mediante la instrucción Dim con varias opciones.
Ejemplo
En el ejemplo siguiente se enumeran los números primos entre 1 y 30. El ámbito de las variables
locales se describe en los comentarios de código.
Public Sub ListPrimes()
' The sb variable can be accessed only
' within the ListPrimes procedure.
Dim sb As New System.Text.StringBuilder()
Debug.WriteLine(sb.ToString)
' Output: 2 3 5 7 11 13 17 19 23 29
End Sub
Return True
End If
End Function
Ejemplo
En el ejemplo siguiente, la variable speedValue se declara en el nivel de clase. La palabra clave
Private se utiliza para declarar la variable. Cualquier procedimiento de la clase Car puede tener
acceso a la variable.
Debug.WriteLine(theCar.Speed.ToString)
' Output: 45
Public Class Car
' The speedValue variable can be accessed by
' any procedure in the Car class.
Private speedValue As Integer = 0
Consulte también
Const (instrucción)
ReDim (instrucción)
Option Explicit (instrucción)
Option Infer (instrucción)
Option Strict (instrucción)
Página Compilación, Diseñador de proyectos (Visual Basic)
Declaración de variables
Matrices
Inicializadores de objeto: Tipos con nombre y anónimos
Tipos anónimos
Inicializadores de objeto: Tipos con nombre y anónimos
Declarar un objeto usando un inicializador de objeto
Inferencia de tipo de variable local
Instrucción Do...Loop (Visual Basic)
27/11/2019 • 7 minutes to read • Edit Online
Repite un bloque de instrucciones mientras se True una condición Boolean o hasta que la condición se True .
Sintaxis
Do { While | Until } condition
[ statements ]
[ Continue Do ]
[ statements ]
[ Exit Do ]
[ statements ]
Loop
' -or-
Do
[ statements ]
[ Continue Do ]
[ statements ]
[ Exit Do ]
[ statements ]
Loop { While | Until } condition
Elementos
T ÉRM IN O DEF IN IC IÓ N
Comentarios
Use una estructura de Do...Loop cuando desee repetir un conjunto de instrucciones un número indefinido de
veces, hasta que se satisfaga una condición. Si desea repetir las instrucciones un número establecido de veces,
la instrucción for... La siguiente instrucción suele ser una mejor opción.
Puede usar While o Until para especificar condition , pero no ambos.
Solo puede probar condition una vez, al principio o al final del bucle. Si prueba condition al principio del
bucle (en la instrucción Do ), es posible que el bucle no se ejecute incluso una vez. Si realiza una prueba al final
del bucle (en la instrucción Loop ), el bucle siempre se ejecuta al menos una vez.
La condición suele ser el resultado de una comparación de dos valores, pero puede ser cualquier expresión que
se evalúe como un valor de tipo de datos booleano ( True o False ). Esto incluye los valores de otros tipos de
datos, como los tipos numéricos, que se han convertido en Boolean .
Puede anidar Do bucles colocando un bucle dentro de otro. También puede anidar distintos tipos de
estructuras de control entre sí. Para obtener más información, vea estructuras de control anidadas.
NOTE
La estructura de Do...Loop proporciona más flexibilidad que el tiempo... End while , ya que permite decidir si finalizar el
bucle cuando condition deja de True o cuando se convierte por primera vez en True . También le permite probar
condition al principio o al final del bucle.
Salir
La instrucción Exit do puede proporcionar una manera alternativa de salir de un Do…Loop . Exit Do transfiere el
control inmediatamente a la instrucción que sigue a la instrucción Loop .
a menudo se usa después de evaluar alguna condición, por ejemplo en una estructura de
Exit Do
If...Then...Else . Es posible que desee salir de un bucle si detecta una condición que hace que sea innecesario
o imposible continuar la iteración, como un valor erróneo o una solicitud de finalización. Un uso de Exit Do es
probar una condición que podría provocar un bucle interminable, que es un bucle que podría ejecutar un
número de veces grande o incluso infinito. Puede usar Exit Do para escapar el bucle.
Puede incluir cualquier número de instrucciones Exit Do en cualquier parte de un Do…Loop .
Cuando se utiliza en bucles Do anidados, Exit Do transfiere el control fuera del bucle más interno y en el
siguiente nivel superior de anidamiento.
Ejemplo
En el ejemplo siguiente, las instrucciones del bucle continúan ejecutándose hasta que la variable de index sea
mayor que 10. La cláusula Until está al final del bucle.
Debug.WriteLine("")
' Output: 0 1 2 3 4 5 6 7 8 9 10
Ejemplo
En el ejemplo siguiente se utiliza una cláusula While en lugar de una cláusula Until y condition se prueba al
principio del bucle en lugar de al final.
Debug.WriteLine("")
' Output: 0 1 2 3 4 5 6 7 8 9 10
Ejemplo
En el ejemplo siguiente, condition detiene el bucle cuando la variable de index es mayor que 100. Sin
embargo, la instrucción If del bucle hace que la instrucción Exit Do detenga el bucle cuando la variable de
índice sea mayor que 10.
Debug.WriteLine("")
' Output: 0 1 2 3 4 5 6 7 8 9 10
Ejemplo
En el ejemplo siguiente se leen todas las líneas de un archivo de texto. El método OpenText abre el archivo y
devuelve un StreamReader que lee los caracteres. En la condición Do...Loop , el método Peek de la
StreamReader determina si hay caracteres adicionales.
sr.Close()
End If
End Sub
Vea también
Estructuras de bucle
For...Next (instrucción)
Boolean (tipo de datos)
Estructuras de control anidadas
Exit (instrucción)
While...End While (instrucción)
Else (Instrucción, Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Introduce un grupo de instrucciones que se van a ejecutar o compilar si no se ha ejecutado o compilado ningún
otro grupo condicional de instrucciones.
Comentarios
La palabra clave Else se puede usar en los siguientes contextos:
If...Then...Else (instrucción)
Select...Case (instrucción)
#If... Then... #Else (Directiva)
Vea también
Palabras clave
End (Instrucción)
27/11/2019 • 3 minutes to read • Edit Online
Sintaxis
End
Comentarios
Puede colocar la instrucción End en cualquier parte de un procedimiento para obligar a que toda la aplicación
deje de ejecutarse. End cierra los archivos abiertos con una instrucción Open y borra todas las variables de la
aplicación. La aplicación se cierra en cuanto no hay ningún otro programa que contenga referencias a sus objetos
y no se está ejecutando ningún código.
NOTE
La instrucción End detiene la ejecución del código repentinamente y no invoca el Dispose ni Finalize método, ni
ningún otro código de Visual Basic. Se invalidan las referencias de objeto mantenidas por otros programas. Si se encuentra
una instrucción End dentro de un bloque Try o Catch , el control no pasa al bloque de Finally correspondiente.
La instrucción Stop suspende la ejecución, pero a diferencia de End , no cierra ningún archivo ni borra ninguna
variable, a menos que se encuentre en un archivo ejecutable (. exe) compilado.
Dado que End finaliza la aplicación sin tener que ocuparse de los recursos que puedan estar abiertos, debe
intentar cerrarlo correctamente antes de usarlo. Por ejemplo, si la aplicación tiene algún formulario abierto, debe
cerrarlo antes de que el control alcance la instrucción End .
Debería usar End moderadamente y solo cuando necesite detenerse inmediatamente. Las formas normales de
finalizar un procedimiento (instrucción return y de salida) no solo cierran el procedimiento correctamente, sino
que también proporcionan al código de llamada la oportunidad de cerrarse sin problemas. Por ejemplo, una
aplicación de consola puede Return del procedimiento Main .
IMPORTANT
La instrucción End llama al método Exit de la clase Environment en el espacio de nombres System. Exit requiere que tenga
UnmanagedCode permiso. Si no lo hace, se produce un error de SecurityException.
Cuando va seguido de una palabra clave adicional, End <palabra clave > instrucción define el final de la
definición del procedimiento o bloque adecuado. Por ejemplo, End Function finaliza la definición de un
procedimiento Function .
Ejemplo
En el ejemplo siguiente se usa la instrucción End para finalizar la ejecución del código si el usuario lo solicita.
Sub Form_Load()
Dim answer As MsgBoxResult
answer = MsgBox("Do you want to quit now?", MsgBoxStyle.YesNo)
If answer = MsgBoxResult.Yes Then
MsgBox("Terminating program")
End
End If
End Sub
Vea también
SecurityPermissionFlag
Stop (instrucción)
End <palabra clave > instrucción
End <palabra clave > instrucción (Visual Basic)
27/11/2019 • 5 minutes to read • Edit Online
Cuando va seguido de una palabra clave adicional, finaliza la definición del bloque de instrucciones introducido
por esa palabra clave.
Sintaxis
End AddHandler
End Class
End Enum
End Event
End Function
End Get
End If
End Interface
End Module
End Namespace
End Operator
End Property
End RaiseEvent
End RemoveHandler
End Select
End Set
End Structure
End Sub
End SyncLock
End Try
End While
End With
Elementos
PA RT E DESC RIP C IÓ N
Directivas
Cuando va precedido de un signo de número ( # ), la palabra clave End finaliza un bloque de preprocesamiento
introducido por la directiva correspondiente.
#End ExternalSource
#End If
#End Region
PA RT E DESC RIP C IÓ N
Comentarios
La instrucción end, sin una palabra clave adicional, finaliza la ejecución inmediatamente.
Notas para desarrolladores de Smart Device
No se admite la instrucción End , sin una palabra clave adicional.
Vea también
End (instrucción)
Instrucción Enum (Visual Basic)
27/11/2019 • 14 minutes to read • Edit Online
Sintaxis
[ <attributelist> ] [ accessmodifier ] [ Shadows ]
Enum enumerationname [ As datatype ]
memberlist
End Enum
Elementos
attributelist
Opcional. Lista de atributos que se aplican a esta enumeración. Debe incluir la lista de atributos entre
corchetes angulares (" < " y " > ").
El atributo FlagsAttribute indica que el valor de una instancia de la enumeración puede incluir varios
miembros de enumeración y que cada miembro representa un campo de bits en el valor de
enumeración.
accessmodifier
Opcional. Especifica qué código puede tener acceso a esta enumeración. Puede ser uno de los
siguientes:
Public
Protected
Friend
Private
Protected Friend
Private Protected
Shadows
Opcional. Especifica que esta enumeración vuelve a declarar y oculta un elemento de programación
con el mismo nombre, o un conjunto de elementos sobrecargados, en una clase base. Solo puede
especificar Shadows en la propia enumeración, no en ninguno de sus miembros.
enumerationname
Obligatorio. Nombre de la enumeración. Para obtener información sobre los nombres válidos, vea
nombres de elementos declarados.
datatype
Obligatorio. Lista de constantes de miembro que se declaran en esta instrucción. Aparecen varios
miembros en líneas de código fuente individuales.
Cada member tiene la sintaxis y las partes siguientes:
[<attribute list>] member name [ = initializer ]
PA RT E DESC RIP C IÓ N
End Enum
Comentarios
Si tiene un conjunto de valores invariables que están relacionados lógicamente entre sí, puede definirlos
juntos en una enumeración. Esto proporciona nombres descriptivos para la enumeración y sus miembros,
que son más fáciles de recordar que sus valores. Después, puede usar los miembros de enumeración en
muchos lugares del código.
Las ventajas de utilizar enumeraciones son las siguientes:
Reduce los errores causados por la transposición o la escritura indebida de números.
Facilita el cambio de valores en el futuro.
Facilita la lectura del código, lo que significa que es menos probable que se introduzcan errores.
Garantiza la compatibilidad con versiones posteriores. Si usa enumeraciones, es menos probable que
se produzca un error en el código si en el futuro alguien cambia los valores correspondientes a los
nombres de miembro.
Una enumeración tiene un nombre, un tipo de datos subyacente y un conjunto de miembros. Cada miembro
representa una constante.
Una enumeración declarada en el nivel de clase, estructura, módulo o interfaz, fuera de cualquier
procedimiento, es una enumeración de miembros. Es miembro de la clase, estructura, módulo o interfaz que
lo declara.
Se puede tener acceso a las enumeraciones de miembros desde cualquier lugar dentro de su clase,
estructura, módulo o interfaz. El código fuera de una clase, estructura o módulo debe calificar el nombre de la
enumeración de un miembro con el nombre de esa clase, estructura o módulo. Puede evitar la necesidad de
usar nombres completos agregando una instrucción Imports al archivo de código fuente.
Una enumeración declarada en el nivel de espacio de nombres, fuera de cualquier clase, estructura, módulo o
interfaz, es un miembro del espacio de nombres en el que aparece.
El contexto de la declaración de una enumeración debe ser un archivo de código fuente, un espacio de
nombres, una clase, una estructura, un módulo o una interfaz y no puede ser un procedimiento. Para obtener
más información, vea Declaration Contexts and Default Access Levels (Contextos de declaración y niveles de
acceso predeterminados).
Puede aplicar atributos a una enumeración en su totalidad, pero no a sus miembros individualmente. Un
atributo contribuye a la información en los metadatos del ensamblado.
Tipo de datos
La instrucción Enum puede declarar el tipo de datos de una enumeración. Cada miembro toma el tipo de
datos de la enumeración. Puede especificar Byte , Integer , Long , SByte , Short , UInteger , ULong o
UShort .
Si no especifica datatype para la enumeración, cada miembro toma el tipo de datos de su initializer . Si
especifica datatype y initializer , el tipo de datos de initializer debe ser convertible en datatype . Si no
hay ningún datatype ni initializer , el tipo de datos tiene como valor predeterminado Integer .
Inicializar miembros
La instrucción Enum puede inicializar el contenido de los miembros seleccionados en memberlist . Utilice
initializer para proporcionar una expresión que se va a asignar al miembro.
Si no especifica initializer para un miembro, Visual Basic lo inicializa en cero (si es el primer member de
memberlist ) o en un valor mayor en uno que el de la member inmediatamente anterior.
La expresión proporcionada en cada initializer puede ser cualquier combinación de literales, otras
constantes que ya están definidas y miembros de enumeración que ya están definidos, incluido un miembro
anterior de esta enumeración. Puede usar operadores aritméticos y lógicos para combinar estos elementos.
No se pueden usar variables ni funciones en initializer . Sin embargo, puede usar palabras clave de
conversión como CByte y CShort . También puede utilizar AscW si lo llama con una constante String o
Char argumento, ya que se puede evaluar en tiempo de compilación.
Las enumeraciones no pueden tener valores de punto flotante. Si a un miembro se le asigna un valor de
punto flotante y Option Strict está establecido en ON, se produce un error del compilador. Si
Option Strict está desactivado, el valor se convierte automáticamente al tipo de Enum .
Si el valor de un miembro supera el intervalo permitido para el tipo de datos subyacente, o si se inicializa un
miembro con el valor máximo permitido por el tipo de datos subyacente, el compilador informa de un error.
Modificadores
Las enumeraciones de clase, estructura, módulo y miembro de interfaz tienen como valor predeterminado el
acceso público. Los niveles de acceso se pueden ajustar con los modificadores de acceso. Las enumeraciones
de miembros de espacio de nombres tienen acceso de confianza de forma predeterminada. Puede ajustar sus
niveles de acceso a público, pero no a privado o protegido. Para obtener más información, consulte niveles de
acceso en Visual Basic.
Todos los miembros de enumeración tienen acceso público y no se pueden usar modificadores de acceso en
ellos. Sin embargo, si la propia enumeración tiene un nivel de acceso más restringido, tiene prioridad el nivel
de acceso de enumeración especificado.
De forma predeterminada, todas las enumeraciones son tipos y sus campos son constantes. Por lo tanto, las
palabras clave Shared , Static y ReadOnly no se pueden usar al declarar una enumeración o sus miembros.
Ejemplo
En el ejemplo siguiente se muestra cómo usar la instrucción Enum . Tenga en cuenta que el miembro se
conoce como EggSizeEnum.Medium y no como Medium .
size = EggSizeEnum.Medium
' Continue processing...
End Sub
End Class
Ejemplo
El método del ejemplo siguiente está fuera de la clase Egg . Por lo tanto, EggSizeEnum se califica como
Egg.EggSizeEnum .
Ejemplo
En el ejemplo siguiente se usa la instrucción Enum para definir un conjunto relacionado de valores constantes
con nombre. En este caso, los valores son colores que se pueden elegir para diseñar formularios de entrada
de datos para una base de datos.
Public Enum InterfaceColors
MistyRose = &HE1E4FF&
SlateGray = &H908070&
DodgerBlue = &HFF901E&
DeepSkyBlue = &HFFBF00&
SpringGreen = &H7FFF00&
ForestGreen = &H228B22&
Goldenrod = &H20A5DA&
Firebrick = &H2222B2&
End Enum
Ejemplo
En el ejemplo siguiente se muestran valores que incluyen números positivos y negativos.
Enum SecurityLevel
IllegalEntry = -1
MinimumSecurity = 0
MaximumSecurity = 1
End Enum
Ejemplo
En el ejemplo siguiente, se utiliza una cláusula As para especificar el datatype de una enumeración.
Ejemplo
En el ejemplo siguiente se muestra cómo usar una enumeración bit a bit. Se pueden asignar varios valores a
una instancia de una enumeración bit a bit. La declaración de Enum incluye el atributo FlagsAttribute, que
indica que la enumeración se puede tratar como un conjunto de marcas.
' Apply the Flags attribute, which allows an instance
' of the enumeration to have multiple values.
<Flags()> Public Enum FilePermissions As Integer
None = 0
Create = 1
Read = 2
Update = 4
Delete = 8
End Enum
Ejemplo
En el ejemplo siguiente se recorre en iteración una enumeración. Usa el método GetNames para recuperar
una matriz de nombres de miembro de la enumeración y GetValues para recuperar una matriz de valores de
miembro.
Enum EggSizeEnum
Jumbo
ExtraLarge
Large
Medium
Small
End Enum
Se usa para liberar las variables de matriz y desasignar la memoria usada para sus elementos.
Sintaxis
Erase arraylist
Elementos
arraylist
Obligatorio. Lista de variables de matriz que se van a borrar. Las variables se separan con comas.
Comentarios
La instrucción Erase solo puede aparecer en el nivel de procedimiento. Esto significa que puede liberar matrices
dentro de un procedimiento, pero no en el nivel de clase o módulo.
La instrucción Erase es equivalente a asignar Nothing a cada variable de matriz.
Ejemplo
En el ejemplo siguiente se usa la instrucción Erase para borrar dos matrices y liberar su memoria (elementos de
almacenamiento 1000 y 100, respectivamente). A continuación, la instrucción ReDim asigna una nueva instancia
de la matriz a la matriz tridimensional.
Vea también
Nothing
ReDim (instrucción)
Error (Instrucción)
27/11/2019 • 2 minutes to read • Edit Online
Sintaxis
Error errornumber
Elementos
errornumber
Obligatorio. Puede ser cualquier número de error válido.
Comentarios
La instrucción Error se admite por compatibilidad con versiones anteriores. En el nuevo código, especialmente al
crear objetos, utilice el método Raise del objeto Err para generar errores en tiempo de ejecución.
Si se define errornumber , la instrucción Error llama al controlador de errores después de que se asignen los
siguientes valores predeterminados a las propiedades del objeto Err :
P RO P IEDA D VA LO R
LastDLLError Nulo.
Si no existe ningún controlador de errores, o si no se habilita ninguno, se crea un mensaje de error que se muestra
en las propiedades del objeto Err .
NOTE
Algunas aplicaciones host de Visual Basic no pueden crear objetos. Consulte la documentación de la aplicación host para
determinar si puede crear clases y objetos.
Ejemplo
En este ejemplo se utiliza la instrucción Error para generar el número de error 11.
Requisitos
Espacio de nombres: Microsoft. VisualBasic
Ensamblado: Biblioteca en tiempo de ejecución de Visual Basic (en Microsoft. VisualBasic. dll)
Vea también
Clear
Err
Raise
On Error (instrucción)
Resume (instrucción)
Mensajes de error
Event (Instrucción)
27/11/2019 • 12 minutes to read • Edit Online
Sintaxis
[ <attrlist> ] [ accessmodifier ] _
[ Shared ] [ Shadows ] Event eventname[(parameterlist)] _
[ Implements implementslist ]
' -or-
[ <attrlist> ] [ accessmodifier ] _
[ Shared ] [ Shadows ] Event eventname As delegatename _
[ Implements implementslist ]
' -or-
[ <attrlist> ] [ accessmodifier ] _
[ Shared ] [ Shadows ] Custom Event eventname As delegatename _
[ Implements implementslist ]
[ <attrlist> ] AddHandler(ByVal value As delegatename)
[ statements ]
End AddHandler
[ <attrlist> ] RemoveHandler(ByVal value As delegatename)
[ statements ]
End RemoveHandler
[ <attrlist> ] RaiseEvent(delegatesignature)
[ statements ]
End RaiseEvent
End Event
Elementos
PA RT E DESC RIP C IÓ N
interface . definedname
Comentarios
Una vez declarado el evento, use la instrucción RaiseEvent para generar el evento. Un evento típico
podría declararse y provocarse tal como se muestra en los fragmentos siguientes:
Para controlar un evento, debe asociarlo a una subrutina del controlador de eventos mediante la
instrucción Handles o AddHandler . Las firmas de la subrutina y del evento deben coincidir. Para controlar
un evento compartido, debe usar la instrucción AddHandler .
Solo se puede usar Event en un nivel de módulo. Esto significa que el contexto de la declaración de un
evento debe ser una clase, una estructura, un módulo o una interfaz, y no puede ser un archivo de código
fuente, un espacio de nombres, un procedimiento o un bloque. Para obtener más información, vea
Declaration Contexts and Default Access Levels (Contextos de declaración y niveles de acceso
predeterminados).
En la mayoría de los casos, puede usar la primera sintaxis de la sección Sintaxis de este tema para
declarar los eventos. Sin embargo, algunos escenarios requieren un mayor control sobre el
comportamiento detallado del evento. La última sintaxis de la sección Sintaxis de este tema, que usa la
palabra clave Custom , proporciona ese control permitiéndole definir eventos personalizados. En un
evento personalizado, debe especificar exactamente lo que sucede cuando el código agrega o quita un
controlador de eventos a o desde el evento, o cuando el código provoca el evento. Para obtener ejemplos,
vea Cómo: declarar eventos personalizados para conservar memoria y Cómo: declarar eventos
personalizados para evitar bloqueos.
Ejemplo
En el ejemplo siguiente se usan eventos para contar los segundos de 10 a 0. El código muestra algunos
de los métodos, propiedades e instrucciones relacionados con eventos. Esto incluye la instrucción
RaiseEvent .
La clase que provoca un evento es el origen del evento, y los métodos que procesan el evento son los
controladores de eventos. Un origen de eventos puede tener varios controladores para los eventos que
genera. Cuando la clase genera el evento, ese evento se genera en cada clase que eligió controlar eventos
para esa instancia del objeto.
El ejemplo también usa un formulario ( Form1 ) con un botón ( Button1 ) y un cuadro de texto ( TextBox1 ).
Al hacer clic en el botón, el primer cuadro de texto muestra una cuenta atrás de 10 a 0 segundos. Cuando
transcurre el tiempo (10 segundos), el primer cuadro de texto muestra "Done".
El código de Form1 especifica los estados inicial y terminal del formulario. También contiene el código
que se ejecuta cuando se producen eventos.
Para usar este ejemplo, abra un nuevo proyecto de Windows Forms. Agregue un botón denominado
Button1 y un cuadro de texto denominado TextBox1 al formulario principal, denominado Form1 . A
continuación, haga clic con el botón secundario en el formulario y haga clic en Ver código para abrir el
editor de código.
Agregue una variable WithEvents a la sección de declaraciones de la clase Form1 :
Agregue el código siguiente al código de Form1 . Sustituya los procedimientos duplicados que existan,
como Form_Load o Button_Click .
Private Sub Form1_Load() Handles MyBase.Load
Button1.Text = "Start"
mText = New TimerState
End Sub
Private Sub Button1_Click() Handles Button1.Click
mText.StartCountdown(10.0, 0.1)
End Sub
Class TimerState
Public Event UpdateTime(ByVal Countdown As Double)
Public Event Finished()
Public Sub StartCountdown(ByVal Duration As Double,
ByVal Increment As Double)
Dim Start As Double = DateAndTime.Timer
Dim ElapsedTime As Double = 0
Presione F5 para ejecutar el ejemplo anterior y haga clic en el botón iniciar . El primer cuadro de texto
empieza la cuenta atrás de los segundos. Cuando transcurre el tiempo (10 segundos), el primer cuadro de
texto muestra "Done".
NOTE
El método My.Application.DoEvents no procesa los eventos de la misma manera que el formulario. Para
habilitar el formulario de modo que controle directamente los eventos, puede usar multithreading. Para obtener
más información, vea subprocesamiento administrado.
Vea también
RaiseEvent (instrucción)
Implements (instrucción)
Eventos
AddHandler (instrucción)
RemoveHandler (instrucción)
Handles
Delegate (instrucción)
Declarar eventos personalizados para conservar memoria
Declarar eventos personalizados para evitar bloqueos
Shared
Shadows
Exit (Instrucción, Visual Basic)
27/11/2019 • 6 minutes to read • Edit Online
Sintaxis
Exit { Do | For | Function | Property | Select | Sub | Try | While }
Instrucciones
Exit Do
Sale inmediatamente del bucle Do en el que aparece. La ejecución continúa con la instrucción que sigue a la
instrucción Loop . Exit Do solo se puede usar dentro de un bucle de Do . Cuando se usa dentro de bucles Do
anidados, Exit Do sale del bucle más interno y transfiere el control al siguiente nivel superior de anidamiento.
Exit For
Sale inmediatamente del bucle For en el que aparece. La ejecución continúa con la instrucción que sigue a la
instrucción Next . Exit For solo se puede usar dentro de un bucle For ... Next o For Each ... Next . Cuando se
usa dentro de bucles For anidados, Exit For sale del bucle más interno y transfiere el control al siguiente
nivel superior de anidamiento.
Exit Function
Sale inmediatamente del procedimiento de Function en el que aparece. La ejecución continúa con la
instrucción que sigue a la instrucción que llamó al procedimiento Function . Exit Function solo se puede usar
dentro de un procedimiento Function .
Para especificar un valor devuelto, puede asignar el valor al nombre de la función en una línea antes de la
instrucción Exit Function . Para asignar el valor devuelto y salir de la función en una instrucción, en su lugar
puede usar la instrucción return.
Exit Property
Sale inmediatamente del procedimiento de Property en el que aparece. La ejecución continúa con la
instrucción que llamó al procedimiento Property , es decir, con la instrucción que solicita o establece el valor de
la propiedad. Exit Property solo se puede usar dentro del procedimiento de Get o Set de una propiedad.
Para especificar un valor devuelto en un procedimiento Get , puede asignar el valor al nombre de la función en
una línea antes de la instrucción Exit Property . Para asignar el valor devuelto y salir del procedimiento Get
en una instrucción, en su lugar puede usar la instrucción Return .
En un procedimiento de Set , la instrucción Exit Property es equivalente a la instrucción Return .
Exit Select
Sale inmediatamente del bloque Select Case en el que aparece. La ejecución continúa con la instrucción que
sigue a la instrucción End Select . Exit Select solo se puede usar dentro de una instrucción de Select Case .
Exit Sub
Sale inmediatamente del procedimiento de Sub en el que aparece. La ejecución continúa con la instrucción
que sigue a la instrucción que llamó al procedimiento Sub . Exit Sub solo se puede usar dentro de un
procedimiento Sub .
En un procedimiento de Sub , la instrucción Exit Sub es equivalente a la instrucción Return .
Exit Try
Sale inmediatamente del bloque Try o Catch en el que aparece. La ejecución continúa con el bloque Finally
si hay alguno, o con la instrucción que sigue a la instrucción End Try de lo contrario. Exit Try solo se puede
usar dentro de un bloque de Try o Catch y no dentro de un bloque de Finally .
Exit While
Sale inmediatamente del bucle While en el que aparece. La ejecución continúa con la instrucción que sigue a la
instrucción End While . Exit While solo se puede usar dentro de un bucle de While . Cuando se usa dentro de
bucles While anidados, Exit While transfiere el control al bucle que está un nivel anidado por encima del
bucle donde se produce Exit While .
Comentarios
No confunda Exit instrucciones con instrucciones de End . Exit no define el final de una instrucción.
Ejemplo
En el ejemplo siguiente, la condición de bucle detiene el bucle cuando la variable de index es mayor que 100.
Sin embargo, la instrucción If del bucle hace que la instrucción Exit Do detenga el bucle cuando la variable
de índice sea mayor que 10.
Debug.WriteLine("")
' Output: 0 1 2 3 4 5 6 7 8 9 10
Ejemplo
En el ejemplo siguiente se asigna el valor devuelto al nombre de función myFunction y, a continuación, se usa
Exit Function para devolver de la función:
Ejemplo
En el ejemplo siguiente se usa la instrucción return para asignar el valor devuelto y salir de la función:
Function MyFunction(ByVal j As Integer) As Double
Return 3.87 * j
End Function
Vea también
Continue (instrucción)
Do...Loop (instrucción)
End (instrucción)
For Each...Next (instrucción)
For...Next (instrucción)
Function (instrucción)
Return (instrucción)
Stop (instrucción)
Sub (instrucción)
Try...Catch...Finally (instrucción)
Instrucciones F-P
27/11/2019 • 2 minutes to read • Edit Online
Palabra clave <Option > Option Compare Option Explicit Option Infer
Vea también
Instrucciones de la A a la E
Instrucciones de la Q a la Z
Referencia del lenguaje Visual Basic
Instrucción For Each...Next (Visual Basic)
27/11/2019 • 23 minutes to read • Edit Online
Sintaxis
For Each element [ As datatype ] In group
[ statements ]
[ Continue For ]
[ statements ]
[ Exit For ]
[ statements ]
Next [ element ]
Elementos
T ÉRM IN O DEF IN IC IÓ N
Exit For Opcional. Transfiere el control fuera del bucle For Each .
Ejemplo sencillo
Use un bucle For Each ... Next cuando desee repetir un conjunto de instrucciones para cada elemento de
una colección o matriz.
TIP
Una para... La siguiente instrucción funciona bien cuando se puede asociar cada iteración de un bucle a una variable
de control y determinar los valores iniciales y finales de la variable. Sin embargo, cuando se trabaja con una
colección, el concepto de valores iniciales y finales no es significativo y no se sabe necesariamente cuántos
elementos tiene la colección. En este tipo de caso, un bucle For Each ... Next suele ser una opción mejor.
En el ejemplo siguiente, el For Each ... Next la instrucción recorre en iteración todos los elementos de una
colección de lista.
Bucles anidados
Puede anidar For Each bucles colocando un bucle dentro de otro.
En el ejemplo siguiente se muestra For Each anidadas... Next Obra.
Al anidar bucles, cada bucle debe tener una variable de element única.
También puede anidar distintos tipos de estructuras de control entre sí. Para obtener más información, vea
estructuras de control anidadas.
Puede incluir cualquier número de instrucciones Exit For en un bucle de For Each . Cuando se usa
dentro de bucles For Each anidados, Exit For hace que la ejecución salga del bucle más interno y
transfiere el control al siguiente nivel superior de anidamiento.
Exit For se suele usar después de una evaluación de alguna condición, por ejemplo, en una estructura
If ... Then ... Else . Es posible que desee usar Exit For para las siguientes condiciones:
Continuar la iteración no es necesario o imposible. Esto puede deberse a un valor erróneo o a una
solicitud de finalización.
Se ha detectado una excepción en una Try ... Catch ... Finally . Puede usar Exit For al final del
bloque de Finally .
Hay un bucle interminable, que es un bucle que podría ejecutar un número de veces grande o
incluso infinito. Si detecta este tipo de condición, puede usar Exit For para escapar el bucle. Para
obtener más información, vea.. . Instrucción Loop.
Iteradores
Un iterador se usa para realizar una iteración personalizada en una colección. Un iterador puede ser una
función o un descriptor de acceso Get . Usa una instrucción Yield para devolver cada elemento de la
colección de uno en uno.
Se llama a un iterador mediante una instrucción For Each...Next . Cada iteración del bucle For Each
llama al iterador. Cuando se alcanza una instrucción Yield en el iterador, se devuelve la expresión de la
instrucción Yield y se conserva la ubicación actual en el código. La ejecución se reinicia desde esa
ubicación la próxima vez que se llama al iterador.
En el ejemplo siguiente se utiliza una función de iterador. La función de iterador tiene una instrucción
Yield que se encuentra dentro de un ... Siguiente bucle. En el método ListEvenNumbers , cada iteración del
cuerpo de la instrucción For Each crea una llamada a la función de iterador, que continúa con la siguiente
instrucción Yield .
Public Sub ListEvenNumbers()
For Each number As Integer In EvenSequence(5, 18)
Debug.Write(number & " ")
Next
Debug.WriteLine("")
' Output: 6 8 10 12 14 16 18
End Sub
Implementación técnica
Cuando una For Each ... Next la instrucción se ejecuta, Visual Basic evalúa la colección solo una vez, antes
de que se inicie el bucle. Si el bloque de instrucciones cambia element o group , estos cambios no afectan
a la iteración del bucle.
Cuando todos los elementos de la colección se han asignado sucesivamente a element , el bucle For Each
detiene y el control pasa a la instrucción que sigue a la instrucción Next .
Si Option Infer es on (su configuración predeterminada), el compilador Visual Basic puede deducir el tipo
de datos de element . Si está desactivado y element no se ha declarado fuera del bucle, debe declararlo en
la instrucción For Each . Para declarar el tipo de datos de element explícitamente, utilice una cláusula As .
A menos que el tipo de datos del elemento esté definido fuera de la construcción For Each ... Next , su
ámbito es el cuerpo del bucle. Tenga en cuenta que no puede declarar element fuera y dentro del bucle.
Opcionalmente, puede especificar element en la instrucción Next . Esto mejora la legibilidad del
programa, sobre todo si tiene bucles For Each anidados. Debe especificar la misma variable que la que
aparece en la instrucción For Each correspondiente.
Puede que desee evitar cambiar el valor de element dentro de un bucle. Esto puede dificultar la lectura y
depuración del código. Cambiar el valor de group no afecta a la colección ni a sus elementos, que se
determinaron cuando el bucle se introdujo por primera vez.
Al anidar bucles, si se encuentra una instrucción Next de un nivel de anidamiento externo antes del Next
de un nivel interno, el compilador indica un error. Sin embargo, el compilador puede detectar este error
superpuesto solo si se especifica element en cada instrucción Next .
Si el código depende de atravesar una colección en un orden determinado, un bucle For Each ... Next no
es la mejor opción, a menos que conozca las características del objeto de enumerador que expone la
colección. Visual Basic, pero con el método MoveNext del objeto de enumerador, no determina el orden de
recorrido. Por lo tanto, es posible que no pueda predecir qué elemento de la colección es el primero que se
devolverá en element , o que es el siguiente que se devolverá después de un elemento determinado.
Podría obtener resultados más confiables mediante una estructura de bucle diferente, como For ... Next o
Do ... Loop .
El tiempo de ejecución debe ser capaz de convertir los elementos de group en element . La instrucción [
Option Strict ] controla si se permiten las conversiones de ampliación y de restricción ( Option Strict
está desactivada, su valor predeterminado) o si solo se permiten conversiones de ampliación (
Option Strict está activada). Para obtener más información, vea conversiones de restricción.
El tipo de datos de group debe ser un tipo de referencia que haga referencia a una colección o una matriz
que sea Enumerable. Normalmente, esto significa que group hace referencia a un objeto que implementa
la interfaz de IEnumerable del espacio de nombres System.Collections o la interfaz IEnumerable<T> del
espacio de nombres System.Collections.Generic . System.Collections.IEnumerable define el método de
GetEnumerator, que devuelve un objeto de enumerador para la colección. El objeto de enumerador
implementa la interfaz System.Collections.IEnumerator del espacio de nombres System.Collections y
expone la propiedad Current y los métodos Reset y MoveNext. Visual Basic los usa para recorrer la
colección.
Conversiones de restricción
Cuando Option Strict se establece en On , las conversiones de restricción suelen producir errores del
compilador. Sin embargo, en una instrucción For Each , las conversiones de los elementos de group a
element se evalúan y se realizan en tiempo de ejecución, y se suprimen los errores del compilador
causados por las conversiones de restricción.
En el ejemplo siguiente, la asignación de m como el valor inicial de n no se compila cuando
Option Strict está activado porque la conversión de un Long en una Integer es una conversión de
restricción. En la instrucción For Each , sin embargo, no se genera ningún error del compilador, aunque la
asignación a number requiere la misma conversión de Long a Integer . En la instrucción For Each que
contiene un número grande, se produce un error en tiempo de ejecución cuando se aplica ToInteger al
número grande.
Option Strict On
Module Module1
Sub Main()
' The assignment of m to n causes a compiler error when
' Option Strict is on.
Dim m As Long = 987
'Dim n As Integer = m
' The For Each loop requires the same conversion but
' causes no errors, even when Option Strict is on.
For Each number As Integer In New Long() {45, 3, 987}
Console.Write(number & " ")
Next
Console.WriteLine()
' Output: 45 3 987
Console.ReadKey()
End Sub
End Module
Llamadas IEnumerator
Cuando se inicia la ejecución de un bucle For Each ... Next , Visual Basic comprueba que group hace
referencia a un objeto de colección válido. Si no es así, se produce una excepción. De lo contrario, llama al
método MoveNext y a la propiedad Current del objeto enumerador para devolver el primer elemento. Si
MoveNext indica que no hay ningún elemento siguiente, es decir, si la colección está vacía, el bucle
For Each detiene y el control pasa a la instrucción que sigue a la instrucción Next . De lo contrario, Visual
Basic establece element en el primer elemento y ejecuta el bloque de instrucciones.
Cada vez que Visual Basic encuentra la instrucción Next , vuelve a la instrucción For Each . Una vez más,
llama a MoveNext y Current para devolver el elemento siguiente y, de nuevo, ejecuta el bloque o detiene
el bucle en función del resultado. Este proceso continúa hasta que MoveNext indica que no hay ningún
elemento siguiente o se encuentra una instrucción de Exit For .
Modificar la colección. El objeto de enumerador devuelto por GetEnumerator normalmente no permite
cambiar la colección agregando, eliminando, reemplazando o reordenando los elementos. Si cambia la
colección después de haber iniciado un bucle For Each ... Next , el objeto de enumerador deja de ser válido
y el siguiente intento de obtener acceso a un elemento produce una excepción InvalidOperationException.
Sin embargo, este bloqueo de modificación no viene determinado por Visual Basic, sino por la
implementación de la interfaz IEnumerable. Es posible implementar IEnumerable de forma que permita la
modificación durante la iteración. Si está pensando en realizar esta modificación dinámica, asegúrese de
que comprende las características de la implementación de IEnumerable en la colección que está
utilizando.
Modificar elementos de la colección. La propiedad Current del objeto enumerador es de solo lecturay
devuelve una copia local de cada elemento de la colección. Esto significa que no se pueden modificar los
propios elementos en un bucle For Each ... Next . Cualquier modificación que realice solo afectará a la
copia local de Current y no se reflejará de nuevo en la colección subyacente. Sin embargo, si un elemento
es un tipo de referencia, puede modificar los miembros de la instancia a la que señala. En el ejemplo
siguiente se modifica el miembro de BackColor de cada elemento thisControl . Sin embargo, no puede
modificar thisControl mismo.
Ejemplo
En el ejemplo siguiente se enumeran todas las carpetas de C:\ directorio mediante la clase DirectoryInfo.
Ejemplo
En el ejemplo siguiente se muestra un procedimiento para ordenar una colección. El ejemplo ordena las
instancias de una clase Car que se almacenan en un List<T>. La clase Car implementa la interfaz
IComparable<T>, que requiere implementar el método CompareTo.
Cada llamada al método CompareTo realiza una comparación única que se usa para la ordenación. El
código escrito por el usuario en el método CompareTo devuelve un valor para cada comparación del
objeto actual con otro objeto. El valor devuelto es menor que cero si el objeto actual es menor que el otro
objeto, mayor que cero si el objeto actual es mayor que el otro objeto y cero si son iguales. Esto permite
definir en el código los criterios de mayor que, menor que e igual.
En el método ListCars , la instrucción cars.Sort() ordena la lista. Esta llamada al método Sort de
List<T> hace que se llame automáticamente al método CompareTo para los objetos Car de List .
' Output:
' blue 50 car4
' blue 30 car5
' blue 20 car1
' green 50 car7
' green 10 car3
' red 60 car6
' red 50 car2
End Sub
Return compare
End Function
End Class
Vea también
Colecciones
For...Next (instrucción)
Estructuras de bucle
While...End While (instrucción)
Do...Loop (instrucción)
Conversiones de ampliación y de restricción
Inicializadores de objeto: Tipos con nombre y anónimos
Inicializadores de colección
Matrices
Instrucción For...Next (Visual Basic)
27/11/2019 • 15 minutes to read • Edit Online
Sintaxis
For counter [ As datatype ] = start To end [ Step step ]
[ statements ]
[ Continue For ]
[ statements ]
[ Exit For ]
[ statements ]
Next [ counter ]
Elementos
PA RT E DESC RIP C IÓ N
Ejemplos sencillos
Use una estructura For ... Next cuando desee repetir un conjunto de instrucciones un número de veces.
En el ejemplo siguiente, la variable index comienza con un valor de 1 y se incrementa con cada iteración
del bucle, finalizando después del valor de index llega a 5.
En el ejemplo siguiente, la variable number comienza en 2 y se reduce en 0,25 en cada iteración del bucle,
finalizando después de que el valor de number llegue a 0. El argumento Step de -.25 reduce el valor en
0,25 en cada iteración del bucle.
TIP
While... End while instrucción o do... La instrucción de bucle funciona bien cuando no se sabe de antemano cuántas
veces ejecutar las instrucciones en el bucle. Sin embargo, cuando espera ejecutar el bucle un número determinado
de veces, un bucle For ... Next es una mejor opción. El número de iteraciones se determina cuando se escribe el
bucle por primera vez.
Anidar bucles
Puede anidar For bucles colocando un bucle dentro de otro. En el ejemplo siguiente se muestran las
estructuras For anidadas... Next que tienen valores de paso diferentes. El bucle exterior crea una cadena
para cada iteración del bucle. El bucle interno reduce una variable de contador de bucle para cada
iteración del bucle.
For indexA = 1 To 3
' Create a new StringBuilder, which is used
' to efficiently build strings.
Dim sb As New System.Text.StringBuilder()
Al anidar bucles, cada bucle debe tener una variable de counter única.
También puede anidar distintos tipos de estructuras de control. Para obtener más información, vea
estructuras de control anidadas.
Puede incluir cualquier número de instrucciones Exit For en un For ... Next bucle Cuando se usa dentro
de For anidadas... Next bucles, Exit For sale del bucle más interno y transfiere el control al siguiente
nivel superior de anidamiento.
Exit For se usa a menudo después de evaluar alguna condición (por ejemplo, en una estructura If ...
Then ... Else ). Es posible que desee usar Exit For para las siguientes condiciones:
Implementación técnica
Cuando se inicia un bucle For ... Next , Visual Basic evalúa start , end y step . Visual Basic evalúa estos
valores solo en este momento y, a continuación, asigna start a counter . Antes de que se ejecute el
bloque de instrucciones, Visual Basic compara counter con end . Si counter ya es mayor que el valor de
end (o menor si step es negativo), el bucle de For finaliza y el control pasa a la instrucción que sigue a
la instrucción Next . De lo contrario, se ejecuta el bloque de instrucciones.
Cada vez que Visual Basic encuentra la instrucción Next , incrementa counter de step y vuelve a la
instrucción For . Una vez más, compara counter con end y, de nuevo, ejecuta el bloque o sale del bucle,
en función del resultado. Este proceso continúa hasta que counter pasa end o se encuentra una
instrucción Exit For .
El bucle no se detiene hasta que counter ha pasado end . Si counter es igual a end , el bucle continúa.
La comparación que determina si se va a ejecutar el bloque es counter <= end si step es positivo y
counter >= end si step es negativo.
Si cambia el valor de counter mientras se encuentra dentro de un bucle, el código podría ser más difícil
de leer y depurar. Cambiar el valor de start , end o step no afecta a los valores de iteración que se
determinaron cuando se escribió el bucle por primera vez.
Si anida bucles, el compilador indicará un error si encuentra la instrucción Next de un nivel de
anidamiento externo antes de la instrucción Next de un nivel interno. Sin embargo, el compilador puede
detectar este error superpuesto solo si se especifica counter en cada instrucción Next .
Argumento Step
El valor de step puede ser positivo o negativo. Este parámetro determina el procesamiento de bucles
según la tabla siguiente:
Sí No Sí.
El tipo de datos de counter determina el tipo de la iteración, que debe ser uno de los siguientes tipos:
Byte , SByte , UShort , Short , UInteger , Integer , ULong , Long , Decimal , Single o Double .
Una enumeración que se declara mediante una instrucción enum.
Un Object .
de tipo que tiene los operadores siguientes, donde
T B es un tipo que se puede utilizar en una
expresión Boolean .
Public Shared Operator >= (op1 As T, op2 As T) As B
Opcionalmente, puede especificar la variable counter en la instrucción Next . Esta sintaxis mejora la
legibilidad del programa, sobre todo si tiene bucles For anidados. Debe especificar la variable que
aparece en la instrucción de For correspondiente.
Las expresiones start , end y step pueden evaluarse como cualquier tipo de datos que se amplíe al tipo
de counter . Si usa un tipo definido por el usuario para counter , es posible que tenga que definir el
CType operador de conversión para convertir los tipos de start , end o step al tipo de counter .
Ejemplo
En el ejemplo siguiente se quitan todos los elementos de una lista genérica. En lugar de para cada...
Instrucción siguiente, en el ejemplo se muestra una instrucción For ... Next que itera en orden
descendente. En el ejemplo se utiliza esta técnica porque el método removeAt hace que los elementos
situados después del elemento quitado tengan un valor de índice inferior.
Dim lst As New List(Of Integer) From {10, 20, 30, 40}
Debug.WriteLine(lst.Count.ToString)
' Output: 0
Ejemplo
En el ejemplo siguiente se recorre en iteración una enumeración declarada mediante una instrucción
enum.
Ejemplo
En el ejemplo siguiente, los parámetros de instrucción usan una clase que tiene sobrecargas de operador
para los operadores + , - , >= y <= .
Private Class Distance
Public Property Number() As Double
Public Shared Operator -(ByVal op1 As Distance, ByVal op2 As Distance) As Distance
Return New Distance(op1.Number - op2.Number)
End Operator
Public Shared Operator >=(ByVal op1 As Distance, ByVal op2 As Distance) As Boolean
Return (op1.Number >= op2.Number)
End Operator
Public Shared Operator <=(ByVal op1 As Distance, ByVal op2 As Distance) As Boolean
Return (op1.Number <= op2.Number)
End Operator
End Class
' Output: 10 14 18 22
End Sub
Vea también
List<T>
Estructuras de bucle
While...End While (instrucción)
Do...Loop (instrucción)
Estructuras de control anidadas
Exit (instrucción)
Colecciones
Function (Instrucción, Visual Basic)
27/11/2019 • 15 minutes to read • Edit Online
Sintaxis
[ <attributelist> ] [ accessmodifier ] [ proceduremodifiers ] [ Shared ] [ Shadows ] [ Async |
Iterator ]
Function name [ (Of typeparamlist) ] [ (parameterlist) ] [ As returntype ] [ Implements
implementslist | Handles eventlist ]
[ statements ]
[ Exit Function ]
[ statements ]
End Function
Elementos
attributelist
NotOverridable Overrides
Shared
Opcional. Lista de parámetros de tipo para un procedimiento genérico. Consulte lista de tipos.
parameterlist
Opcional. Lista de nombres de variables locales que representan los parámetros de este
procedimiento. Vea lista de parámetros.
returntype
Es obligatorio si se On``Option Strict . Tipo de datos del valor devuelto por este
procedimiento.
Implements
PA RT E DESC RIP C IÓ N
Handles
Opcional. Indica que este procedimiento puede controlar uno o más eventos concretos. Vea
identificadores.
eventlist
PA RT E DESC RIP C IÓ N
statements
Comentarios
Todo el código ejecutable debe estar dentro de un procedimiento. Cada procedimiento, a su vez, se
declara dentro de una clase, una estructura o un módulo al que se hace referencia como la clase,
estructura o módulo contenedor.
Para devolver un valor al código de llamada, use un procedimiento Function ; de lo contrario, use un
procedimiento Sub .
NOTE
Puede usar expresiones lambda para definir expresiones de función alineadas. Para obtener más información,
vea expresión de función y expresiones lambda.
Las instrucciones Exit Function y Return producen una salida inmediata de un procedimiento de
Function . Cualquier número de instrucciones Exit Function y Return puede aparecer en cualquier
parte del procedimiento y se pueden mezclar instrucciones Exit Function y Return .
Si usa Exit Function sin asignar un valor a name , el procedimiento devuelve el valor predeterminado
para el tipo de datos especificado en returntype . Si no se especifica returntype , el procedimiento
devuelve Nothing , que es el valor predeterminado para Object .
NOTE
Un procedimiento Async devuelve al autor de la llamada cuando encuentra el primer objeto esperado que
aún no se ha completado o hasta el final de la Async procedimiento, lo que ocurra primero.
Una función Async puede tener un tipo de valor devuelto de Task<TResult> o Task. A continuación se
proporciona un ejemplo de una función de Async que tiene un tipo de valor devuelto de
Task<TResult>.
Una función Async no puede declarar ningún parámetro ByRef .
Una instrucción Sub también se puede marcar con el modificador Async . Se utiliza principalmente
para los controladores de eventos, donde no se puede devolver un valor. No se puede esperar a un
procedimiento de Sub de Async , y el llamador de un procedimiento de Sub de Async no puede
detectar las excepciones producidas por el procedimiento Sub .
Para obtener más información sobre las funciones de Async , vea programación asincrónica con
Async y Await, flujo de control en programas asincrónicosy tipos de valor devueltos asincrónicos.
Funciones de iterador
Una función de iterador realiza una iteración personalizada en una colección, como una lista o una
matriz. Una función de iterador utiliza la instrucción yield para devolver cada elemento de uno en uno.
Cuando se alcanza una instrucción yield , se recuerda la ubicación actual en el código. La ejecución se
reinicia desde esa ubicación la próxima vez que se llama a la función del iterador.
Se llama a un iterador desde el código de cliente mediante un método for each... Instrucción siguiente
.
El tipo de valor devuelto de una función de iterador puede ser IEnumerable, IEnumerable<T>,
IEnumeratoro IEnumerator<T>.
Para obtener más información, consulta Iteradores.
Ejemplo
En el ejemplo siguiente se usa la instrucción Function para declarar el nombre, los parámetros y el
código que forman el cuerpo de un procedimiento Function . El modificador ParamArray permite que
la función acepte un número variable de argumentos.
Public Function CalcSum(ByVal ParamArray args() As Double) As Double
CalcSum = 0
If args.Length <= 0 Then Exit Function
For i As Integer = 0 To UBound(args, 1)
CalcSum += args(i)
Next i
End Function
Ejemplo
En el ejemplo siguiente se invoca la función declarada en el ejemplo anterior.
Module Module1
Sub Main()
' In the following function call, CalcSum's local variables
' are assigned the following values: args(0) = 4, args(1) = 3,
' and so on. The displayed sum is 10.
Dim returnedValue As Double = CalcSum(4, 3, 2, 1)
Console.WriteLine("Sum: " & returnedValue)
' Parameter args accepts zero or more arguments. The sum
' displayed by the following statements is 0.
returnedValue = CalcSum()
Console.WriteLine("Sum: " & returnedValue)
End Sub
End Module
Ejemplo
En el ejemplo siguiente, DelayAsync es un Function de Async que tiene un tipo de valor devuelto de
Task<TResult>. DelayAsync tiene una instrucción Return que devuelve un entero. Por lo tanto, la
declaración de función de DelayAsync debe tener un tipo de valor devuelto de Task(Of Integer) .
Dado que el tipo de valor devuelto es Task(Of Integer) , la evaluación de la expresión de Await en
DoSomethingAsync produce un entero. Esto se muestra en esta instrucción:
Dim result As Integer = Await delayTask .
' Output:
' Result: 5
Vea también
Sub (instrucción)
Procedimientos de función
Lista de parámetros
Dim (instrucción)
Call (instrucción)
Of
Matrices de parámetros
Utilizar una clase genérica
Solución de problemas de procedimientos
Expresiones lambda
Expresión de función
Get (Instrucción)
27/11/2019 • 6 minutes to read • Edit Online
Declara un procedimiento de propiedad Get que se usa para recuperar el valor de una propiedad.
Sintaxis
[ <attributelist> ] [ accessmodifier ] Get()
[ statements ]
End Get
Elementos
T ÉRM IN O DEF IN IC IÓ N
- protegido
- Friend
- privado
- Protected Friend
Comentarios
Cada propiedad debe tener un procedimiento de propiedad Get a menos que la propiedad esté marcada
WriteOnly . El procedimiento Get se utiliza para devolver el valor actual de la propiedad.
Visual Basic llama automáticamente al procedimiento Get de una propiedad cuando una expresión solicita el
valor de la propiedad.
El cuerpo de la declaración de propiedad solo puede contener los procedimientos Get y Set de la propiedad
entre la instrucción Property y la instrucción End Property . No puede almacenar nada que no sea esos
procedimientos. En concreto, no puede almacenar el valor actual de la propiedad. Debe almacenar este valor
fuera de la propiedad, porque si lo almacena dentro de cualquiera de los procedimientos de propiedad, el otro
procedimiento de propiedad no podrá tener acceso a él. El enfoque habitual es almacenar el valor en una
variable privada declarada en el mismo nivel que la propiedad. Debe definir un procedimiento de Get dentro de
la propiedad a la que se aplica.
El procedimiento Get toma como valor predeterminado el nivel de acceso de la propiedad que lo contiene a
menos que use accessmodifier en la instrucción Get .
Reglas
Niveles de acceso mixtos. Si va a definir una propiedad de lectura y escritura, puede especificar
opcionalmente un nivel de acceso diferente para el Get o el procedimiento de Set , pero no ambos. Si lo
hace, el nivel de acceso del procedimiento debe ser más restrictivo que el nivel de acceso de la propiedad.
Por ejemplo, si la propiedad se declara Friend , puede declarar el Get procedimiento Private , pero no
Public .
Comportamiento
Devolver de un procedimiento. Cuando el procedimiento Get devuelve al código de llamada, la
ejecución continúa dentro de la instrucción que solicitó el valor de propiedad.
Get procedimientos de propiedad pueden devolver un valor mediante la instrucción return o asignando
el valor devuelto al nombre de la propiedad. Para obtener más información, vea el tema sobre el valor
devuelto en la instrucción function.
Las instrucciones Exit Property y Return producen una salida inmediata de un procedimiento de
propiedad. Cualquier número de instrucciones Exit Property y Return puede aparecer en cualquier
parte del procedimiento y se pueden mezclar instrucciones Exit Property y Return .
Valor devuelto. Para devolver un valor de un procedimiento Get , puede asignar el valor al nombre de
la propiedad o incluirlo en una instrucción return. La instrucción Return asigna simultáneamente el valor
devuelto del procedimiento Get y sale del procedimiento.
Si usa Exit Property sin asignar un valor al nombre de la propiedad, el procedimiento Get devuelve el
valor predeterminado del tipo de datos de la propiedad. Para obtener más información, vea el tema sobre
el valor devuelto en la instrucción function.
En el ejemplo siguiente se muestran dos maneras en las que la propiedad de solo lectura quoteForTheDay
puede devolver el valor contenido en la variable privada quoteValue .
Ejemplo
En el ejemplo siguiente se usa la instrucción Get para devolver el valor de una propiedad.
Class propClass
' Define a private local variable to store the property value.
Private currentTime As String
' Define the read-only property.
Public ReadOnly Property DateAndTime() As String
Get
' The Get procedure is called automatically when the
' value of the property is retrieved.
currentTime = CStr(Now)
' Return the date and time As a string.
Return currentTime
End Get
End Property
End Class
Vea también
Set (instrucción)
Property (instrucción)
Exit (instrucción)
Objetos y clases
Tutorial: Definir clases
GoTo (Instrucción)
27/11/2019 • 3 minutes to read • Edit Online
Sintaxis
GoTo line
Parte
line
Obligatorio. Cualquier etiqueta de línea.
Comentarios
La instrucción GoTo solo puede bifurcar a las líneas del procedimiento en el que aparece. La línea debe tener una
etiqueta de línea a la que GoTo pueda hacer referencia. Para obtener más información, vea Cómo: etiquetar
instrucciones.
NOTE
GoTo instrucciones pueden hacer que el código sea difícil de leer y mantener. Siempre que sea posible, use una estructura
de control en su lugar. Para obtener más información, consulte Control Flow.
No se puede usar una instrucción GoTo para bifurcar desde fuera de una For ... Next , For Each ... Next ,
SyncLock ... End SyncLock , Try ... Catch ... Finally , With ... End With o Using ... End Using construcción a una
etiqueta dentro de.
Try bloque) Solo desde un bloque de Catch de la Solo hacia fuera de la construcción
misma construcción 1 completa
1 si una construcción Try ... Catch ... Finally está anidada dentro de otra, un bloque de Catch se puede bifurcar
en el bloque de Try en su propio nivel de anidamiento, pero no en otro bloque de Try . Una construcción Try
anidada... Catch ... Finally debe estar contenida completamente en un bloque Try o Catch de la construcción
en la que está anidada.
En la ilustración siguiente se muestra una construcción Try anidada dentro de otra. Varias ramas entre los
bloques de las dos construcciones se indican como válidas o no válidas.
Ejemplo
En el ejemplo siguiente se usa la instrucción GoTo para bifurcar a las etiquetas de línea de un procedimiento.
Sub GoToStatementDemo()
Dim number As Integer = 1
Dim sampleString As String
' Evaluate number and branch to appropriate label.
If number = 1 Then GoTo Line1 Else GoTo Line2
Line1:
sampleString = "Number equals 1"
GoTo LastLine
Line2:
' The following statement never gets executed because number = 1.
sampleString = "Number equals 2"
LastLine:
' Write "Number equals 1" in the Debug window.
Debug.WriteLine(sampleString)
End Sub
Vea también
Do...Loop (instrucción)
For...Next (instrucción)
For Each...Next (instrucción)
If...Then...Else (instrucción)
Select...Case (instrucción)
Try...Catch...Finally (instrucción)
While...End While (instrucción)
With...End With (instrucción)
Instrucción If...Then...Else (Visual Basic)
27/11/2019 • 8 minutes to read • Edit Online
Sintaxis
' Multiline syntax:
If condition [ Then ]
[ statements ]
[ ElseIf elseifcondition [ Then ]
[ elseifstatements ] ]
[ Else
[ elsestatements ] ]
End If
Elementos
condition
Obligatorio. Expresiones. Debe evaluarse como True o False , o a un tipo de datos que se pueda convertir
implícitamente a Boolean .
Si la expresión es una variable de Boolean que acepta valores NULL y que se evalúa como Nothing, la
condición se trata como si la expresión fuese False , y los bloques de ElseIf se evalúan si existen, o el bloque
de Else se ejecuta si existe.
Then
Requerido en la sintaxis de una sola línea; opcional en la sintaxis de varias líneas.
statements
Opcional. Una o varias instrucciones que siguen If ... Then que se ejecutan si condition se evalúa como True .
elseifcondition
Obligatorio si ElseIf está presente. Expresiones. Debe evaluarse como True o False , o a un tipo de datos
que se pueda convertir implícitamente a Boolean .
elseifstatements
Opcional. Una o varias instrucciones que siguen ElseIf ... Then que se ejecutan si elseifcondition se evalúa
como True .
elsestatements
Opcional. Una o varias instrucciones que se ejecutan si ninguna expresión condition o elseifcondition
anterior se evalúa como True .
End If
Finaliza la versión de varias líneas del bloque If ... Then ... Else .
Comentarios
Sintaxis de varias líneas
Cuando se encuentra una instrucción If ... Then ... Else , se prueba condition . Si condition se True , se
ejecutan las instrucciones siguientes Then . Si se False``condition , cada instrucción de ElseIf (si hay alguna)
se evalúa en orden. Cuando se encuentra un elseifcondition de True , se ejecutan las instrucciones
inmediatamente después de la ElseIf asociada. Si ningún elseifcondition se evalúa como True , o si no hay
ninguna instrucción ElseIf , se ejecutan las instrucciones siguientes Else . Después de ejecutar las
instrucciones que siguen Then , ElseIf o Else , la ejecución continúa con la instrucción que sigue a End If .
Las cláusulas ElseIf y Else son opcionales. Puede tener tantas cláusulas ElseIf como desee en una
instrucción If ... Then ... Else , pero no puede aparecer una cláusula ElseIf después de una cláusula Else . las
instrucciones If ... Then ... Else se pueden anidar unas dentro de otras.
En la sintaxis de varias líneas, la instrucción If debe ser la única instrucción en la primera línea. Las
instrucciones ElseIf , Else y End If solo pueden ir precedidas de una etiqueta de línea. El bloque If ... Then ...
Else debe terminar con una instrucción End If .
TIP
La selección... La instrucción Case podría ser más útil cuando se evalúa una expresión única que tiene varios valores
posibles.
En la sintaxis de una sola línea, se pueden ejecutar varias instrucciones como resultado de una If ... Then
decisión. Todas las instrucciones deben estar en la misma línea y deben estar separadas por dos puntos.
Console.WriteLine(message)
End Sub
End Module
'This example displays output like the following:
' There are 4 items.
Module Nested
Public Sub Main()
' Run the function as part of the WriteLine output.
Console.WriteLine("Time Check is " & CheckIfTime() & ".")
End Sub
Module SingleLine
Public Sub Main()
' If A > 10, execute the three colon-separated statements in the order
' that they appear
If A > 10 Then A = A + 1 : B = B + A : C = C + B
End Sub
End Module
'This example displays output like the following:
'A value before If: 11
'B value before If: 6
'C value before If: 3
'A value after If: 12
'B value after If: 18
'C value after If: 21
Vea también
Choose
Switch
#If...Then...#Else (directivas)
Select...Case (instrucción)
Estructuras de control anidadas
Estructuras de decisión
Operadores lógicos y bit a bit en Visual Basic
If (operador)
Implements (Instrucción)
27/11/2019 • 4 minutes to read • Edit Online
Especifica una o más interfaces, o miembros de interfaz, que se deben implementar en la definición de clase o
estructura en la que aparece.
Sintaxis
Implements interfacename [, ...]
' -or-
Implements interfacename.interfacemember [, ...]
Elementos
interfacename
Obligatorio. Interfaz cuyas propiedades, procedimientos y eventos van a ser implementados por los
miembros correspondientes de la clase o estructura.
interfacemember
Obligatorio. Miembro de una interfaz que se está implementando.
Comentarios
Una interfaz es una colección de prototipos que representan los miembros (propiedades, procedimientos y
eventos) que la interfaz encapsula. Las interfaces contienen solo las declaraciones de los miembros; las clases
y estructuras implementan estos miembros. Para obtener más información, consulta Interfaces.
La instrucción Implements debe seguir inmediatamente a la instrucción Class o Structure .
Al implementar una interfaz, debe implementar todos los miembros declarados en la interfaz. Omitir
cualquier miembro se considera un error de sintaxis. Para implementar un miembro individual, se especifica
la palabra clave Implements (que es independiente de la instrucción Implements ) cuando se declara el
miembro en la clase o estructura. Para obtener más información, consulta Interfaces.
Las clases pueden utilizar implementaciones privadas de propiedades y procedimientos, pero solo se puede
tener acceso a estos miembros si se convierte una instancia de la clase de implementación en una variable
declarada como del tipo de la interfaz.
Ejemplo
En el ejemplo siguiente se muestra cómo utilizar la instrucción Implements para implementar miembros de
una interfaz. Define una interfaz denominada ICustomerInfo con un evento, una propiedad y un
procedimiento. La clase customerInfo implementa todos los miembros definidos en la interfaz.
Public Interface ICustomerInfo
Event UpdateComplete()
Property CustomerName() As String
Sub UpdateCustomerStatus()
End Interface
Tenga en cuenta que la clase customerInfo usa la instrucción Implements en una línea de código fuente
independiente para indicar que la clase implementa todos los miembros de la interfaz ICustomerInfo .
Después, cada miembro de la clase usa la palabra clave Implements como parte de su declaración de
miembro para indicar que implementa ese miembro de interfaz.
Ejemplo
Los dos procedimientos siguientes muestran cómo podría usar la interfaz implementada en el ejemplo
anterior. Para probar la implementación, agregue estos procedimientos al proyecto y llame al procedimiento
testImplements .
Sub HandleUpdateComplete()
' This is the event handler for the UpdateComplete event.
MsgBox("Update is complete.")
End Sub
Vea también
Implements
Interface (instrucción)
Interfaces
Instrucción Imports (Tipo y espacio de nombres de
.NET)
27/11/2019 • 8 minutes to read • Edit Online
Permite hacer referencia a los nombres de tipo sin la calificación de espacio de nombres.
Sintaxis
Imports [ aliasname = ] namespace
' -or-
Imports [ aliasname = ] namespace.element
Elementos
T ÉRM IN O DEF IN IC IÓ N
Comentarios
La instrucción Imports permite hacer referencia directamente a los tipos contenidos en un espacio de
nombres determinado.
Puede proporcionar un único nombre de espacio de nombres o una cadena de espacios de nombres
anidados. Cada espacio de nombres anidado se separa del siguiente espacio de nombres de nivel superior en
un punto ( . ), como se muestra en el ejemplo siguiente:
Imports System.Collections.Generic
Cada archivo de código fuente puede contener cualquier número de instrucciones Imports . Estos deben
seguir cualquier declaración de opción, como la instrucción Option Strict , y deben preceder a las
declaraciones de elementos de programación, como Module o Class instrucciones.
Solo puede usar Imports en el nivel de archivo. Esto significa que el contexto de la declaración para la
importación debe ser un archivo de código fuente y no puede ser un espacio de nombres, una clase, una
estructura, un módulo, una interfaz, un procedimiento o un bloque.
Tenga en cuenta que la instrucción Imports no hace que los elementos de otros proyectos y ensamblados
estén disponibles para el proyecto. La importación no se ocupa del establecimiento de una referencia. Solo
elimina la necesidad de calificar nombres que ya están disponibles para el proyecto. Para obtener más
información, vea "importar elementos contenedores" en referencias a elementos declarados.
NOTE
Puede definir instrucciones de Imports implícitas mediante la Página referencias, el diseñador de proyectos (Visual
Basic). Para obtener más información, consulte Cómo: agregar o quitar espacios de nombres importados (Visual Basic).
Alias de importación
Un alias de importación define el alias de un espacio de nombres o de un tipo. Los alias de importación son
útiles cuando es necesario usar elementos con el mismo nombre que se declaran en uno o varios espacios de
nombres. Para obtener más información y un ejemplo, vea "calificar un nombre de elemento" en referencias a
elementos declarados.
No debe declarar un miembro en el nivel de módulo con el mismo nombre que aliasname . Si lo hace, el
compilador de Visual Basic utiliza aliasname solo para el miembro declarado y ya no lo reconoce como un
alias de importación.
Aunque la sintaxis que se usa para declarar un alias de importación es similar a la que se usa para importar
un prefijo de espacio de nombres XML, los resultados son diferentes. Un alias de importación se puede usar
como una expresión en el código, mientras que un prefijo de espacio de nombres XML solo se puede usar en
literales XML o propiedades de eje XML como prefijo para un nombre de elemento o atributo calificado.
Nombres de elementos
Si proporciona element , debe representar un elemento contenedor, es decir, un elemento de programación
que puede contener otros elementos. Los elementos de contenedor incluyen clases, estructuras, módulos,
interfaces y enumeraciones.
El ámbito de los elementos que se ponen a disposición de una instrucción Imports depende de si se
especifica element . Si solo especifica namespace , todos los miembros con el nombre único de ese espacio de
nombres y los miembros de los elementos contenedores dentro de ese espacio de nombres están disponibles
sin calificación. Si especifica namespace y element , solo estarán disponibles los miembros de ese elemento
sin calificación.
Ejemplo
En el ejemplo siguiente se devuelven todas las carpetas del directorio C:\ mediante la clase DirectoryInfo:
El código no tiene ninguna instrucción Imports en la parte superior del archivo. Por lo tanto, las referencias
de DirectoryInfo, StringBuildery CrLf están completas con los espacios de nombres.
Public Function GetFolders() As String
' Create a new StringBuilder, which is used
' to efficiently build strings.
Dim sb As New System.Text.StringBuilder
Return sb.ToString
End Function
Ejemplo
En el ejemplo siguiente se incluyen instrucciones de Imports para los espacios de nombres a los que se hace
referencia. Por lo tanto, no es necesario que los tipos estén completos con los espacios de nombres.
Return sb.ToString
End Function
Ejemplo
En el ejemplo siguiente se incluyen Imports instrucciones que crean alias para los espacios de nombres a los
que se hace referencia. Los tipos se califican con los alias.
Return sb.ToString
End Function
Ejemplo
En el ejemplo siguiente se incluyen Imports instrucciones que crean alias para los tipos a los que se hace
referencia. Los alias se usan para especificar los tipos.
Return sb.ToString
End Function
Vea también
Namespace (instrucción)
Espacios de nombres en Visual Basic
Referencias y la instrucción Imports
Imports (instrucción), espacio de nombres XML
Referencias a elementos declarados
Imports (Instrucción, Espacio de nombres XML)
27/11/2019 • 7 minutes to read • Edit Online
Importa prefijos de espacios de nombres XML para su uso en literales XML y propiedades de eje XML.
Sintaxis
Imports <xmlns:xmlNamespacePrefix = "xmlNamespaceName">
Elementos
xmlNamespacePrefix
Opcional. Cadena por la que los elementos y atributos XML pueden hacer referencia a xmlNamespaceName . Si no se
proporciona ningún xmlNamespacePrefix , el espacio de nombres XML importado es el espacio de nombres XML
predeterminado. Debe ser un identificador XML válido. Para obtener más información, vea nombres de
elementos y atributos XML declarados.
xmlNamespaceName
Obligatorio. Cadena que identifica el espacio de nombres XML que se va a importar.
Comentarios
Puede utilizar la instrucción Imports para definir espacios de nombres XML globales que puede utilizar con
literales XML y propiedades de eje XML, o como parámetros pasados al operador GetXmlNamespace . (Para obtener
información sobre el uso de la instrucción Imports para importar un alias que se puede usar donde se usan los
nombres de tipo en el código, vea instrucción Imports (espacio de nombres y tipo de .net)). La sintaxis para
declarar un espacio de nombres XML mediante la instrucción Imports es idéntica a la sintaxis utilizada en XML.
Por lo tanto, puede copiar una declaración de espacio de nombres de un archivo XML y utilizarla en una
instrucción Imports .
Los prefijos de espacios de nombres XML son útiles cuando se desea crear repetidamente elementos XML que
son del mismo espacio de nombres. El prefijo de espacio de nombres XML declarado con la instrucción Imports
es global en el sentido de que está disponible para todo el código del archivo. Se puede utilizar al crear literales
de elemento XML y al tener acceso a las propiedades del eje XML. Para obtener más información, vea XML
ELEMENT literal and XML AXIS Properties.
Si define un espacio de nombres XML global sin un prefijo de espacio de nombres (por ejemplo,
Imports <xmlns="http://SomeNameSpace>" ), ese espacio de nombres se considera el espacio de nombres XML
predeterminado. El espacio de nombres XML predeterminado se utiliza para los literales de elemento XML o las
propiedades de eje de atributo XML que no especifican explícitamente un espacio de nombres. También se utiliza
el espacio de nombres predeterminado si el espacio de nombres especificado es el espacio de nombres vacío (es
decir, xmlns="" ). El espacio de nombres XML predeterminado no se aplica a los atributos XML en los literales
XML ni a las propiedades del eje de atributo XML que no tienen un espacio de nombres.
Los espacios de nombres XML que se definen en un literal XML, que se denominan espacios de nombres XML
locales, tienen prioridad sobre los espacios de nombres XML definidos por la instrucción Imports como global.
Los espacios de nombres XML definidos por la instrucción Imports tienen prioridad sobre los espacios de
nombres XML importados para un proyecto de Visual Basic. Si un literal XML define un espacio de nombres XML,
ese espacio de nombres local no se aplica a las expresiones incrustadas.
Los espacios de nombres XML globales siguen las mismas reglas de ámbito y definición que .NET Framework
espacios de nombres. Como resultado, puede incluir una instrucción Imports para definir un espacio de
nombres XML global en cualquier lugar en el que pueda importar un espacio de nombres de .NET Framework.
Esto incluye los archivos de código y los espacios de nombres importados en el nivel de proyecto. Para obtener
información sobre los espacios de nombres importados en el nivel de proyecto, vea Página referencias,
diseñador de proyectos (Visual Basic).
Cada archivo de código fuente puede contener cualquier número de instrucciones Imports . Estas deben seguir
las declaraciones de opciones, como la instrucción Option Strict , y deben preceder a las declaraciones de
elementos de programación, como Module o Class instrucciones.
Ejemplo
En el ejemplo siguiente se importa un espacio de nombres XML predeterminado y un espacio de nombres XML
identificado con el prefijo ns . A continuación, crea literales XML que usan ambos espacios de nombres.
Module Module1
Sub Main()
' Create element by using the default global XML namespace.
Dim inner = <innerElement/>
' Create element by using both the default global XML namespace
' and the namespace identified with the "ns" prefix.
Dim outer = <ns:outer>
<ns:innerElement></ns:innerElement>
<siblingElement></siblingElement>
<%= inner %>
</ns:outer>
End Module
<ns:outer xmlns="http://DefaultNamespace"
xmlns:ns="http://NewNamespace">
<ns:innerElement></ns:innerElement>
<siblingElement></siblingElement>
<innerElement />
</ns:outer>
Ejemplo
En el ejemplo siguiente se importa el prefijo del espacio de nombres XML ns . A continuación, crea un literal
XML que utiliza el prefijo de espacio de nombres y muestra el formulario final del elemento.
' Place Imports statements at the top of your program.
Imports <xmlns:ns="http://SomeNamespace">
Class TestClass1
Dim test =
<ns:outer>
<ns:middle xmlns:ns="http://NewNamespace">
<ns:inner1/>
<%= inner2 %>
</ns:middle>
</ns:outer>
End Class
<ns:outer xmlns:ns="http://SomeNamespace">
<ns:middle xmlns:ns="http://NewNamespace">
<ns:inner1 />
<inner2 xmlns="http://SomeNamespace" />
</ns:middle>
</ns:outer>
Observe que el compilador ha convertido el prefijo de espacio de nombres XML de un prefijo global a una
definición de prefijo local.
Ejemplo
En el ejemplo siguiente se importa el prefijo del espacio de nombres XML ns . A continuación, se usa el prefijo
del espacio de nombres para crear un literal XML y obtener acceso al primer nodo secundario con el nombre
completo ns:name .
Class TestClass4
End Class
Vea también
Literal de elemento XML
Propiedades del eje XML
Nombres de atributos y elementos XML declarados
GetXmlNamespace (operador)
Inherits Statement
27/11/2019 • 4 minutes to read • Edit Online
Hace que la clase o interfaz actual herede los atributos, variables, propiedades, procedimientos y eventos de
otra clase o conjunto de interfaces.
Sintaxis
Inherits basetypenames
Elementos
T ÉRM IN O DEF IN IC IÓ N
O bien,
Comentarios
Si se utiliza, la instrucción Inherits debe ser la primera línea no vacía sin comentarios en una definición de
clase o interfaz. Debe seguir inmediatamente a la instrucción Class o Interface .
Solo puede usar Inherits en una clase o interfaz. Esto significa que el contexto de la declaración de una
herencia no puede ser un archivo de código fuente, un espacio de nombres, una estructura, un módulo, un
procedimiento o un bloque.
Reglas
Herencia de clases. Si una clase utiliza la instrucción Inherits , solo puede especificar una clase base.
Una clase no puede heredar de una clase anidada dentro de ella.
Herencia de interfaz. Si una interfaz utiliza la instrucción Inherits , puede especificar una o varias
interfaces base. Puede heredar de dos interfaces incluso si cada una de ellas define un miembro con el
mismo nombre. Si lo hace, el código de implementación debe usar la calificación de nombre para
especificar qué miembro está implementando.
Una interfaz no puede heredar de otra interfaz con un nivel de acceso más restrictivo. Por ejemplo, una
interfaz de Public no puede heredar de una interfaz de Friend .
Una interfaz no puede heredar de una interfaz anidada dentro de ella.
Un ejemplo de herencia de clases en el .NET Framework es la clase ArgumentException, que hereda de la clase
SystemException. Esto proporciona a ArgumentException todas las propiedades y los procedimientos
predefinidos que requieren las excepciones del sistema, como la propiedad Message y el método ToString.
Un ejemplo de herencia de interfaz en el .NET Framework es la interfaz ICollection, que hereda de la interfaz
IEnumerable. Esto hace que ICollection herede la definición del enumerador necesaria para atravesar una
colección.
Ejemplo
En el ejemplo siguiente se usa la instrucción Inherits para mostrar cómo una clase denominada thisClass
puede heredar todos los miembros de una clase base denominada anotherClass .
Ejemplo
En el ejemplo siguiente se muestra la herencia de varias interfaces.
La interfaz denominada thisInterface ahora incluye todas las definiciones de las interfaces IComparable,
IDisposabley IFormattable que los miembros heredados proporcionan respectivamente para la comparación
específica del tipo de dos objetos, liberando los recursos asignados y expresando el valor de un objeto como
una String . Una clase que implementa thisInterface debe implementar todos los miembros de cada
interfaz base.
Vea también
MustInherit
NotInheritable
Objetos y clases
Fundamentos de la herencia
Interfaces
Instrucción Interface (Visual Basic)
27/11/2019 • 11 minutes to read • Edit Online
Declara el nombre de una interfaz e introduce las definiciones de los miembros que la interfaz contiene.
Sintaxis
[ <attributelist> ] [ accessmodifier ] [ Shadows ] _
Interface name [ ( Of typelist ) ]
[ Inherits interfacenames ]
[ [ modifiers ] Property membername ]
[ [ modifiers ] Function membername ]
[ [ modifiers ] Sub membername ]
[ [ modifiers ] Event membername ]
[ [ modifiers ] Interface membername ]
[ [ modifiers ] Class membername ]
[ [ modifiers ] Structure membername ]
End Interface
Elementos
T ÉRM IN O DEF IN IC IÓ N
- público
- protegido
- Friend
- privado
- Friend protegido
- protegido privado
Inherits Opcional. Indica que esta interfaz hereda los atributos y los
miembros de otra interfaz o interfaces. Vea Inherits
(instrucción).
T ÉRM IN O DEF IN IC IÓ N
Comentarios
Una interfaz define un conjunto de miembros, como propiedades y procedimientos, que las clases y
estructuras pueden implementar. La interfaz solo define las firmas de los miembros y no sus trabajos
internos.
Una clase o estructura implementa la interfaz proporcionando código para cada miembro definido por la
interfaz. Por último, cuando la aplicación crea una instancia a partir de esa clase o estructura, existe un objeto
y se ejecuta en la memoria. Para obtener más información, vea objetos y clases e interfaces.
Interface solo se puede utilizar en un espacio de nombres o un nivel de módulo. Esto significa que el
contexto de la declaración de una interfaz debe ser un archivo de código fuente, un espacio de nombres, una
clase, una estructura, un módulo o una interfaz y no puede ser un procedimiento o un bloque. Para obtener
más información, vea Declaration Contexts and Default Access Levels (Contextos de declaración y niveles de
acceso predeterminados).
El acceso predeterminado de las interfaces es Friend . Los niveles de acceso se pueden ajustar con los
modificadores de acceso. Para obtener más información, consulte niveles de acceso en Visual Basic.
Reglas
Anidar interfaces. Puede definir una interfaz dentro de otra. La interfaz externa se denomina interfaz
contenedoray la interfaz interna se denomina interfaz anidada.
Declaración de miembro. Cuando se declara una propiedad o un procedimiento como miembro de
una interfaz, solo se define la firma de esa propiedad o procedimiento. Esto incluye el tipo de elemento
(propiedad o procedimiento), sus parámetros y tipos de parámetro, y su tipo de valor devuelto. Debido
a esto, la definición de miembro usa solo una línea de código y las instrucciones de terminación como
End Function o End Property no son válidas en una interfaz.
Por el contrario, cuando se define una enumeración o una estructura, o una clase o interfaz anidada, es
necesario incluir sus miembros de datos.
Modificadores de miembro. No se puede usar ningún modificador de acceso al definir miembros
de módulo, ni se puede especificar un modificador de procedimiento compartido o Any excepto
sobrecargas. Puede declarar cualquier miembro con sombras, y puede usar el valor predeterminado al
definir una propiedad, así como ReadOnly o WriteOnly.
Herencia. Si la interfaz utiliza la instrucción Inherits, puede especificar una o varias interfaces base.
Puede heredar de dos interfaces incluso si cada una de ellas define un miembro con el mismo nombre.
Si lo hace, el código de implementación debe usar la calificación de nombre para especificar qué
miembro está implementando.
Una interfaz no puede heredar de otra interfaz con un nivel de acceso más restrictivo. Por ejemplo, una
interfaz de Public no puede heredar de una interfaz de Friend .
Una interfaz no puede heredar de una interfaz anidada dentro de ella.
Aplicación. Cuando una clase usa la instrucción Implements para implementar esta interfaz, debe
implementar todos los miembros definidos en la interfaz. Además, cada firma del código que
implementa debe coincidir exactamente con la firma correspondiente definida en esta interfaz. Sin
embargo, el nombre del miembro en el código de implementación no tiene que coincidir con el
nombre de miembro definido en la interfaz.
Cuando una clase implementa un procedimiento, no puede designar el procedimiento como Shared .
Propiedad predeterminada. Una interfaz puede especificar como máximo una propiedad como su
propiedad predeterminada, a la que se puede hacer referencia sin usar el nombre de la propiedad. Para
especificar este tipo de propiedad, se declara con el modificador predeterminado .
Tenga en cuenta que esto significa que una interfaz solo puede definir una propiedad predeterminada
si hereda ninguno.
Comportamiento
Nivel de acceso. Todos los miembros de interfaz tienen acceso público de forma implícita. No se
puede usar ningún modificador de acceso al definir un miembro. Sin embargo, una clase que
implementa la interfaz puede declarar un nivel de acceso para cada miembro implementado.
Si asigna una instancia de clase a una variable, el nivel de acceso de sus miembros puede depender de
si el tipo de datos de la variable es la interfaz subyacente o la clase de implementación. En el ejemplo
siguiente se ilustra esto.
Public Interface IDemo
Sub DoSomething()
End Interface
Public Class implementIDemo
Implements IDemo
Private Sub DoSomething() Implements IDemo.DoSomething
End Sub
End Class
Dim varAsInterface As IDemo = New implementIDemo()
Dim varAsClass As implementIDemo = New implementIDemo()
Si tiene acceso a los miembros de clase a través de varAsInterface , todos tienen acceso público. Sin
embargo, si obtiene acceso a los miembros a través de varAsClass , el Sub procedimiento
doSomething tiene acceso privado.
ID. Una interfaz está en el ámbito a lo largo de su espacio de nombres, clase, estructura o módulo.
El ámbito de cada miembro de interfaz es toda la interfaz.
Validez. Una interfaz no tiene una duración, ni sus miembros. Cuando una clase implementa una
interfaz y un objeto se crea como una instancia de esa clase, el objeto tiene una duración dentro de la
aplicación en la que se está ejecutando. Para obtener más información, vea "Lifetime" en la instrucción
Class.
Ejemplo
En el ejemplo siguiente se usa la instrucción Interface para definir una interfaz denominada thisInterface ,
que debe implementarse con una instrucción Property y una instrucción Function .
Tenga en cuenta que las instrucciones Property y Function no presentan los bloques que terminan con
End Property y End Function dentro de la interfaz. La interfaz define solo las firmas de sus miembros. Los
bloques Property y Function completos aparecen en una clase que implementa thisInterface .
Vea también
Interfaces
Class (instrucción)
Module (instrucción)
Structure (instrucción)
Property (instrucción)
Function (instrucción)
Sub (instrucción)
Generic Types in Visual Basic
Varianza en interfaces genéricas
In
Out
Mid (Instrucción)
27/11/2019 • 2 minutes to read • Edit Online
Reemplaza un número especificado de caracteres de una variable de String por caracteres de otra cadena.
Sintaxis
Mid( _
ByRef Target As String, _
ByVal Start As Integer, _
Optional ByVal Length As Integer _
) = StringExpression
Elementos
Target
Obligatorio. Nombre de la variable de String que se va a modificar.
Start
Obligatorio. Integer expresión. Posición de carácter en Target donde comienza la sustitución del texto. Start
usa un índice basado en uno.
Length
Opcional. Integer expresión. Número de caracteres que se van a reemplazar. Si se omite, se usa todo String .
StringExpression
Obligatorio. String expresión que reemplaza a parte de Target .
Excepciones
T IP O DE EXC EP C IÓ N C O N DIC IÓ N
Comentarios
El número de caracteres reemplazados siempre es menor o igual que el número de caracteres de Target .
Visual Basic tiene una función Mid y una instrucción Mid . Estos elementos operan en un número especificado de
caracteres de una cadena, pero la función Mid devuelve los caracteres mientras la instrucción Mid reemplaza los
caracteres. Para obtener más información, consulta Mid.
NOTE
La MidB instrucción de versiones anteriores de Visual Basic reemplaza una subcadena en bytes, en lugar de caracteres. Se
usa principalmente para convertir cadenas en aplicaciones de juegos de caracteres de doble byte (DBCS). Todas las cadenas
de Visual Basic están en Unicode y ya no se admiten MidB .
Ejemplo
En este ejemplo se utiliza la instrucción Mid para reemplazar un número especificado de caracteres de una
variable de cadena por caracteres de otra cadena.
Requisitos
Espacio de nombres: Microsoft. VisualBasic
Módulo: Strings
Ensamblado: Biblioteca en tiempo de ejecución de Visual Basic (en Microsoft. VisualBasic. dll)
Vea también
Mid
Cadenas
Introducción a las cadenas en Visual Basic
Module (Instrucción)
27/11/2019 • 6 minutes to read • Edit Online
Sintaxis
[ <attributelist> ] [ accessmodifier ] Module name
[ statements ]
End Module
Elementos
attributelist
Opcional. Vea lista de atributos.
accessmodifier
Opcional. Puede ser uno de los siguientes:
Public
Friend
Vea Access levels in Visual Basic.
name
Obligatorio. Nombre de este módulo. Vea Declared Element Names.
statements
Opcional. Instrucciones que definen las variables, propiedades, eventos, procedimientos y tipos anidados de
este módulo.
End Module
Termina la definición de Module .
Comentarios
Una instrucción Module define un tipo de referencia disponible a lo largo de su espacio de nombres. Un
módulo (a veces denominado módulo estándar) es similar a una clase, pero con algunas distinciones
importantes. Cada módulo tiene exactamente una instancia y no es necesario crearla o asignarla a una
variable. Los módulos no admiten la herencia ni implementan interfaces. Observe que un módulo no es un
tipo en el sentido de que una clase o estructura es: no puede declarar un elemento de programación para que
tenga el tipo de datos de un módulo.
Solo se puede usar Module en el nivel de espacio de nombres. Esto significa que el contexto de la declaración
de un módulo debe ser un archivo de código fuente o un espacio de nombres, y no puede ser una clase, una
estructura, un módulo, una interfaz, un procedimiento o un bloque. No se puede anidar un módulo dentro de
otro módulo o dentro de cualquier tipo. Para obtener más información, vea Declaration Contexts and Default
Access Levels (Contextos de declaración y niveles de acceso predeterminados).
Un módulo tiene la misma duración que el programa. Dado que todos sus miembros se Shared , también
tienen una duración igual a la del programa.
El acceso predeterminado de los módulos es Friend . Los niveles de acceso se pueden ajustar con los
modificadores de acceso. Para obtener más información, consulte niveles de acceso en Visual Basic.
Todos los miembros de un módulo se Shared n implícitamente.
Clases y módulos
Estos elementos tienen muchas similitudes, pero también hay algunas diferencias importantes.
Terminología. Las versiones anteriores de Visual Basic reconocen dos tipos de módulos: módulos de
clase (archivos. CLS) y módulos estándar (archivos. Bas). La versión actual llama a estas clases y
módulos, respectivamente.
Miembros compar tidos. Puede controlar si un miembro de una clase es un miembro compartido o
de instancia.
Orientación de objeto. Las clases están orientadas a objetos, pero los módulos no lo son. De modo
que solo se pueden crear instancias de las clases como objetos. Para obtener más información, vea
objetos y clases.
Reglas
Modificadores. Todos los miembros de módulo están compartidosimplícitamente. No se puede usar
la palabra clave Shared al declarar un miembro, y no se puede modificar el estado compartido de
ningún miembro.
Herencia. Un módulo no puede heredar de ningún tipo que no sea Object, del que se heredan todos
los módulos. En concreto, un módulo no puede heredar de otro.
No se puede usar la instrucción Inherits en una definición de módulo, ni siquiera para especificar
Object.
Propiedad predeterminada. No se puede definir ninguna propiedad predeterminada en un módulo.
Para obtener más información, vea default.
Comportamiento
Nivel de acceso. Dentro de un módulo, puede declarar cada miembro con su propio nivel de acceso.
Los miembros del módulo tienen acceso público de forma predeterminada, excepto las variables y
constantes, que tienen como valor predeterminado el acceso privado . Cuando un módulo tiene más
acceso restringido que uno de sus miembros, tiene prioridad el nivel de acceso del módulo
especificado.
ID. Un módulo está en el ámbito A lo largo de su espacio de nombres.
El ámbito de cada miembro del módulo es todo el módulo. Observe que todos los miembros se
someten a la promoción de tipos, lo que hace que su ámbito se promueva al espacio de nombres que
contiene el módulo. Para obtener más información, consulte promoción de tipos.
Evaluación. Puede tener varios módulos en un proyecto y puede declarar miembros con el mismo
nombre en dos o más módulos. Sin embargo, debe calificar cualquier referencia a este miembro con el
nombre de módulo adecuado si la referencia es de fuera de ese módulo. Para obtener más
información, consulta References to Declared Elements.
Ejemplo
Public Module thisModule
Sub Main()
Dim userName As String = InputBox("What is your name?")
MsgBox("User name is " & userName)
End Sub
' Insert variable, property, procedure, and event declarations.
End Module
Vea también
Class (instrucción)
Namespace (instrucción)
Structure (instrucción)
Interface (instrucción)
Property (instrucción)
Promoción de tipos
Namespace (Instrucción)
27/11/2019 • 10 minutes to read • Edit Online
Declara el nombre de un espacio de nombres y hace que el código fuente que sigue a la declaración se compile
dentro de ese espacio de nombres.
Sintaxis
Namespace [Global.] { name | name.name }
[ componenttypes ]
End Namespace
Elementos
Global
Opcional. Permite definir un espacio de nombres fuera del espacio de nombres raíz del proyecto. Vea espacios
de nombres en Visual Basic.
name
Obligatorio. Nombre único que identifica el espacio de nombres. Debe ser un identificador de Visual Basic
válido. Para obtener más información, vea nombres de elementos declarados.
componenttypes
Opcional. Elementos que componen el espacio de nombres. Estos incluyen, entre otros, enumeraciones,
estructuras, interfaces, clases, módulos, delegados y otros espacios de nombres.
End Namespace
Finaliza un bloque de Namespace .
Comentarios
Los espacios de nombres se usan como sistema de la organización. Proporcionan una manera de clasificar y
presentar los elementos de programación que se exponen a otros programas y aplicaciones. Tenga en cuenta
que un espacio de nombres no es un tipo en el sentido de que una clase o estructura es: no puede declarar un
elemento de programación para que tenga el tipo de datos de un espacio de nombres.
Todos los elementos de programación declarados después de una instrucción Namespace pertenecen a ese
espacio de nombres. Visual Basic continúa compilando elementos en el último espacio de nombres declarado
hasta que encuentra una instrucción End Namespace u otra instrucción Namespace .
Si ya hay un espacio de nombres definido, incluso fuera del proyecto, puede agregarle elementos de
programación. Para ello, use una instrucción Namespace para dirigir Visual Basic para compilar elementos en
ese espacio de nombres.
Puede usar una instrucción Namespace solo en el nivel de archivo o de espacio de nombres. Esto significa que el
contexto de la declaración de un espacio de nombres debe ser un archivo de código fuente u otro espacio de
nombres, y no puede ser una clase, una estructura, un módulo, una interfaz o un procedimiento. Para obtener
más información, vea Declaration Contexts and Default Access Levels (Contextos de declaración y niveles de
acceso predeterminados).
Puede declarar un espacio de nombres dentro de otro. No hay ningún límite estricto para los niveles de
anidamiento que puede declarar, pero recuerde que cuando otro código tiene acceso a los elementos
declarados en el espacio de nombres más interno, debe usar una cadena de calificación que contenga todos los
nombres de espacio de nombres de la jerarquía de anidamiento.
Nivel de acceso
Los espacios de nombres se tratan como si tienen un nivel de acceso Public . Se puede tener acceso a un
espacio de nombres desde el código en cualquier parte del mismo proyecto, desde otros proyectos que hagan
referencia al proyecto y desde cualquier ensamblado compilado a partir del proyecto.
Los elementos de programación declarados en el nivel de espacio de nombres, lo que significa que en un
espacio de nombres pero no dentro de ningún otro elemento, pueden tener Public o Friend acceso. Si no se
especifica, el nivel de acceso de este elemento utiliza Friend de forma predeterminada. Los elementos que se
pueden declarar en el nivel de espacio de nombres incluyen clases, estructuras, módulos, interfaces,
enumeraciones y delegados. Para obtener más información, vea Declaration Contexts and Default Access Levels
(Contextos de declaración y niveles de acceso predeterminados).
Atributos y modificadores
No se pueden aplicar atributos a un espacio de nombres. Un atributo contribuye a la información en los
metadatos del ensamblado, lo que no es significativo para los clasificadores de origen, como los espacios de
nombres.
No se puede aplicar ningún modificador de acceso o procedimiento, ni ningún otro modificador, a un espacio
de nombres. Dado que no es un tipo, estos modificadores no son significativos.
Ejemplo
En el siguiente ejemplo se declaran dos espacios de nombres, uno anidado en el otro.
Namespace n1
Namespace n2
Class a
' Insert class definition.
End Class
End Namespace
End Namespace
Ejemplo
En el siguiente ejemplo se declaran varios espacios de nombres anidados en una sola línea y es equivalente al
ejemplo anterior.
Namespace n1.n2
Class a
' Insert class definition.
End Class
End Namespace
Ejemplo
En el ejemplo siguiente se obtiene acceso a la clase definida en los ejemplos anteriores.
Ejemplo
En el ejemplo siguiente se define el esqueleto de una nueva clase de lista genérica y se agrega al espacio de
nombres System.Collections.Generic.
Namespace System.Collections.Generic
Class specialSortedList(Of T)
Inherits List(Of T)
' Insert code to define the special generic list class.
End Class
End Namespace
Vea también
Imports (instrucción), espacio de nombres y tipo .NET
Nombres de elementos declarados
Espacios de nombres en Visual Basic
Instrucción On Error (Visual Basic)
27/11/2019 • 15 minutes to read • Edit Online
Habilita una rutina de control de errores y especifica la ubicación de la rutina dentro de un procedimiento.
también se puede usar para deshabilitar una rutina de control de errores. La instrucción On Error se usa en el
control de errores no estructurado y se puede usar en lugar de un control de excepciones estructurado. El control
estructurado de excepciones está integrado en .net, suele ser más eficaz y, por lo tanto, se recomienda al
controlar los errores en tiempo de ejecución en la aplicación.
Sin el control de errores o el control de excepciones, cualquier error en tiempo de ejecución que se produzca es
grave: se muestra un mensaje de error y se detiene la ejecución.
NOTE
La palabra clave Error también se usa en la instrucción de error, que se admite por compatibilidad con versiones
anteriores.
Sintaxis
On Error { GoTo [ line | 0 | -1 ] | Resume Next }
Elementos
T ÉRM IN O DEF IN IC IÓ N
Comentarios
NOTE
Se recomienda usar el control de excepciones estructurado en el código siempre que sea posible, en lugar de usar el
control de excepciones no estructurado y la instrucción On Error . Para obtener más información, vea Try...Catch...Finally
Statement (Try...Catch...Finally [Instrucción, Visual Basic]).
Un controlador de errores "habilitado" es el que está activado por una instrucción On Error . Un controlador de
errores "activo" es un controlador habilitado que se encuentra en el proceso de control de un error.
Si se produce un error mientras un controlador de errores está activo (entre la aparición del error y una
instrucción Resume , Exit Sub , Exit Function o Exit Property ), el controlador de errores del procedimiento
actual no puede controlar el error. El control vuelve al procedimiento que realiza la llamada.
Si el procedimiento de llamada tiene un controlador de errores habilitado, se activa para controlar el error. Si el
controlador de errores del procedimiento que realiza la llamada también está activo, el control pasa a través de
los procedimientos de llamada anteriores hasta que se encuentra un controlador de errores habilitado, pero
inactivo. Si no se encuentra ningún controlador de errores, el error es grave en el punto en el que se produjo
realmente.
Cada vez que el controlador de errores vuelve a pasar el control a un procedimiento que realiza la llamada, ese
procedimiento se convierte en el procedimiento actual. Una vez que un controlador de errores controla un error
en cualquier procedimiento, la ejecución se reanuda en el procedimiento actual en el punto designado por la
instrucción Resume .
NOTE
Una rutina de control de errores no es un procedimiento Sub o un procedimiento Function . Es una sección de código
marcada por una etiqueta de línea o un número de línea.
Propiedad Number
Las rutinas de control de errores se basan en el valor de la propiedad Number del objeto Err para determinar la
causa del error. La rutina debe probar o guardar los valores de propiedad relevantes en el objeto Err antes de
que pueda producirse cualquier otro error o antes de que se llame a un procedimiento que puede provocar un
error. Los valores de propiedad del objeto Err reflejan solo el error más reciente. El mensaje de error asociado a
Err.Number está contenido en Err.Description .
Throw (Instrucción)
Un error que se produce con el método Err.Raise establece la propiedad Exception en una instancia recién
creada de la clase Exception. Con el fin de admitir la generación de excepciones de tipos de excepción derivados,
se admite una instrucción Throw en el lenguaje. Esto toma un parámetro único que es la instancia de excepción
que se va a producir. En el ejemplo siguiente se muestra cómo se pueden usar estas características con la
compatibilidad con el control de excepciones existente:
Tenga en cuenta que la instrucción On Error GoTo captura todos los errores, independientemente de la clase de
excepción.
NOTE
La construcción On Error Resume Next puede ser preferible a On Error GoTo al controlar los errores generados
durante el acceso a otros objetos. La comprobación de Err después de cada interacción con un objeto elimina la
ambigüedad sobre el objeto al que tuvo acceso el código. Puede asegurarse de que el objeto colocó el código de error en
Err.Number , así como el objeto que generó originalmente el error (el objeto especificado en Err.Source ).
On error GoTo 0
On Error GoTo 0 deshabilita el control de errores en el procedimiento actual. No especifica la línea 0 como el
inicio del código de control de errores, aunque el procedimiento contenga una línea numerada como 0. Sin una
instrucción On Error GoTo 0 , se deshabilita automáticamente un controlador de errores cuando se sale de un
procedimiento.
On error GoTo-1
On Error GoTo -1 deshabilita la excepción en el procedimiento actual. No especifica line-1 como el inicio del
código de control de errores, aunque el procedimiento contenga una línea numerada-1. Sin una instrucción
On Error GoTo -1 , se deshabilita automáticamente una excepción cuando se sale de un procedimiento.
Para evitar que se ejecute código de control de errores cuando no se ha producido ningún error, coloque una
instrucción Exit Sub , Exit Function o Exit Property inmediatamente antes de la rutina de control de errores,
como en el fragmento siguiente:
Aquí, el código de control de errores sigue la instrucción Exit Sub y precede a la instrucción End Sub para
separarlo del flujo de procedimiento. Puede colocar el código de control de errores en cualquier parte de un
procedimiento.
Errores no interceptados
Los errores no interceptados de los objetos se devuelven a la aplicación de control cuando el objeto se ejecuta
como un archivo ejecutable. En el entorno de desarrollo, los errores no interceptados se devuelven a la aplicación
de control solo si se establecen las opciones adecuadas. Consulte la documentación de la aplicación host para
obtener una descripción de las opciones que se deben establecer durante la depuración, cómo establecerlas y si
el host puede crear clases.
Si crea un objeto que tiene acceso a otros objetos, debe tratar de tratar cualquier error no controlado que pase.
Si no es posible, asigne los códigos de error de Err.Number a uno de sus propios errores y, a continuación,
vuelva a pasarlos al autor de la llamada del objeto. Debe especificar el error agregando el código de error a la
constante VbObjectError . Por ejemplo, si el código de error es 1052, asígnelo como se indica a continuación:
Cau t i on
Los errores del sistema durante las llamadas a las bibliotecas de vínculos dinámicos (dll) de Windows no
generan excepciones y no se pueden interceptar con Visual Basic la interceptación de errores. Al llamar a
funciones de DLL, debe comprobar si cada valor devuelto es correcto o incorrecto (de acuerdo con las
especificaciones de la API) y, en caso de que se produzca un error, compruebe el valor de la propiedad
LastDLLError del objeto Err .
Ejemplo
En primer lugar, en este ejemplo se usa la instrucción On Error GoTo para especificar la ubicación de una rutina
de control de errores dentro de un procedimiento. En el ejemplo, un intento de dividir por cero genera el número
de error 6. El error se controla en la rutina de control de errores y, a continuación, el control se devuelve a la
instrucción que provocó el error. La instrucción On Error GoTo 0 desactiva la interceptación de errores. A
continuación, se utiliza la instrucción On Error Resume Next para aplazar la interceptación de errores de modo
que el contexto del error generado por la siguiente instrucción pueda ser conocido para ciertos. Tenga en cuenta
que Err.Clear se utiliza para borrar las propiedades del objeto de Err una vez que se ha controlado el error.
Vea también
Err
Number
Description
LastDllError
End (instrucción)
Exit (instrucción)
Resume (instrucción)
Mensajes de error
Try...Catch...Finally (instrucción)
Operator (Instrucción)
27/11/2019 • 11 minutes to read • Edit Online
Declara el símbolo del operador, los operandos y el código que definen un procedimiento de operador en
una clase o estructura.
Sintaxis
[ <attrlist> ] Public [ Overloads ] Shared [ Shadows ] [ Widening | Narrowing ]
Operator operatorsymbol ( operand1 [, operand2 ]) [ As [ <attrlist> ] type ]
[ statements ]
[ statements ]
Return returnvalue
[ statements ]
End Operator
Elementos
attrlist
Opcional. Vea lista de atributos.
Public
Obligatorio. Indica que este procedimiento de operador tiene acceso público .
Overloads
Opcional. Vea sobrecargas.
Shared
Obligatorio. Indica que este procedimiento de operador es un procedimiento compartido .
Shadows
Opcional. Vea Shadows.
Widening
Obligatorio para un operador de conversión a menos que especifique Narrowing . Indica que este
procedimiento de operador define una conversión de ampliación . Vea "conversiones de ampliación y de
restricción" en esta página de ayuda.
Narrowing
Obligatorio para un operador de conversión a menos que especifique Widening . Indica que este
procedimiento de operador define una conversión de restricción . Vea "conversiones de ampliación y de
restricción" en esta página de ayuda.
operatorsymbol
Obligatorio. Símbolo o identificador del operador que define este procedimiento de operador.
operand1
Obligatorio. El nombre y el tipo del operando único de un operador unario (incluido un operador de
conversión) o el operando izquierdo de un operador binario.
operand2
Requerido para los operadores binarios. Nombre y tipo del operando derecho de un operador binario.
operand1 y operand2 tienen la sintaxis y las partes siguientes:
[ ByVal ] operandname [ As operandtype ]
PA RT E DESC RIP C IÓ N
type
Opcional a menos que se On``Option Strict . Tipo de datos del valor que el procedimiento del operador
devuelve.
statements
Opcional. Bloque de instrucciones que ejecuta el procedimiento de operador.
returnvalue
Obligatorio. Valor que el procedimiento del operador devuelve al código de llamada.
End Operator
Obligatorio. Finaliza la definición de este procedimiento de operador.
Comentarios
Solo se puede usar Operator en una clase o estructura. Esto significa que el contexto de la declaración de un
operador no puede ser un archivo de código fuente, un espacio de nombres, un módulo, una interfaz, un
procedimiento o un bloque. Para obtener más información, vea Declaration Contexts and Default Access
Levels (Contextos de declaración y niveles de acceso predeterminados).
Todos los operadores deben ser Public Shared . No se puede especificar ByRef , Optional o ParamArray para
ninguno de los operandos.
No se puede utilizar el símbolo de operador o el identificador para contener un valor devuelto. Debe utilizar
la instrucción Return y debe especificar un valor. Cualquier número de instrucciones Return puede aparecer
en cualquier parte del procedimiento.
La definición de un operador de este modo se denomina sobrecarga de operadores, tanto si se usa la palabra
clave Overloads como si no. En la tabla siguiente se enumeran los operadores que se pueden definir.
T IP O O P ERA DO RES
Pares coincidentes
Debe definir ciertos operadores como pares coincidentes. Si define un operador de este tipo, debe definir
también el otro. Los pares coincidentes son los siguientes:
= y <>
> y <
>= y <=
IsTrue y IsFalse
El tipo de valor devuelto no tiene que corresponder al tipo de uno de los operandos. Por ejemplo, un
operador de comparación como = o <> puede devolver Boolean aunque no se Boolean ninguno de los
operandos.
Ejemplo
En el ejemplo de código siguiente se usa la instrucción Operator para definir el contorno de una estructura
que incluye procedimientos de operador para los operadores And , Or , IsFalse y IsTrue . And y Or
tienen dos operandos de tipo abc y abc de tipo de valor devuelto. IsFalse y IsTrue toman un único
operando de tipo abc y devuelven Boolean . Estas definiciones permiten que el código de llamada use And ,
AndAlso , Or y OrElse con operandos de tipo abc .
Vea también
IsFalse (operador)
IsTrue (operador)
Widening
Narrowing
Conversiones de ampliación y de restricción
Procedimientos de operadores
Definir un operador
Definir un operador de conversión
Llamar a un procedimiento de operador
Utilizar una clase que define operadores
Option <palabra clave > instrucción
27/11/2019 • 2 minutes to read • Edit Online
Presenta una instrucción que especifica una opción del compilador que se aplica a todo el archivo de código
fuente.
Comentarios
Las opciones del compilador pueden controlar si todas las variables deben declararse explícitamente, si las
conversiones de tipo de restricción deben ser explícitas o si las cadenas se deben comparar como texto o como
cantidades binarias.
La palabra clave Option se puede usar en los siguientes contextos:
Option Compare (instrucción)
Option Explicit (instrucción)
Option Infer (instrucción)
Option Strict (instrucción)
Vea también
Palabras clave
Option Compare (Instrucción)
27/11/2019 • 6 minutes to read • Edit Online
Sintaxis
Option Compare { Binary | Text }
Elementos
T ÉRM IN O DEF IN IC IÓ N
Comentarios
Si se utiliza la instrucción Option Compare , debe aparecer en un archivo antes que cualquier otra instrucción
de código fuente.
La instrucción Option Compare especifica el método de comparación de cadenas ( Binary o Text ). El método
de comparación de texto predeterminado es Binary .
Una comparación Binary compara el valor numérico de Unicode de cada carácter en cada cadena. Una
comparación Text compara cada carácter Unicode basándose en su significado léxico en la referencia
cultural actual.
En Microsoft Windows, el criterio de ordenación viene determinado por la página de código. Para obtener
más información, vea Páginas de códigos.
En el ejemplo siguiente, los caracteres de la página de códigos inglés/europeo (ANSI 1252) se ordenan
mediante el uso de Option Compare Binary , lo que genera un criterio de ordenación binario típico.
A < B < E < Z < a < b < e < z < À < Ê < Ø < à < ê < ø
Cuando se ordenan los mismos caracteres en la misma página de código mediante el uso de
Option Compare Text , se genera el siguiente criterio de ordenación de texto.
(A=a) < (À = à) < (B=b) < (E=e) < (Ê = ê) < (Z=z) < (Ø = ø)
NOTE
Es posible que el equipo muestre nombres o ubicaciones diferentes para algunos de los elementos de la interfaz de
usuario de Visual Studio en las siguientes instrucciones. La edición de Visual Studio que se tenga y la configuración
que se utilice determinan estos elementos. Para obtener más información, vea Personalizar el IDE.
Ejemplo
El ejemplo siguiente utiliza la instrucción Option Compare para establecer la comparación binaria como
método predeterminado de comparación de cadenas. Para utilizar este código, quite el comentario de la
instrucción Option Compare Binary y colóquelo en la parte superior del archivo de origen.
Ejemplo
El ejemplo siguiente se utiliza la instrucción Option Compare para establecer el criterio de ordenación de
texto sin distinción entre mayúsculas y minúsculas como método predeterminado de comparación de
cadenas. Para utilizar este código, quite el comentario de la instrucción Option Compare Text y colóquelo en
la parte superior del archivo de origen.
' Option Compare Text
Console.WriteLine("A" = "a")
' Output: True
Vea también
InStr
InStrRev
Replace
Split
StrComp
-optioncompare
Operadores de comparación
Operadores de comparación en Visual Basic
Like (operador)
Funciones de cadena
Option Explicit (instrucción)
Option Strict (instrucción)
Option Explicit (Instrucción, Visual Basic)
27/11/2019 • 3 minutes to read • Edit Online
Fuerza la declaración explícita de todas las variables de un archivo o permite declaraciones implícitas de
variables.
Sintaxis
Option Explicit { On | Off }
Elementos
On
Opcional. Habilita la comprobación de Option Explicit . Si no se especifica On o Off , el valor predeterminado
es On .
Off
Opcional. Deshabilita la comprobación de Option Explicit .
Comentarios
Cuando Option Explicit On o Option Explicit aparezca en un archivo, debe declarar explícitamente todas las
variables mediante el uso de las instrucciones Dim o ReDim . Si intenta usar un nombre de variable no
declarado, se produce un error en tiempo de compilación. La instrucción Option Explicit Off permite la
declaración implícita de variables.
Si se utiliza la instrucción Option Explicit , debe aparecer en un archivo antes que cualquier otra instrucción de
código fuente.
NOTE
La configuración de Option Explicit en Off no suele ser una buena práctica. Podría escribir mal un nombre de
variable en una o varias ubicaciones, lo que provocaría resultados inesperados cuando se ejecuta el programa.
Ejemplo
En el ejemplo siguiente se usa la instrucción Option Explicit para forzar la declaración explícita de todas las
variables. Al intentar usar una variable no declarada, se produce un error en tiempo de compilación.
Vea también
Dim (instrucción)
ReDim (instrucción)
Option Compare (instrucción)
Option Strict (instrucción)
-optioncompare
-optionexplicit
-optionstrict
Valores predeterminados de Visual Basic, Proyectos, Opciones (Cuadro de diálogo)
Option Infer (instrucción)
27/11/2019 • 8 minutes to read • Edit Online
Sintaxis
Option Infer { On | Off }
Elementos
T ÉRM IN O DEF IN IC IÓ N
Comentarios
Para establecer Option Infer en un archivo, escriba Option Infer On o Option Infer Off en la parte superior
del archivo, antes de cualquier otro código fuente. Si el valor establecido para Option Infer en un archivo
entra en conflicto con el valor establecido en el IDE o en la línea de comandos, el valor del archivo tiene
prioridad.
Al establecer Option Infer en On , puede declarar variables locales sin especificar explícitamente un tipo de
datos. El compilador deduce el tipo de datos de una variable a partir del tipo de su expresión de inicialización.
En la siguiente ilustración, Option Infer está activado. La variable de la declaración Dim someVar = 2 se
declara como un entero mediante la inferencia de tipo.
En la captura de pantalla siguiente se muestra IntelliSense cuando Option Infer está activada:
En la siguiente ilustración, Option Infer está desactivado. La variable de la declaración Dim someVar = 2 se
declara como un Object mediante la inferencia de tipo. En este ejemplo, el valor Option Strict está
establecido en OFF en la Página compilar, diseñador de proyectos (Visual Basic).
La captura de pantalla siguiente muestra IntelliSense cuando Option Infer es OFF:
NOTE
Cuando una variable se declara como un Object , el tipo de tiempo de ejecución puede cambiar mientras se ejecuta el
programa. Visual Basic realiza operaciones denominadas conversión boxing y unboxing para realizar la conversión entre
un Object y un tipo de valor, lo que hace que la ejecución sea más lenta. Para obtener información sobre las
conversiones boxing y unboxing, vea la especificación del lenguaje Visual Basic.
¿T IP O DE DATO S ¿IN IC IA L IZ A DO R
ESP EC IF IC A DO ? ESP EC IF IC A DO ? E JEM P LO RESULTA DO
¿T IP O DE DATO S ¿IN IC IA L IZ A DO R
ESP EC IF IC A DO ? ESP EC IF IC A DO ? E JEM P LO RESULTA DO
Ejemplo
Los ejemplos siguientes muestran cómo la instrucción Option Infer habilita la inferencia de tipo local.
' Enable Option Infer before trying these examples.
Ejemplo
El siguiente ejemplo demuestra que el tipo en tiempo de ejecución puede ser diferente cuando una variable se
identifica como un Object .
Dim someVar = 5
Console.WriteLine(someVar.GetType.ToString)
' Output:
' System.Int32
' System.String
Vea también
Dim (instrucción)
Inferencia de tipo de variable local
Option Compare (instrucción)
Option Explicit (instrucción)
Option Strict (instrucción)
Valores predeterminados de Visual Basic, Proyectos, Opciones (Cuadro de diálogo)
-optioninfer
Conversión boxing y conversión unboxing
Option Strict Statement
27/11/2019 • 17 minutes to read • Edit Online
Restringe las conversiones de tipos de datos implícitos solo a las conversiones de ampliación, no
permite el enlace en tiempo de ejecución y no permite los tipos implícitos que generan un tipo de
Object .
Sintaxis
Option Strict { On | Off }
Elementos
T ÉRM IN O DEF IN IC IÓ N
Comentarios
Cuando Option Strict On o Option Strict aparece en un archivo, las condiciones siguientes producen
un error en tiempo de compilación:
Conversiones de restricción implícitas
Enlace en tiempo de ejecución
Tipos implícitos que dan como resultado un tipo Object
NOTE
En las configuraciones de advertencia que se pueden establecer en la Página compilar, diseñador de proyectos
(Visual Basic), hay tres opciones de configuración que se corresponden con las tres condiciones que causan un
error en tiempo de compilación. Para obtener información sobre cómo usar estos valores, vea para establecer
configuraciones de advertencia en el IDE más adelante en este tema.
La instrucción Option Strict Off desactiva la comprobación de errores y advertencias para las tres
condiciones, incluso si la configuración de IDE asociada especifica que se activen estos errores o
advertencias. La instrucción Option Strict On activa la comprobación de errores y advertencias para
las tres condiciones, incluso si la configuración de IDE asociada especifica que se desactiven estos
errores o advertencias.
Si se utiliza, la instrucción Option Strict debe aparecer antes que cualquier otra instrucción de código
en un archivo.
Cuando se establece Option Strict en On , Visual Basic comprueba que los tipos de datos se
especifican para todos los elementos de programación. Los tipos de datos se pueden especificar
explícitamente o especificarse mediante la inferencia de tipo local. Se recomienda especificar los tipos
de datos para todos los elementos de programación, por las razones siguientes:
Habilita la compatibilidad con IntelliSense para las variables y los parámetros. Esto le permite ver
sus propiedades y otros miembros a medida que escribe código.
Permite que el compilador realice la comprobación de tipos. La comprobación de tipos le ayuda
a encontrar instrucciones que pueden producir errores en tiempo de ejecución debido a errores
de conversión de tipos. También identifica las llamadas a métodos en objetos que no admiten
esos métodos.
Acelera la ejecución del código. Una razón para esto es que, si no se especifica un tipo de datos
para un elemento de programación, el compilador Visual Basic le asigna el tipo de Object . Es
posible que el código compilado tenga que realizar una conversión entre Object y otros tipos
de datos, lo que reduce el rendimiento.
Si declara una variable sin usar una cláusula As y la establece en Nothing , la variable tiene un tipo de
Object . En este caso, no se produce ningún error en tiempo de compilación cuando Option Strict
está activada y Option Infer está activada. Un ejemplo de esto es Dim something = Nothing .
Tipos de datos y valores predeterminados
En la tabla siguiente se describen los resultados de diversas combinaciones de especificar el tipo de
datos y el inicializador en una instrucción Dim.
¿T IP O DE DATO S ¿IN IC IA L IZ A DO R
ESP EC IF IC A DO ? ESP EC IF IC A DO ? E JEM P LO RESULTA DO
NOTE
Es posible que el equipo muestre nombres o ubicaciones diferentes para algunos de los elementos de la interfaz
de usuario de Visual Studio en las siguientes instrucciones. La edición de Visual Studio que se tenga y la
configuración que se utilice determinan estos elementos. Para obtener más información, vea Personalizar el IDE.
Conversión implícita
Enlace en tiempo de ejecución; la llamada podría generar un error en tiempo de
ejecución
Tipo implícito; se supone el objeto
Al establecer Option Strict en On , estos tres valores de configuración de advertencias se establecen
en Error . Al establecer Option Strict en Off , las tres opciones se establecen en None .
Puede cambiar individualmente cada valor de configuración de advertencia por None , Warning o
Error . Si se establecen las tres opciones de configuración de advertencia en Error , On aparece en el
cuadro Option strict . Si se establecen las tres en None , Off aparece en este cuadro. Para cualquier
otra combinación de estas opciones, aparece (personalizado) .
Para establecer la configuración predeterminada de Option Strict para los nuevos proyectos
Al crear un proyecto, el valor Option Strict de la pestaña compilar se establece en el valor Option
Strict del cuadro de diálogo Opciones .
Para establecer Option Strict en este cuadro de diálogo, en el menú herramientas , haga clic en
Opciones . En el cuadro de diálogo Opciones , expanda Proyectos y soluciones y, después, haga clic
en Valores predeterminados de VB . La configuración predeterminada inicial en los valores
predeterminados de VB es Off .
Para establecer Option Strict en la línea de comandos
Incluya la opción del compilador -OptionStrict en el comando VBC .
Ejemplo
En los siguientes ejemplos se muestran errores en tiempo de compilación causados por conversiones
de tipo implícitas que son conversiones de restricción. Esta categoría de errores corresponde a la
condición de conversión implícita en la Página compilar .
Ejemplo
En el ejemplo siguiente se muestra un error en tiempo de compilación causado por el enlace en tiempo
de ejecución. Esta categoría de errores corresponde al enlace en tiempo de ejecución; la llamada
podría producir un error en la condición de tiempo de ejecución en la Página de compilación .
' If Option Strict is on, this late binding
' causes a compile-time error. If Option Strict
' is off, the late binding instead causes a
' run-time error.
Dim punchCard As New Object
punchCard.Column = 5
Ejemplo
En los siguientes ejemplos se muestran errores causados por variables declaradas con un tipo implícito
de Object . Esta categoría de errores corresponde al tipo implícito; se supone que el objeto es una
condición en la Página de compilación .
End Sub
Vea también
Conversiones de ampliación y de restricción
Conversiones implícitas y explícitas
Página Compilación, Diseñador de proyectos (Visual Basic)
Option Explicit (instrucción)
Funciones de conversión de tipos
Obtener acceso a los miembros de un objeto
Expresiones incrustadas en XML
Conversión de delegado flexible
Enlace en tiempo de ejecución en las soluciones de Office
-optionstrict
Valores predeterminados de Visual Basic, Proyectos, Opciones (Cuadro de diálogo)
Property Statement
27/11/2019 • 11 minutes to read • Edit Online
Declara el nombre de una propiedad y los procedimientos de propiedad que se usan para almacenar y
recuperar el valor de la propiedad.
Sintaxis
[ <attributelist> ] [ Default ] [ accessmodifier ]
[ propertymodifiers ] [ Shared ] [ Shadows ] [ ReadOnly | WriteOnly ] [ Iterator ]
Property name ( [ parameterlist ] ) [ As returntype ] [ Implements implementslist ]
[ <attributelist> ] [ accessmodifier ] Get
[ statements ]
End Get
[ <attributelist> ] [ accessmodifier ] Set ( ByVal value As returntype [, parameterlist ] )
[ statements ]
End Set
End Property
- or -
[ <attributelist> ] [ Default ] [ accessmodifier ]
[ propertymodifiers ] [ Shared ] [ Shadows ] [ ReadOnly | WriteOnly ]
Property name ( [ parameterlist ] ) [ As returntype ] [ Implements implementslist ]
Elementos
attributelist
Opcional. Lista de atributos que se aplican a esta propiedad o Get o Set procedimiento. Vea
lista de atributos.
Default
Opcional en la instrucción Property y en, como máximo, una de las instrucciones Get y Set .
Puede ser uno de los siguientes:
Public
Protected
Friend
Private
Protected Friend
Private Protected
Vea Access levels in Visual Basic.
propertymodifiers
NotOverridable Overrides
Shared
Opcional. Lista de nombres de variables locales que representan los parámetros de esta
propiedad y posibles parámetros adicionales del procedimiento Set . Vea lista de parámetros.
returntype
Es obligatorio si se On``Option Strict . Tipo de datos del valor devuelto por esta propiedad.
Implements
Opcional. Indica que esta propiedad implementa una o más propiedades, cada una de las cuales
se define en una interfaz implementada por la clase o estructura que contiene esta propiedad.
Vea Implements (instrucción).
implementslist
PA RT E DESC RIP C IÓ N
Get
Opcional. Obligatorio si la propiedad está marcada como ReadOnly . Inicia una Get
procedimiento de propiedad que se usa para devolver el valor de la propiedad. La instrucción
Get no se utiliza con las propiedades implementadas automáticamente.
statements
Opcional. Obligatorio si la propiedad está marcada como WriteOnly . Inicia una Set
procedimiento de propiedad que se usa para almacenar el valor de la propiedad. La instrucción
Set no se utiliza con las propiedades implementadas automáticamente.
End Set
Comentarios
La instrucción Property presenta la declaración de una propiedad. Una propiedad puede tener un
procedimiento Get (solo lectura), un procedimiento Set (solo escritura) o ambos (lectura y escritura).
Puede omitir el procedimiento Get y Set al utilizar una propiedad implementada automáticamente.
Para obtener más información, vea Auto-Implemented Properties (Propiedades implementadas
automáticamente).
Solo se puede usar Property en el nivel de clase. Esto significa que el contexto de la declaración de
una propiedad debe ser una clase, una estructura, un módulo o una interfaz, y no puede ser un archivo
de código fuente, un espacio de nombres, un procedimiento o un bloque. Para obtener más
información, vea Declaration Contexts and Default Access Levels (Contextos de declaración y niveles de
acceso predeterminados).
De forma predeterminada, las propiedades usan el acceso público. Puede ajustar el nivel de acceso de
una propiedad con un modificador de acceso en la instrucción Property y, opcionalmente, puede
ajustar uno de sus procedimientos de propiedad a un nivel de acceso más restrictivo.
Visual Basic pasa un parámetro al procedimiento Set durante las asignaciones de propiedades. Si no
proporciona un parámetro para Set , el entorno de desarrollo integrado (IDE) utiliza un parámetro
implícito denominado value . Este parámetro contiene el valor que se va a asignar a la propiedad.
Normalmente, este valor se almacena en una variable local privada y se devuelve cada vez que se
llama al procedimiento Get .
Reglas
Niveles de acceso mixtos. Si va a definir una propiedad de lectura y escritura, puede
especificar opcionalmente un nivel de acceso diferente para el Get o el procedimiento de Set ,
pero no ambos. Si lo hace, el nivel de acceso del procedimiento debe ser más restrictivo que el
nivel de acceso de la propiedad. Por ejemplo, si la propiedad se declara Friend , puede declarar
el Set procedimiento Private , pero no Public .
Si va a definir una propiedad ReadOnly o WriteOnly , el procedimiento de propiedad única (
Get o Set , respectivamente) representa toda la propiedad. No se puede declarar un nivel de
acceso diferente para este procedimiento, ya que esto establecería dos niveles de acceso para la
propiedad.
Tipo de valor devuelto. La instrucción Property puede declarar el tipo de datos del valor que
devuelve. Puede especificar cualquier tipo de datos o el nombre de una enumeración,
estructura, clase o interfaz.
Si no se especifica returntype , la propiedad devuelve Object .
Aplicación. Si esta propiedad utiliza la palabra clave Implements , la clase o estructura
contenedora debe tener una instrucción Implements inmediatamente después de su instrucción
Class o Structure . La instrucción Implements debe incluir cada interfaz especificada en
implementslist . Sin embargo, el nombre por el que una interfaz define el Property (en
definedname ) no tiene que ser el mismo que el nombre de esta propiedad (en name ).
Comportamiento
Devolver desde un procedimiento de propiedad. Cuando el procedimiento Get o Set
vuelve al código de llamada, la ejecución continúa con la instrucción que sigue a la instrucción
que lo invocó.
Las instrucciones Exit Property y Return producen una salida inmediata de un procedimiento
de propiedad. Cualquier número de instrucciones Exit Property y Return puede aparecer en
cualquier parte del procedimiento y se pueden mezclar instrucciones Exit Property y Return .
Valor devuelto. Para devolver un valor de un procedimiento Get , puede asignar el valor al
nombre de la propiedad o incluirlo en una instrucción Return . En el ejemplo siguiente se
asigna el valor devuelto al nombre de propiedad quoteForTheDay y, a continuación, se usa la
instrucción Exit Property para devolver.
Ejemplo
En el ejemplo siguiente se declara una propiedad en una clase.
Class Class1
' Define a local variable to store the property value.
Private propertyValue As String
' Define the property.
Public Property Prop1() As String
Get
' The Get property procedure is called when the value
' of a property is retrieved.
Return propertyValue
End Get
Set(ByVal value As String)
' The Set property procedure is called when the value
' of a property is modified. The value to be assigned
' is passed in the argument to Set.
propertyValue = value
End Set
End Property
End Class
Vea también
Propiedades autoimplementadas
Objetos y clases
Get (instrucción)
Set (instrucción)
Lista de parámetros
Default
Instrucciones Q-Z
27/11/2019 • 2 minutes to read • Edit Online
Vea también
Instrucciones de la A a la E
Instrucciones de la F a la P
Referencia del lenguaje Visual Basic
RaiseEvent (Instrucción)
27/11/2019 • 7 minutes to read • Edit Online
Desencadena un evento declarado en el nivel de módulo dentro de una clase, formulario o documento.
Sintaxis
RaiseEvent eventname[( argumentlist )]
Elementos
eventname
Obligatorio. Nombre del evento que se va a desencadenar.
argumentlist
Opcional. Lista delimitada por comas de variables, matrices o expresiones. El argumento argumentlist debe ir
entre paréntesis. Si no hay ningún argumento, se deben omitir los paréntesis.
Comentarios
El eventname necesario es el nombre de un evento declarado en el módulo. Sigue Visual Basic convenciones de
nomenclatura de variables.
Si el evento no se ha declarado en el módulo en el que se genera, se produce un error. En el fragmento de código
siguiente se muestra una declaración de evento y un procedimiento en el que se genera el evento.
No se puede usar RaiseEvent para generar eventos que no se declaran explícitamente en el módulo. Por
ejemplo, todos los formularios heredan un evento Click de System.Windows.Forms.Form, no se pueden generar
con RaiseEvent en un formulario derivado. Si declara un evento de Click en el módulo de formulario, sombrea
el propio evento de Click del formulario. Todavía puede invocar el evento Click del formulario llamando al
método OnClick.
De forma predeterminada, un evento definido en Visual Basic genera sus controladores de eventos en el orden
en que se establecen las conexiones. Dado que los eventos pueden tener ByRef parámetros, un proceso que se
conecta tarde puede recibir parámetros modificados por un controlador de eventos anterior. Una vez que se
ejecutan los controladores de eventos, se devuelve el control a la subrutina que provocó el evento.
NOTE
Los eventos no compartidos no se deben generar en el constructor de la clase en la que se declaran. Aunque estos
eventos no causan errores en tiempo de ejecución, pueden no ser detectados por los controladores de eventos asociados.
Utilice el modificador Shared para crear un evento compartido si necesita generar un evento desde un constructor.
NOTE
Puede cambiar el comportamiento predeterminado de los eventos mediante la definición de un evento personalizado. En el
caso de los eventos personalizados, la instrucción RaiseEvent invoca al descriptor de acceso RaiseEvent del evento.
Para obtener más información sobre los eventos personalizados, vea Event Statement.
Ejemplo
En el ejemplo siguiente se usan eventos para contar los segundos de 10 a 0. El código muestra algunos de los
métodos, las propiedades y las instrucciones relacionados con eventos, incluida la instrucción RaiseEvent .
La clase que provoca un evento es el origen del evento, y los métodos que procesan el evento son los
controladores de eventos. Un origen de eventos puede tener varios controladores para los eventos que genera.
Cuando la clase genera el evento, ese evento se genera en cada clase que eligió controlar eventos para esa
instancia del objeto.
El ejemplo también usa un formulario ( Form1 ) con un botón ( Button1 ) y un cuadro de texto ( TextBox1 ). Al
hacer clic en el botón, el primer cuadro de texto muestra una cuenta atrás de 10 a 0 segundos. Cuando transcurre
el tiempo (10 segundos), el primer cuadro de texto muestra "Done".
El código de Form1 especifica los estados inicial y terminal del formulario. También contiene el código que se
ejecuta cuando se producen eventos.
Para usar este ejemplo, abra un nuevo proyecto de aplicación para Windows, agregue un botón denominado
Button1 y un cuadro de texto denominado TextBox1 al formulario principal, denominado Form1 . A
continuación, haga clic con el botón secundario en el formulario y haga clic en Ver código para abrir el editor de
código.
Agregue una variable WithEvents a la sección de declaraciones de la clase Form1 .
Ejemplo
Agregue el código siguiente al código de Form1 . Reemplace los procedimientos duplicados que puedan existir,
como Form_Load o Button_Click .
Private Sub Form1_Load() Handles MyBase.Load
Button1.Text = "Start"
mText = New TimerState
End Sub
Private Sub Button1_Click() Handles Button1.Click
mText.StartCountdown(10.0, 0.1)
End Sub
Class TimerState
Public Event UpdateTime(ByVal Countdown As Double)
Public Event Finished()
Public Sub StartCountdown(ByVal Duration As Double,
ByVal Increment As Double)
Dim Start As Double = DateAndTime.Timer
Dim ElapsedTime As Double = 0
Presione F5 para ejecutar el ejemplo anterior y haga clic en el botón iniciar . El primer cuadro de texto empieza la
cuenta atrás de los segundos. Cuando transcurre el tiempo (10 segundos), el primer cuadro de texto muestra
"Done".
NOTE
El método My.Application.DoEvents no procesa los eventos exactamente del mismo modo que el formulario. Para
permitir que el formulario controle los eventos directamente, puede usar multithreading. Para obtener más información,
vea subprocesamiento administrado.
Vea también
Eventos
Event (instrucción)
AddHandler (instrucción)
RemoveHandler (instrucción)
Handles
Instrucción ReDim (Visual Basic)
27/11/2019 • 8 minutes to read • Edit Online
Sintaxis
ReDim [ Preserve ] name(boundlist) [ , name(boundlist) [, ... ] ]
Elementos
T ÉRM IN O DEF IN IC IÓ N
Comentarios
Puede utilizar la instrucción ReDim para cambiar el tamaño de una o más dimensiones de una matriz que ya se
ha declarado. Si tiene una matriz grande y ya no necesita algunos de sus elementos, ReDim puede liberar
memoria al reducir el tamaño de la matriz. Por otro lado, si la matriz necesita más elementos, ReDim puede
agregarlos.
La instrucción ReDim está destinada solo a las matrices. No es válida en escalares (variables que contienen un
único valor), colecciones ni estructuras. Tenga en cuenta que, si declara una variable de tipo Array , la
instrucción ReDim no tiene suficiente información de tipo para crear la nueva matriz.
Solo puede usar ReDim en el nivel de procedimiento. Por lo tanto, el contexto de declaración de la variable debe
ser un procedimiento; no puede ser un archivo de código fuente, un espacio de nombres, una interfaz, una clase,
una estructura, un módulo o un bloque. Para obtener más información, vea Declaration Contexts and Default
Access Levels (Contextos de declaración y niveles de acceso predeterminados).
Reglas
Varias variables. Puede cambiar el tamaño de varias variables de matriz en la misma instrucción de
declaración y especificar las partes name y boundlist de cada variable. Las variables se separan con
comas.
Límites de matriz. Cada entrada de boundlist puede especificar los límites inferior y superior de esa
dimensión. El límite inferior es siempre 0 (cero). El límite superior es el valor de índice posible más alto
para esa dimensión, no la longitud de la dimensión (que es el límite superior más uno). El índice de cada
dimensión puede variar entre 0 y el valor del límite superior.
El número de dimensiones de boundlist debe coincidir con el número de dimensiones (rango) de la
matriz original.
Tipos de datos. La instrucción ReDim no puede cambiar el tipo de datos de una variable de matriz o sus
elementos.
Inicial. La instrucción ReDim no puede proporcionar nuevos valores de inicialización para los elementos
de la matriz.
Criterios. La instrucción ReDim no puede cambiar el rango (número de dimensiones) de la matriz.
Cambio de tamaño con Preser ve. Si utiliza Preserve , solo podrá cambiar el tamaño de la última
dimensión de la matriz. Para cualquier otra dimensión, debe especificar el límite de la matriz existente.
Por ejemplo, si su matriz tiene solo una dimensión, puede cambiar el tamaño de esa dimensión y
conservar todo el contenido de la matriz, ya que es la última y única dimensión. Sin embargo, si su matriz
tiene dos o más dimensiones, puede cambiar solamente el tamaño de la última dimensión si utiliza
Preserve .
Propiedades. Puede usar ReDim en una propiedad que contiene una matriz de valores.
Comportamiento
Reemplazo de matriz. ReDim libera la matriz existente y crea una nueva matriz con el mismo rango. La
nueva matriz reemplaza la matriz liberada en la variable de matriz.
Inicialización sin Preser ve. Si no se especifica Preserve , ReDim inicializa los elementos de la nueva
matriz utilizando el valor predeterminado para su tipo de datos.
Inicialización con Preser ve. Si especifica Preserve , Visual Basic copia los elementos de la matriz
existente en la nueva matriz.
Ejemplo
El ejemplo siguiente aumenta el tamaño de la última dimensión de una matriz dinámica sin perder los datos
existentes en la matriz y, a continuación, reduce el tamaño con pérdida de datos parcial. Por último, reduce el
tamaño a su valor original y reinicializa todos los elementos de la matriz.
La instrucción Dim crea una nueva matriz con tres dimensiones. Cada dimensión se declara con un límite de 10,
por lo que el índice de matriz para cada dimensión puede oscilar entre 0 y 10. En el siguiente análisis, las tres
dimensiones se conocen como capa, fila y columna.
El primer ReDim crea una nueva matriz que reemplaza la matriz existente en la variable intArray . ReDim copia
todos los elementos de la matriz existente en la nueva matriz. También agrega 10 columnas más al final de cada
fila en cada capa e inicializa los elementos de estas nuevas columnas a 0 (el valor predeterminado de Integer ,
que es el tipo de elemento de la matriz).
El segundo ReDim crea otra nueva matriz y copia todos los elementos que quepan. Sin embargo, se pierden
cinco columnas del final de cada fila en cada capa. No es un problema si ya ha terminado de utilizar estas
columnas. Reducir el tamaño de una matriz grande puede liberar memoria que ya no necesite.
El tercer ReDim crea otra nueva matriz y quita otras cinco columnas del final de cada fila en cada capa. Esta vez
no copia los elementos existentes. Esta instrucción revierte la matriz a su tamaño original. Dado que la
instrucción no incluye el modificador Preserve , establece todos los elementos de matriz con sus valores
predeterminados originales.
Para obtener más ejemplos, consulte matrices.
Vea también
IndexOutOfRangeException
Const (instrucción)
Dim (instrucción)
Erase (instrucción)
Nothing
Matrices
REM (Instrucción, Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Sintaxis
REM comment
' comment
Elementos
comment
Opcional. Texto de cualquier comentario que desee incluir. Se requiere un espacio entre la palabra clave REM y
comment .
Comentarios
Puede colocar una instrucción REM sola en una línea o puede colocarla en una línea después de otra instrucción.
La instrucción REM debe ser la última instrucción de la línea. Si sigue otra instrucción, el REM debe estar separado
de la instrucción por un espacio.
Puede usar una comilla simple ( ' ) en lugar de REM . Esto es así si el comentario sigue a otra instrucción en la
misma línea o solo se coloca en una línea.
NOTE
No se puede continuar una instrucción REM mediante una secuencia de continuación de línea ( _ ). Una vez que se inicia un
comentario, el compilador no examina los caracteres para un significado especial. Para un Comentario de varias líneas, use
otra instrucción REM o un símbolo de comentario ( ' ) en cada línea.
Ejemplo
En el ejemplo siguiente se muestra la instrucción REM , que se usa para incluir comentarios explicativos en un
programa. También se muestra la alternativa de usar el carácter de comilla simple ( ' ) en lugar de REM .
Vea también
Comentarios en código
Interrumpir y combinar instrucciones en código
RemoveHandler (Instrucción)
27/11/2019 • 2 minutes to read • Edit Online
Sintaxis
RemoveHandler event, AddressOf eventhandler
Elementos
T ÉRM IN O DEF IN IC IÓ N
Comentarios
Las instrucciones AddHandler y RemoveHandler permiten iniciar y detener el control de eventos para un evento
concreto en cualquier momento durante la ejecución del programa.
NOTE
En el caso de los eventos personalizados, la instrucción RemoveHandler invoca al descriptor de acceso RemoveHandler
del evento. Para obtener más información sobre los eventos personalizados, vea Event Statement.
Ejemplo
Sub TestEvents()
Dim Obj As New Class1
' Associate an event handler with an event.
AddHandler Obj.Ev_Event, AddressOf EventHandler
' Call the method to raise the event.
Obj.CauseSomeEvent()
' Stop handling events.
RemoveHandler Obj.Ev_Event, AddressOf EventHandler
' This event will not be handled.
Obj.CauseSomeEvent()
End Sub
Sub EventHandler()
' Handle the event.
MsgBox("EventHandler caught event.")
End Sub
Vea también
AddHandler (instrucción)
Handles
Event (instrucción)
Eventos
Resume (Instrucción)
27/11/2019 • 4 minutes to read • Edit Online
Reanuda la ejecución después de que haya finalizado una rutina de control de errores.
Se recomienda usar el control de excepciones estructurado en el código siempre que sea posible, en lugar de
usar el control de excepciones no estructurado y las instrucciones On Error y Resume . Para obtener más
información, vea Try...Catch...Finally Statement (Try...Catch...Finally [Instrucción, Visual Basic]).
Sintaxis
Resume [ Next | line ]
Elementos
Resume
Obligatorio. Si el error se produjo en el mismo procedimiento que el controlador de errores, la ejecución se
reanuda con la instrucción que causó el error. Si el error se produjo en un procedimiento llamado, la ejecución se
reanuda en la instrucción que se ha llamado por última vez en el procedimiento que contiene la rutina de control
de errores.
Next
Opcional. Si el error se produjo en el mismo procedimiento que el controlador de errores, la ejecución se
reanudará con la instrucción inmediatamente posterior a la instrucción que causó el error. Si el error se produjo
en un procedimiento llamado, la ejecución se reanuda con la instrucción inmediatamente posterior a la
instrucción que se ha llamado por última vez en el procedimiento que contiene la rutina de control de errores (o
On Error Resume Next instrucción).
line
Opcional. La ejecución se reanuda en la línea especificada en el argumento line requerido. El line argumento
es una etiqueta de línea o un número de línea y debe estar en el mismo procedimiento que el controlador de
errores.
Comentarios
NOTE
Se recomienda usar el control de excepciones estructurado en el código siempre que sea posible, en lugar de usar el control
de excepciones no estructurado y las instrucciones On Error y Resume . Para obtener más información, vea
Try...Catch...Finally Statement (Try...Catch...Finally [Instrucción, Visual Basic]).
Si utiliza una instrucción Resume en cualquier lugar que no sea en una rutina de control de errores, se producirá
un error.
No se puede usar la instrucción Resume en ningún procedimiento que contenga una instrucción
Try...Catch...Finally .
Ejemplo
En este ejemplo se utiliza la instrucción Resume para finalizar el control de errores en un procedimiento y, a
continuación, reanudar la ejecución con la instrucción que causó el error. Se genera el número de error 55 para
mostrar el uso de la instrucción Resume .
Sub ResumeStatementDemo()
On Error GoTo ErrorHandler ' Enable error-handling routine.
Dim x As Integer = 32
Dim y As Integer = 0
Dim z As Integer
z = x / y ' Creates a divide by zero error
Exit Sub ' Exit Sub to avoid error handler.
ErrorHandler: ' Error-handling routine.
Select Case Err.Number ' Evaluate error number.
Case 6 ' "Divide by zero" error.
y = 1 ' Sets the value of y to 1 and tries the calculation again.
Case Else
' Handle other situations here....
End Select
Resume ' Resume execution at same line
' that caused the error.
End Sub
Requisitos
Espacio de nombres: Microsoft. VisualBasic
Ensamblado: Biblioteca en tiempo de ejecución de Visual Basic (en Microsoft. VisualBasic. dll)
Vea también
Try...Catch...Finally (instrucción)
Error (instrucción)
On Error (instrucción)
Return (Instrucción, Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Devuelve el control al código que llamó a un procedimiento Function , Sub , Get , Set o Operator .
Sintaxis
Return
' -or-
Return expression
Parte
expression
Obligatorio en un procedimiento Function , Get o Operator . Expresión que representa el valor que se va a
devolver al código de llamada.
Comentarios
En un procedimiento Sub o Set , la instrucción Return es equivalente a una instrucción Exit Sub o
Exit Property y no se debe proporcionar expression .
NOTE
El código de un bloque de Finally se ejecuta después de que se encuentre una instrucción de Return en un
bloque de Try o Catch , pero antes de que se ejecute la instrucción Return . No se puede incluir una instrucción
Return en un bloque de Finally .
Ejemplo
En el ejemplo siguiente se utiliza la instrucción Return varias veces para volver al código de llamada cuando
el procedimiento no tiene que hacer nada más.
Public Function GetAgePhrase(ByVal age As Integer) As String
If age > 60 Then Return "Senior"
If age > 40 Then Return "Middle-aged"
If age > 20 Then Return "Adult"
If age > 12 Then Return "Teen-aged"
If age > 4 Then Return "School-aged"
If age > 1 Then Return "Toddler"
Return "Infant"
End Function
Vea también
Function (instrucción)
Sub (instrucción)
Get (instrucción)
Set (instrucción)
Operator Statement
Property (instrucción)
Exit (instrucción)
Try...Catch...Finally (instrucción)
Instrucción Select...Case (Visual Basic)
27/11/2019 • 8 minutes to read • Edit Online
Ejecuta uno de varios grupos de instrucciones, dependiendo del valor de una expresión.
Sintaxis
Select [ Case ] testexpression
[ Case expressionlist
[ statements ] ]
[ Case Else
[ elsestatements ] ]
End Select
Elementos
T ÉRM IN O DEF IN IC IÓ N
- expression1 To expresión2
-[ Is ] expresión comparisonoperator
- expresión )
Comentarios
Si testexpression coincide con cualquier cláusula Case expressionlist , las instrucciones que siguen a esa
instrucción Case se ejecutan hasta la siguiente instrucción Case , Case Else o End Select . A continuación, el
control pasa a la instrucción siguiente End Select . Si testexpression coincide con una cláusula de
expressionlist en más de una cláusula Case , solo se ejecutan las instrucciones que siguen a la primera
coincidencia.
La instrucción Case Else se utiliza para introducir el elsestatements que se va a ejecutar si no se encuentra
ninguna coincidencia entre el testexpression y una cláusula expressionlist en cualquiera de las otras
instrucciones Case . Aunque no es necesario, es una buena idea tener una Case Else instrucción en la
construcción de Select Case para administrar valores de testexpression imprevistos. Si ninguna cláusula de
expressionlist de Case coincide con testexpression y no hay ninguna instrucción Case Else , el control
pasa a la instrucción siguiente a End Select .
Puede usar varias expresiones o intervalos en cada cláusula de Case . Por ejemplo, la siguiente línea es válida.
Case 1 To 4, 7 To 9, 11, 13, Is > maxNumber
NOTE
La palabra clave Is utilizada en las instrucciones Case y Case Else no es igual que el operador is, que se utiliza
para la comparación de referencias de objetos.
Puede especificar intervalos y varias expresiones para las cadenas de caracteres. En el ejemplo siguiente, Case
coincide con cualquier cadena que sea exactamente igual a "manzanas", tiene un valor entre "NUTS" y "sopa"
en orden alfabético, o contiene el mismo valor exacto que el valor actual de testItem .
Case "apples", "nuts" To "soup", testItem
La configuración de Option Compare puede afectar a las comparaciones de cadenas. En Option Compare Text ,
las cadenas "manzanas" y "manzanas" se comparan como iguales, pero en Option Compare Binary no lo hacen.
NOTE
Una instrucción Case con varias cláusulas puede presentar un comportamiento conocido como cortocircuito. Visual
Basic evalúa las cláusulas de izquierda a derecha y, si una genera una coincidencia con testexpression , no se evalúan
las cláusulas restantes. El cortocircuito puede mejorar el rendimiento, pero puede producir resultados inesperados si
espera que se evalúen todas las expresiones de expressionlist . Para obtener más información sobre el cortocircuito,
vea Expresiones booleanas.
Si el código de un bloque de instrucciones Case o Case Else no necesita ejecutar más instrucciones en el
bloque, puede salir del bloque mediante la instrucción Exit Select . Esto transfiere el control inmediatamente
a la instrucción siguiente End Select .
Select Case construcciones se pueden anidar. Cada construcción de Select Case anidada debe tener una
instrucción End Select coincidente y debe estar dentro de un único bloque de instrucciones Case o
Case Else de la construcción de Select Case externa en la que está anidada.
Ejemplo
En el ejemplo siguiente se usa una construcción Select Case para escribir una línea que se corresponda con el
valor de la variable number . La segunda instrucción Case contiene el valor que coincide con el valor actual de
number , por lo que la instrucción que escribe "between 6 and 8, inclusive" se ejecuta.
Dim number As Integer = 8
Select Case number
Case 1 To 5
Debug.WriteLine("Between 1 and 5, inclusive")
' The following is the only Case clause that evaluates to True.
Case 6, 7, 8
Debug.WriteLine("Between 6 and 8, inclusive")
Case 9 To 10
Debug.WriteLine("Equal to 9 or 10")
Case Else
Debug.WriteLine("Not between 1 and 10, inclusive")
End Select
Vea también
Choose
End (instrucción)
If...Then...Else (instrucción)
Option Compare (instrucción)
Exit (instrucción)
Instrucción Set (Visual Basic)
27/11/2019 • 5 minutes to read • Edit Online
Declara un procedimiento de propiedad Set que se usa para asignar un valor a una propiedad.
Sintaxis
[ <attributelist> ] [ accessmodifier ] Set (ByVal value [ As datatype ])
[ statements ]
End Set
Elementos
attributelist
Opcional. Vea lista de atributos.
accessmodifier
Opcional en, como máximo, una de las instrucciones Get y Set de esta propiedad. Puede ser uno de los
siguientes:
Protected
Friend
Private
Protected Friend
Comentarios
Cada propiedad debe tener un procedimiento de propiedad Set a menos que la propiedad esté marcada
ReadOnly . El procedimiento Set se utiliza para establecer el valor de la propiedad.
Visual Basic llama automáticamente al procedimiento Set de una propiedad cuando una instrucción de
asignación proporciona un valor que se va a almacenar en la propiedad.
Visual Basic pasa un parámetro al procedimiento Set durante las asignaciones de propiedades. Si no
proporciona un parámetro para Set , el entorno de desarrollo integrado (IDE) utiliza un parámetro implícito
denominado value . El parámetro contiene el valor que se va a asignar a la propiedad. Normalmente, este valor
se almacena en una variable local privada y se devuelve cada vez que se llama al procedimiento Get .
El cuerpo de la declaración de propiedad solo puede contener los procedimientos Get y Set de la propiedad
entre la instrucción Property y la instrucción End Property . No puede almacenar nada que no sea esos
procedimientos. En concreto, no puede almacenar el valor actual de la propiedad. Debe almacenar este valor
fuera de la propiedad, porque si lo almacena dentro de cualquiera de los procedimientos de propiedad, el otro
procedimiento de propiedad no podrá tener acceso a él. El enfoque habitual es almacenar el valor en una
variable privada declarada en el mismo nivel que la propiedad. Debe definir un procedimiento de Set dentro de
la propiedad a la que se aplica.
El procedimiento Set toma como valor predeterminado el nivel de acceso de la propiedad que lo contiene a
menos que use accessmodifier en la instrucción Set .
Reglas
Niveles de acceso mixtos. Si va a definir una propiedad de lectura y escritura, puede especificar
opcionalmente un nivel de acceso diferente para el Get o el procedimiento de Set , pero no ambos. Si lo
hace, el nivel de acceso del procedimiento debe ser más restrictivo que el nivel de acceso de la propiedad.
Por ejemplo, si la propiedad se declara Friend , puede declarar el Set procedimiento Private , pero no
Public .
Comportamiento
Devolver desde un procedimiento de propiedad. Cuando el procedimiento Set devuelve al código
de llamada, la ejecución continúa después de la instrucción que proporcionó el valor que se va a
almacenar.
Set procedimientos de propiedad pueden devolver mediante la instrucción return o la instrucción Exit.
Las instrucciones Exit Property y Return producen una salida inmediata de un procedimiento de
propiedad. Cualquier número de instrucciones Exit Property y Return puede aparecer en cualquier
parte del procedimiento y se pueden mezclar instrucciones Exit Property y Return .
Ejemplo
En el ejemplo siguiente se usa la instrucción Set para establecer el valor de una propiedad.
Class propClass
Private propVal As Integer
Property Prop1() As Integer
Get
Return propVal
End Get
Set(ByVal value As Integer)
propVal = value
End Set
End Property
End Class
Vea también
Get (instrucción)
Property (instrucción)
Sub (instrucción)
Procedimientos de propiedades
Stop (Instrucción, Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Suspende la ejecución.
Sintaxis
Stop
Comentarios
Puede colocar Stop instrucciones en cualquier parte de los procedimientos para suspender la ejecución. El uso
de la instrucción Stop es similar al establecimiento de un punto de interrupción en el código.
La instrucción Stop suspende la ejecución, pero a diferencia de End , no cierra ningún archivo ni borra ninguna
variable, a menos que se encuentre en un archivo ejecutable (. exe) compilado.
NOTE
Si se encuentra la instrucción Stop en el código que se está ejecutando fuera del entorno de desarrollo integrado (IDE), se
invoca al depurador. Esto es así independientemente de si el código se compiló en modo de depuración o comercial.
Ejemplo
En este ejemplo se utiliza la instrucción Stop para suspender la ejecución de cada iteración a través del bucle
For...Next .
Dim i As Integer
For i = 1 To 10
Debug.WriteLine(i)
' Stop during each iteration and wait for user to resume.
Stop
Next i
Vea también
End (instrucción)
Structure (Instrucción)
27/11/2019 • 11 minutes to read • Edit Online
Declara el nombre de una estructura e introduce la definición de las variables, propiedades, eventos y
procedimientos que la estructura incluye.
Sintaxis
[ <attributelist> ] [ accessmodifier ] [ Shadows ] [ Partial ] _
Structure name [ ( Of typelist ) ]
[ Implements interfacenames ]
[ datamemberdeclarations ]
[ methodmemberdeclarations ]
End Structure
Elementos
T ÉRM IN O DEF IN IC IÓ N
- público
- protegido
- Friend
- privado
- Friend protegido
- protegido privado
Comentarios
La instrucción Structure define un tipo de valor compuesto que se puede personalizar. Una estructura
es una generalización del tipo definido por el usuario (UDT) de versiones anteriores de Visual Basic. Para
obtener más información, vea estructuras.
Las estructuras admiten muchas de las mismas características que las clases. Por ejemplo, las estructuras
pueden tener propiedades y procedimientos, pueden implementar interfaces y pueden tener
constructores con parámetros. No obstante, existen diferencias importantes entre las estructuras y las
clases en materias como la herencia, las declaraciones y la utilización. Además, las clases son tipos de
referencia y las estructuras son tipos de valor. Para obtener más información, vea estructuras y clases.
Structure solo se puede utilizar en un espacio de nombres o un nivel de módulo. Esto significa que el
contexto de la declaración de una estructura debe ser un archivo de código fuente, un espacio de
nombres, una clase, una estructura, un módulo o una interfaz y no puede ser un procedimiento o un
bloque. Para obtener más información, vea Declaration Contexts and Default Access Levels (Contextos de
declaración y niveles de acceso predeterminados).
El acceso predeterminado de las estructuras es Friend . Los niveles de acceso se pueden ajustar con los
modificadores de acceso. Para obtener más información, consulte niveles de acceso en Visual Basic.
Reglas
Anidamiento. Puede definirse una estructura dentro de otra. La estructura exterior se denomina
la estructura contenedoray la estructura interna se denomina estructura anidada. Sin embargo, no
se puede tener acceso a los miembros de una estructura anidada a través de la estructura
contenedora. En lugar de ello, se debe declarar una variable del tipo de datos de la estructura
anidada.
Declaración de miembro. Se debe declarar cada miembro de una estructura. Un miembro de
estructura no se puede proteger ni Protected Friend porque no se puede heredar nada de una
estructura. La propia estructura, sin embargo, puede ser de tipo Protected o Protected Friend .
En una estructura se pueden declarar cero o más variables no compartidas o eventos no
compartidos y no personalizados. No pueden utilizarse únicamente constantes, propiedades y
procedimientos, aunque algunos sean no compartidos.
Inicial. No se puede inicializar el valor de ningún miembro de datos de una estructura no
compartido como parte de su declaración. Dicho miembro de datos se debe inicializar mediante
un constructor con parámetros en la estructura o bien mediante la asignación de un valor al
miembro después de crear una instancia de la estructura.
Herencia. Una estructura no puede heredar de ningún tipo distinto de ValueType, del que todas
las estructuras heredan. En particular, una estructura no puede heredar de otra.
No se puede usar la instrucción Inherits en una definición de estructura, incluso para especificar
ValueType.
Aplicación. Si la estructura usa la instrucción Implements, debe implementar todos los miembros
definidos por cada interfaz que especifique en interfacenames .
Propiedad predeterminada. Una estructura puede especificar como máximo una propiedad
como su propiedad predeterminada, utilizando el modificador predeterminado . Para obtener más
información, vea default.
Comportamiento
Nivel de acceso. En una estructura, cada miembro se puede declarar con su propio nivel de
acceso. De forma predeterminada, todos los miembros de estructura tienen acceso público . Tenga
en cuenta que si la propia estructura utiliza un nivel de acceso más limitado, se restringe
automáticamente el acceso a sus miembros, aunque los niveles de acceso se ajusten con
modificadores.
ID. Una estructura está en ámbito en su espacio de nombres, clase, estructura o módulo
contenedores.
El ámbito de todos los miembros de la estructura es la estructura completa.
Validez. Una estructura no dispone por sí misma de período de duración. Más bien, cada
instancia de esa estructura tiene un período de duración independiente de todas las demás
instancias.
La duración de una instancia comienza cuando se crea mediante una nueva cláusula Operator .
Finaliza cuando finaliza el período de duración de la variable que la contiene.
No puede extender el período de duración de una instancia de estructura. Los módulos
proporcionan una aproximación a la funcionalidad de estructura estática. Para obtener más
información, vea Module Statement.
Los miembros de estructura disponen de un período de duración en función de cómo y donde se
declaran. Para obtener más información, vea "Lifetime" en la instrucción Class.
Evaluación. El código que se incluye fuera de una estructura debe calificar el nombre de un
miembro con el nombre de dicha estructura.
Si el código incluido en una estructura anidada realiza una referencia sin calificar a un elemento
de programación, Visual Basic busca este elemento en la estructura anidada en primer lugar, a
continuación en la estructura contenedora y así sucesivamente hasta el elemento contenedor
principal. Para obtener más información, consulta References to Declared Elements.
Consumo de memoria. Al igual que sucede con los demás tipos de datos compuestos, no puede
calcularse de forma precisa el consumo total de memoria de una estructura sumando las
asignaciones de almacenamiento nominal de sus miembros. Es más, no puede suponerse que el
orden de almacenamiento en memoria sea el mismo que el orden de la declaración. Si necesita
controlar el diseño de almacenamiento de una estructura, puede aplicar el atributo
StructLayoutAttribute a la instrucción Structure .
Ejemplo
En el siguiente ejemplo se utiliza la instrucción Structure para definir un conjunto de datos relacionados
de un empleado. Se muestra el uso de los miembros Public , Friend y Private para reflejar la
confidencialidad de los elementos de datos. También se muestran los miembros de evento, propiedad y
procedimiento.
Para obtener más información sobre cómo usar Structure s, consulte variable de estructura.
Vea también
Class (instrucción)
Interface (instrucción)
Module (instrucción)
Dim (instrucción)
Const (instrucción)
Enum (instrucción)
Event (instrucción)
Operator Statement
Property (instrucción)
Estructuras y clases
Sub (Instrucción, Visual Basic)
27/11/2019 • 12 minutes to read • Edit Online
Sintaxis
[ <attributelist> ] [ Partial ] [ accessmodifier ] [ proceduremodifiers ] [ Shared ] [ Shadows ] [
Async ]
Sub name [ (Of typeparamlist) ] [ (parameterlist) ] [ Implements implementslist | Handles
eventlist ]
[ statements ]
[ Exit Sub ]
[ statements ]
End Sub
Elementos
attributelist
NotOverridable Overrides
Shared
Obligatorio. Nombre del procedimiento. Vea Declared Element Names. Para crear un
procedimiento de constructor para una clase, establezca el nombre de una Sub procedimiento
en la palabra clave New . Para obtener más información, vea duración del objeto: cómo se crean
y destruyen los objetos.
typeparamlist
Opcional. Lista de parámetros de tipo para un procedimiento genérico. Consulte lista de tipos.
parameterlist
Opcional. Lista de nombres de variables locales que representan los parámetros de este
procedimiento. Vea lista de parámetros.
Implements
Opcional. Indica que este procedimiento implementa uno o varios procedimientos de Sub , cada
uno de los cuales se define en una interfaz implementada por la clase o estructura contenedora
de este procedimiento. Vea Implements (instrucción).
implementslist
PA RT E DESC RIP C IÓ N
Handles
Opcional. Indica que este procedimiento puede controlar uno o más eventos concretos. Vea
identificadores.
eventlist
PA RT E DESC RIP C IÓ N
statements
Comentarios
Todo el código ejecutable debe estar dentro de un procedimiento. Use un procedimiento Sub cuando
no desee devolver un valor al código de llamada. Use una Function procedimiento cuando desee
devolver un valor.
Las instrucciones Exit Sub y Return producen una salida inmediata de un procedimiento de Sub .
Cualquier número de instrucciones Exit Sub y Return puede aparecer en cualquier parte del
procedimiento y se pueden mezclar instrucciones Exit Sub y Return .
Puede usar la palabra clave Call al llamar a un procedimiento de Sub , pero esa palabra clave no se
recomienda para la mayoría de los usos. Para obtener más información, consulte instrucción call.
A veces Visual Basic reorganiza las expresiones aritméticas para aumentar la eficacia interna. Por ese
motivo, si la lista de argumentos incluye expresiones que llaman a otros procedimientos, no debe
asumir que se llamará a esas expresiones en un orden determinado.
NOTE
Un procedimiento Async vuelve al llamador cuando se encuentra el primer objeto esperado que aún no se ha
completado o hasta que se alcanza el final del procedimiento Async , lo que ocurra primero.
También puede marcar una instrucción de función con el modificador Async . Una función Async
puede tener un tipo de valor devuelto de Task<TResult> o Task. Un ejemplo más adelante en este tema
muestra una función Async que tiene un tipo de valor devuelto de Task<TResult>.
Async Subprocedimientos se utilizan principalmente para los controladores de eventos, donde no se
puede devolver un valor. No se puede esperar a un procedimiento de Sub de Async , y el llamador de
un procedimiento de Sub de Async no puede detectar las excepciones que produce el procedimiento
Sub .
Ejemplo
En el ejemplo siguiente, DelayAsync es un Function de Async que tiene un tipo de valor devuelto de
Task<TResult>. DelayAsync tiene una instrucción Return que devuelve un entero. Por lo tanto, la
declaración de función de DelayAsync debe tener un tipo de valor devuelto de Task(Of Integer) . Dado
que el tipo de valor devuelto es Task(Of Integer) , la evaluación de la expresión de Await en
DoSomethingAsync genera un entero, como se muestra en la siguiente instrucción:
Dim result As Integer = Await delayTask .
' Output:
' Result: 5
Vea también
Implements (instrucción)
Function (instrucción)
Lista de parámetros
Dim (instrucción)
Call (instrucción)
Of
Matrices de parámetros
Utilizar una clase genérica
Solución de problemas de procedimientos
Métodos Partial
SyncLock (Instrucción)
27/11/2019 • 9 minutes to read • Edit Online
Sintaxis
SyncLock lockobject
[ block ]
End SyncLock
Elementos
lockobject
Obligatorio. Expresión que se evalúa como una referencia de objeto.
block
Opcional. Bloque de instrucciones que se ejecutan cuando se adquiere el bloqueo.
End SyncLock
Finaliza un bloque de SyncLock .
Comentarios
La instrucción SyncLock garantiza que varios subprocesos no ejecuten el bloque de instrucciones al mismo
tiempo. SyncLock impide que cada subproceso entre en el bloque hasta que no lo ejecute ningún otro
subproceso.
El uso más común de SyncLock consiste en proteger los datos de la actualización a más de un subproceso
simultáneamente. Si las instrucciones que manipulan los datos deben ir a la finalización sin interrupción,
colóquelos dentro de un bloque SyncLock .
Un bloque de instrucciones protegido por un bloqueo exclusivo a veces se denomina sección crítica.
Reglas
Bifurcación. No se puede crear una bifurcación en un bloque SyncLock desde fuera del bloque.
Valor de bloqueo de objeto. No se puede Nothing el valor de lockobject . Debe crear el objeto de bloqueo
antes de usarlo en una instrucción SyncLock .
No se puede cambiar el valor de lockobject mientras se ejecuta un bloque de SyncLock . El mecanismo
requiere que el objeto de bloqueo permanezca sin cambios.
No se puede usar el operador Await en un bloque SyncLock .
Comportamiento
Método. Cuando un subproceso alcanza la instrucción SyncLock , evalúa la expresión lockobject y
suspende la ejecución hasta que adquiere un bloqueo exclusivo en el objeto devuelto por la expresión.
Cuando otro subproceso alcanza la instrucción SyncLock , no adquiere un bloqueo hasta que el primer
subproceso ejecuta la instrucción End SyncLock .
Datos protegidos. Si lockobject es una variable de Shared , el bloqueo exclusivo impide que un
subproceso de una instancia de la clase ejecute el bloque de SyncLock mientras otro subproceso lo está
ejecutando. Esto protege los datos que se comparten entre todas las instancias.
Si lockobject es una variable de instancia (no Shared ), el bloqueo impide que un subproceso que se
ejecuta en la instancia actual ejecute el bloque de SyncLock al mismo tiempo que otro subproceso de la
misma instancia. Esto protege los datos mantenidos por la instancia individual.
Adquisición y lanzamiento. Un bloque SyncLock se comporta como una construcción Try...Finally en la
que el bloque Try adquiere un bloqueo exclusivo en lockobject y el bloque Finally lo libera. Por este
motivo, el bloque SyncLock garantiza la liberación del bloqueo, independientemente de cómo salga del
bloque. Esto es así incluso en el caso de una excepción no controlada.
Llamadas de marco de trabajo. El bloque SyncLock adquiere y libera el bloqueo exclusivo mediante una
llamada a los métodos Enter y Exit de la clase Monitor en el espacio de nombres System.Threading.
Prácticas de programación
La expresión lockobject siempre debe evaluarse como un objeto que pertenezca exclusivamente a la clase. Debe
declarar un Private variable de objeto para proteger los datos que pertenecen a la instancia actual o una
variable de objeto Private Shared para proteger los datos comunes a todas las instancias.
No debe utilizar la palabra clave Me para proporcionar un objeto de bloqueo para los datos de instancia. Si el
código externo a la clase tiene una referencia a una instancia de la clase, podría usar esa referencia como un
objeto de bloqueo para un bloque SyncLock completamente diferente del suyo, protegiendo los datos diferentes.
De esta manera, la clase y la otra clase podrían bloquearse entre sí desde la ejecución de los bloques de SyncLock
no relacionados. Un bloqueo similar en una cadena puede ser problemático, ya que cualquier otro código del
proceso que use la misma cadena compartirá el mismo bloqueo.
Tampoco debe utilizar el método Me.GetType para proporcionar un objeto de bloqueo para los datos
compartidos. Esto se debe a que GetType siempre devuelve el mismo objeto Type para un nombre de clase
determinado. El código externo podría llamar a GetType en la clase y obtener el mismo objeto de bloqueo que
está utilizando. Esto daría lugar a que las dos clases se bloqueen entre sí desde sus bloques SyncLock .
Ejemplos
Descripción
En el ejemplo siguiente se muestra una clase que mantiene una lista de mensajes simple. Contiene los mensajes
de una matriz y el último elemento utilizado de esa matriz en una variable. En el procedimiento
addAnotherMessage se incrementa el último elemento y se almacena el mensaje nuevo. Estas dos operaciones
están protegidas por las instrucciones SyncLock y End SyncLock , porque una vez que se ha incrementado el
último elemento, el nuevo mensaje se debe almacenar antes de que cualquier otro subproceso pueda
incrementar el último elemento de nuevo.
Si la clase compartió una lista de mensajes entre todas sus instancias, las variables
simpleMessageList
messagesList y messagesLast se declararían como Shared . En este caso, la variable messagesLock también debe
ser Shared , de modo que haya un único objeto de bloqueo utilizado por cada instancia.
Código
Class simpleMessageList
Public messagesList() As String = New String(50) {}
Public messagesLast As Integer = -1
Private messagesLock As New Object
Public Sub addAnotherMessage(ByVal newMessage As String)
SyncLock messagesLock
messagesLast += 1
If messagesLast < messagesList.Length Then
messagesList(messagesLast) = newMessage
End If
End SyncLock
End Sub
End Class
Descripción
En el ejemplo siguiente se usan subprocesos y SyncLock . Siempre y cuando la instrucción SyncLock esté
presente, el bloque de instrucciones es una sección crítica y balance nunca se convierte en un número negativo.
Puede comentar las instrucciones SyncLock y End SyncLock para ver el efecto de salir de la palabra clave
SyncLock .
Código
Imports System.Threading
Module Module1
Class Account
Dim thisLock As New Object
Dim balance As Integer
' Comment out the SyncLock and End SyncLock lines to see
' the effect of leaving out the SyncLock keyword.
SyncLock thisLock
If balance >= amount Then
Console.WriteLine("Balance before Withdrawal : " & balance)
Console.WriteLine("Amount to Withdraw : -" & amount)
balance = balance - amount
Console.WriteLine("Balance after Withdrawal : " & balance)
Return amount
Else
' Transaction rejected.
Return 0
End If
End SyncLock
End Function
Sub Main()
Dim threads(10) As Thread
Dim acc As New Account(1000)
For i As Integer = 0 To 9
Dim t As New Thread(New ThreadStart(AddressOf acc.DoTransactions))
threads(i) = t
Next
For i As Integer = 0 To 9
threads(i).Start()
Next
End Sub
End Module
Comentarios
Vea también
System.Threading.Monitor
System.Threading.Interlocked
Información general sobre las primitivas de sincronización
Then (Instrucción)
27/11/2019 • 2 minutes to read • Edit Online
Introduce un bloque de instrucciones que se va a compilar o ejecutar si una condición probada es true.
Comentarios
La palabra clave Then se puede usar en los siguientes contextos:
#If... Then... #Else (Directiva)
If...Then...Else (instrucción)
Vea también
Palabras clave
Throw (Instrucción, Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Sintaxis
Throw [ expression ]
Parte
expression
Proporciona información sobre la excepción que se va a producir. Opcional cuando reside en una instrucción
Catch , si es necesario.
Comentarios
La instrucción Throw produce una excepción que se puede controlar con el código estructurado de control de
excepciones ( Try ... Catch ... Finally ) o el código de control de excepciones no estructurado ( On Error GoTo ).
Puede utilizar la instrucción Throw para interceptar los errores dentro del código porque Visual Basic sube por la
pila de llamadas hasta que encuentra el código de control de excepciones adecuado.
Una instrucción Throw sin expresión solo se puede usar en una instrucción Catch , en cuyo caso la instrucción
vuelve a producir la excepción que controla actualmente la instrucción Catch .
La instrucción Throw restablece la pila de llamadas de la excepción expression . Si no se proporciona expression ,
la pila de llamadas permanece sin cambios. Puede tener acceso a la pila de llamadas de la excepción a través de la
propiedad StackTrace.
Ejemplo
En el código siguiente se usa la instrucción Throw para producir una excepción:
Vea también
Try...Catch...Finally (instrucción)
On Error (instrucción)
Instrucción Try...Catch...Finally (Visual Basic)
10/01/2020 • 24 minutes to read • Edit Online
Proporciona una manera de controlar algunos o todos los errores posibles que se pueden producir en un
bloque de código determinado, mientras se sigue ejecutando el código.
Sintaxis
Try
[ tryStatements ]
[ Exit Try ]
[ Catch [ exception [ As type ] ] [ When expression ]
[ catchStatements ]
[ Exit Try ] ]
[ Catch ... ]
[ Finally
[ finallyStatements ] ]
End Try
Componentes de
T ÉRM IN O DE ESQ UEM A JSO N
Notas
Si espera que se produzca una excepción determinada durante una sección de código determinada,
coloque el código en un bloque de Try y use un bloque de Catch para conservar el control y controlar
la excepción si se produce.
Una instrucción Try…Catch está formada por un bloque Try seguido de una o varias cláusulas Catch ,
que especifican Controladores para distintas excepciones. Cuando se produce una excepción en un
bloque Try , Visual Basic busca la instrucción Catch que controla la excepción. Si no se encuentra una
instrucción Catch coincidente, Visual Basic examina el método que llamó al método actual, y así
sucesivamente en la pila de llamadas. Si no se encuentra ningún bloque Catch , Visual Basic muestra al
usuario un mensaje de excepción no controlada y detiene la ejecución del programa.
Puede usar más de una instrucción Catch en una instrucción Try…Catch . Si lo hace, el orden de las
cláusulas Catch es significativo porque se examinan en orden. Detectar las excepciones más específicas
antes que las menos específicas.
Las siguientes condiciones de la instrucción Catch son las menos específicas y detectarán todas las
excepciones que derivan de la clase Exception. Normalmente, debe usar una de estas variaciones como
último Catch bloque en la estructura Try...Catch...Finally , después de detectar todas las excepciones
específicas que espera. El flujo de control nunca puede llegar a un bloque Catch que siga cualquiera de
estas variaciones.
El type es Exception , por ejemplo: Catch ex As Exception
Cuando una instrucción Try…Catch…Finally está anidada en otro bloque de Try , Visual Basic primero
examina cada instrucción Catch en el bloque de Try más interno. Si no se encuentra ninguna
instrucción Catch coincidente, la búsqueda continúa en las instrucciones de Catch del bloque de
Try…Catch…Finally exterior.
Las variables locales de un bloque Try no están disponibles en un bloque de Catch porque son
bloques independientes. Si desea utilizar una variable en más de un bloque, declare la variable fuera de
la estructura de Try...Catch...Finally .
TIP
La instrucción Try…Catch…Finally está disponible como fragmento de código de IntelliSense. En el
administrador de fragmentos de código, expanda patrones de código: Si, para cada uno, pruebe Catch,
Proper ty, etc. y, a continuación, control de errores (excepciones) . Para obtener más información, vea
Fragmentos de código.
Bloque Finally
Si tiene una o más instrucciones que se deben ejecutar antes de salir de la estructura de Try , utilice un
bloque de Finally . El control pasa al bloque Finally justo antes de salir de la estructura de Try…Catch .
Esto es así incluso si se produce una excepción en cualquier parte dentro de la estructura de Try .
Un bloque Finally es útil para ejecutar cualquier código que deba ejecutarse incluso si se produce una
excepción. El control se pasa al bloque Finally independientemente de cómo salga el bloque de
Try...Catch .
El código de un bloque de Finally se ejecuta incluso si el código encuentra una instrucción Return en
un bloque Try o Catch . El control no pasa de un bloque Try o Catch al bloque Finally
correspondiente en los casos siguientes:
Se encuentra una instrucción end en el bloque Try o Catch .
Se produce una StackOverflowException en el bloque de Try o Catch .
No es válido transferir explícitamente la ejecución a un bloque Finally . La transferencia de la ejecución
fuera de un bloque Finally no es válida, excepto a través de una excepción.
Si una instrucción Try no contiene al menos un bloque de Catch , debe contener un bloque de Finally
.
TIP
Si no tiene que detectar excepciones específicas, la instrucción Using se comporta como un bloque
Try…Finally y garantiza la eliminación de los recursos, independientemente de cómo salga del bloque. Esto es
así incluso con una excepción no controlada. Para obtener más información, vea Using (Instrucción).
Argumento de excepción
El exception argumento Catch bloque es una instancia de la clase Exception o una clase que deriva de
la clase Exception . La instancia de la clase Exception se corresponde con el error que se produjo en el
bloque de Try .
Las propiedades del objeto Exception ayudan a identificar la causa y la ubicación de una excepción. Por
ejemplo, la propiedad StackTrace muestra los métodos llamados que dieron lugar a la excepción, lo que
le ayuda a encontrar el lugar en el que se produjo el error en el código. Message devuelve un mensaje
que describe la excepción. HelpLink devuelve un vínculo a un archivo de ayuda asociado. InnerException
devuelve el objeto Exception que causó la excepción actual, o devuelve Nothing si no hay ningún
Exception original.
Console.Write(sr.ReadToEnd)
sr.Close()
End If
End Sub
Asegúrese de que el código de los bloques de Catch pueda notificar correctamente las excepciones a los
usuarios, ya sea a través del registro seguro para subprocesos o de los mensajes adecuados. De lo
contrario, es posible que las excepciones sigan siendo desconocidas.
Métodos asincrónicos
Si marca un método con el modificador Async , puede usar el operador Await en el método. Una
instrucción con el operador Await suspende la ejecución del método hasta que se completa la tarea
esperada. La tarea representa el trabajo en curso. Cuando finaliza la tarea asociada al operador de Await
, la ejecución se reanuda en el mismo método. Para obtener más información, vea flujo de control en
programas Async.
Una tarea devuelta por un método asincrónico puede finalizar en un estado de error, lo que indica que se
completó debido a una excepción no controlada. Una tarea también puede terminar en un estado
cancelado, lo que provoca que se produzca una OperationCanceledException fuera de la expresión Await.
Para detectar cualquier tipo de excepción, coloque la Await expresión asociada a la tarea en un bloque
de Try y Capture la excepción en el bloque de Catch . Más adelante en este tema se proporciona un
ejemplo.
Una tarea puede tener un estado de error porque varias excepciones eran responsables de su error. Por
ejemplo, la tarea podría ser el resultado de una llamada a Task.WhenAll. Cuando espera una tarea de este
tipo, la excepción detectada es solo una de las excepciones y no puede predecir qué excepción se
detectará. Más adelante en este tema se proporciona un ejemplo.
Una expresión de Await no puede estar dentro de un bloque de Catch o de Finally .
Iterators
Una función de iterador o Get descriptor de acceso realiza una iteración personalizada en una colección.
Un iterador usa una instrucción yield para devolver cada elemento de la colección de uno en uno. Se
llama a una función de iterador mediante un método for each... Instrucción siguiente.
Una instrucción Yield puede estar dentro de un bloque Try . Un bloque Try que contiene una
instrucción Yield puede tener bloques Catch y puede tener un bloque Finally . Vea la sección "Try
blocks in Visual Basic" de iteradores para obtener un ejemplo.
Una instrucción Yield no puede estar dentro de un bloque de Catch o un bloque Finally .
Si el cuerpo de For Each (fuera de la función de iterador) produce una excepción, no se ejecuta un
bloque de Catch en la función de iterador, pero se ejecuta un bloque de Finally en la función de
iterador. Un bloque Catch dentro de una función de iterador solo detecta las excepciones que se
producen dentro de la función de iterador.
Try
Process.Start("http://www.microsoft.com")
Catch ex As Exception
MsgBox("Can't load Web page" & vbCrLf & ex.Message)
End Try
En una situación de confianza parcial, tiene que colocar la instrucción Process.Start en un Sub
independiente. Se producirá un error en la llamada inicial a la Sub . Esto permite a Try...Catch
detectarla antes de que se inicie el Sub que contiene Process.Start y se produzca la excepción de
seguridad.
Ejemplos
La estructura de try... Detectar... Terminar
En el ejemplo siguiente se muestra la estructura de la instrucción Try...Catch...Finally .
Public Sub TryExample()
' Declare variables.
Dim x As Integer = 5
Dim y As Integer = 0
Try
Throw New ArgumentException()
Catch e As OverflowException When i = 5
Console.WriteLine("First handler")
Catch e As ArgumentException When i = 4
Console.WriteLine("Second handler")
Catch When i = 5
Console.WriteLine("Third handler")
End Try
End Sub
' Output: Third handler
Try
Dim result As String = Await theTask
Debug.WriteLine("Result: " & result)
Catch ex As Exception
Debug.WriteLine("Exception Message: " & ex.Message)
End Try
Try
Await allTasks
Catch ex As Exception
Debug.WriteLine("Exception: " & ex.Message)
Debug.WriteLine("Task IsFaulted: " & allTasks.IsFaulted)
For Each inEx In allTasks.Exception.InnerExceptions
Debug.WriteLine("Task Inner Exception: " + inEx.Message)
Next
End Try
End Function
' Output:
' Exception: Error-First Task
' Task IsFaulted: True
' Task Inner Exception: Error-First Task
' Task Inner Exception: Error-Second Task
' Task Inner Exception: Error-Third Task
Vea también
Err
Exception
Exit (instrucción)
On Error (instrucción)
Procedimientos recomendados para usar fragmentos de código
Control de excepciones
Throw (instrucción)
Using (Instrucción, Visual Basic)
27/11/2019 • 8 minutes to read • Edit Online
Declara el principio de un bloque Using y, opcionalmente, adquiere los recursos del sistema que controla el
bloque.
Sintaxis
Using { resourcelist | resourceexpression }
[ statements ]
End Using
Elementos
T ÉRM IN O DEF IN IC IÓ N
Cada recurso del elemento resourcelist tiene la sintaxis y las partes siguientes:
resourcename As New resourcetype [ ( [ arglist ] ) ]
O bien,
resourcename As resourcetype = resourceexpression
Elementos resourcelist
T ÉRM IN O DEF IN IC IÓ N
Comentarios
A veces, el código requiere un recurso no administrado, como un identificador de archivo, un contenedor COM o
una conexión SQL. Un bloque Using garantiza la eliminación de uno o más recursos de este tipo cuando el
código finaliza con ellos. Esto hace que estén disponibles para que los use otro código.
Los recursos administrados son eliminados por el recolector de elementos no utilizados (GC) de .NET Framework
sin necesidad de codificación adicional por su parte. No necesita un bloque Using para los recursos
administrados. Sin embargo, todavía puede usar un bloque Using para forzar la eliminación de un recurso
administrado en lugar de esperar al recolector de elementos no utilizados.
Un bloque Using tiene tres partes: adquisición, uso y eliminación.
La adquisición significa crear una variable e inicializarla para hacer referencia al recurso del sistema. La
instrucción Using puede adquirir uno o más recursos, o bien puede adquirir exactamente un recurso antes
de entrar en el bloque y suministrarlo a la instrucción Using . Si proporciona resourceexpression , debe
adquirir el recurso antes de pasar el control a la instrucción Using .
El uso significa tener acceso a los recursos y realizar acciones con ellos. Las instrucciones entre Using y
End Using representan el uso de los recursos.
La eliminación significa llamar al método Dispose en el objeto en resourcename . Esto permite que el objeto
finalice correctamente sus recursos. La instrucción End Using desecha los recursos del control del bloque
de Using .
Comportamiento
Un bloque de Using se comporta como una construcción Try ... Finally en la que el bloque de Try utiliza los
recursos y el bloque de Finally los desecha. Por este motivo, el bloque de Using garantiza la eliminación de los
recursos, con independencia de cómo salga del bloque. Esto es así incluso en el caso de una excepción no
controlada, excepto para un StackOverflowException.
El ámbito de cada variable de recurso adquirido por la instrucción Using se limita al bloque Using .
Si especifica más de un recurso del sistema en la instrucción Using , el efecto es el mismo que si anidara Using
bloques uno dentro de otro.
Si resourcename es Nothing , no se realiza ninguna llamada a Dispose y no se produce ninguna excepción.
NOTE
El código dentro del bloque Using no debe asignar el objeto de resourcename a otra variable. Al salir del bloque Using
, el recurso se desecha y la otra variable no puede tener acceso al recurso al que señala.
Ejemplo
En el ejemplo siguiente se crea un archivo denominado log. txt y se escriben dos líneas de texto en el archivo. En
el ejemplo también se lee el mismo archivo y se muestran las líneas de texto:
Dado que las clases TextWriter y TextReader implementan la interfaz IDisposable, el código puede usar
instrucciones Using para asegurarse de que el archivo se cierra correctamente después de las operaciones de
escritura y lectura.
Private Sub WriteFile()
Using writer As System.IO.TextWriter = System.IO.File.CreateText("log.txt")
writer.WriteLine("This is line one.")
writer.WriteLine("This is line two.")
End Using
End Sub
line = reader.ReadLine()
Do Until line Is Nothing
Console.WriteLine(line)
line = reader.ReadLine()
Loop
End Using
End Sub
Vea también
IDisposable
Try...Catch...Finally (instrucción)
Deshacerse de un recurso del sistema
Instrucción While...End While (Visual Basic)
27/11/2019 • 6 minutes to read • Edit Online
Ejecuta una serie de instrucciones siempre que se True una condición determinada.
Sintaxis
While condition
[ statements ]
[ Continue While ]
[ statements ]
[ Exit While ]
[ statements ]
End While
Elementos
T ÉRM IN O DEF IN IC IÓ N
Comentarios
Use una estructura de While...End While cuando desee repetir un conjunto de instrucciones un número
indefinido de veces, siempre que una condición permanezca True . Si desea más flexibilidad con el punto de
prueba de la condición o el resultado para probarlo, puede que prefiera la acción... Instrucción Loop. Si desea
repetir las instrucciones un número establecido de veces, la instrucción for... La siguiente instrucción suele ser
una mejor opción.
NOTE
La palabra clave While también se usa en la. .. Instrucción Loop, la cláusula SKIP while y la cláusula Take while.
Si condition se True , todos los statements ejecutan hasta que se encuentre la instrucción End While . A
continuación, el control vuelve a la instrucción While y se comprueba de nuevo condition . Si condition
todavía está True , se repite el proceso. Si es False , el control pasa a la instrucción que sigue a la instrucción
End While .
La instrucción While siempre comprueba la condición antes de iniciar el bucle. El bucle continúa mientras la
condición permanece True . Si condition se False la primera vez que se escribe el bucle, no se ejecuta ni
siquiera una vez.
El condition suele ser el resultado de una comparación de dos valores, pero puede ser cualquier expresión
que se evalúe como un valor de tipo de datos booleano ( True o False ). Esta expresión puede incluir un valor
de otro tipo de datos, como un tipo numérico, que se ha convertido en Boolean .
Puede anidar While bucles colocando un bucle dentro de otro. También puede anidar distintos tipos de
estructuras de control entre sí. Para obtener más información, vea estructuras de control anidadas.
Salir
La instrucción Exit while puede proporcionar otra manera de salir de un bucle While . Exit While transfiere
inmediatamente el control a la instrucción que sigue a la instrucción End While .
Normalmente se usa Exit While después de evaluar alguna condición (por ejemplo, en una estructura de
If...Then...Else ). Es posible que desee salir de un bucle si detecta una condición que hace que sea
innecesario o imposible continuar la iteración, como un valor erróneo o una solicitud de finalización. Puede
utilizar Exit While al probar una condición que podría provocar un bucle sin fin, que es un bucle que podría
ejecutar un número muy grande o incluso infinito de veces. Después, puede usar Exit While para escapar el
bucle.
Puede colocar cualquier número de instrucciones Exit While en cualquier parte del bucle While .
Cuando se utiliza en bucles While anidados, Exit While transfiere el control fuera del bucle más interno y en
el siguiente nivel superior de anidamiento.
La instrucción Continue While transfiere inmediatamente el control a la siguiente iteración del bucle. Para
obtener más información, vea instrucción continue.
Ejemplo
En el ejemplo siguiente, las instrucciones del bucle continúan ejecutándose hasta que la variable de index sea
mayor que 10.
Debug.WriteLine("")
' Output: 0 1 2 3 4 5 6 7 8 9 10
Ejemplo
En el ejemplo siguiente se muestra el uso de las instrucciones Continue While y Exit While .
Dim index As Integer = 0
While index < 100000
index += 1
Debug.WriteLine("")
' Output: 1 2 3 4 9 10
Ejemplo
En el ejemplo siguiente se leen todas las líneas de un archivo de texto. El método OpenText abre el archivo y
devuelve un StreamReader que lee los caracteres. En la condición While , el método Peek de la StreamReader
determina si el archivo contiene caracteres adicionales.
sr.Close()
End If
End Sub
Vea también
Estructuras de bucle
Do...Loop (instrucción)
For...Next (instrucción)
Boolean (tipo de datos)
Estructuras de control anidadas
Exit (instrucción)
Continue (instrucción)
With...End With (Instrucción, Visual Basic)
27/11/2019 • 7 minutes to read • Edit Online
Ejecuta una serie de instrucciones que hacen referencia repetidamente a un único objeto o estructura, por lo que
las instrucciones pueden utilizar una sintaxis simplificada al acceder a los miembros del objeto o estructura.
Cuando use una estructura, sola podrá leer los valores de los miembros o invocar métodos, y recibirá un error si
intenta asignar valores a los miembros de una estructura utilizada en una instrucción With...End With .
Sintaxis
With objectExpression
[ statements ]
End With
Elementos
T ÉRM IN O DEF IN IC IÓ N
Comentarios
Con With...End With , puede ejecutar una serie de instrucciones en un objeto especificado sin necesidad
especificar el nombre del objeto varias veces. En un bloque de instrucciones With , puede especificar un
miembro del objeto que comience por un punto, como si el objeto de la instrucción With lo precediera.
Por ejemplo, para cambiar varias propiedades de un único objeto, coloque las instrucciones de asignación de las
propiedades dentro del bloque With...End With y haga referencia al objeto una vez, en lugar de hacerlo en cada
una de las asignaciones de las propiedades.
Si el código tiene acceso al mismo objeto en varias instrucciones, la instrucción With le brinda las ventajas
siguientes:
No es necesario evaluar varias veces una expresión compleja ni asignar el resultado a una variable
temporal para hacer referencia a sus miembros varias veces.
El código resulta más legible al eliminar expresiones de calificación repetitivas.
El tipo de datos de objectExpression puede ser cualquier tipo de clase o estructura, o incluso un tipo elemental
de Visual Basic, como Integer . Si objectExpression produce un valor que no es un objeto, solo podrá leer los
valores de sus miembros o invocar métodos, y recibirá un error si intenta asignar valores a los miembros de una
estructura utilizada en una instrucción With...End With . Este es el mismo error que obtendría si invocara un
método que devolviera una estructura y accediera inmediatamente a un miembro del resultado de la función,
como GetAPoint().x = 1 , y le asignara un valor. El problema en ambos casos es que la estructura solo existe en la
pila de llamadas y no hay forma de que un miembro de la estructura modificada en estas situaciones pueda
escribir en una ubicación de forma que cualquier otro código del programa pueda observar el cambio.
objectExpression se evalúa una vez, tras su entrada en el bloque. No se puede reasignar objectExpression
desde el interior del bloque With .
En un bloque With , solo de puede acceder a los métodos y propiedades del objeto especificado sin calificarlos.
Se pueden usar métodos y propiedades de otros objetos, pero es necesario calificarlos con los nombres de
objeto.
Puede incluir una instrucción With...End With dentro de otra. Las instrucciones With...End With anidadas
pueden resultar confusas si los objetos a los que se hace referencia no están claros por el contexto. Debe
proporcionar una referencia completa a un objeto que esté en un bloque With externo cuando se haga
referencia al objeto desde dentro de un bloque With interno.
No se pueden crear bifurcaciones en un bloque de instrucciones With desde fuera del bloque.
A menos que el bloque contenga un bucle, las instrucciones se ejecutan una sola vez. Puede anidar diferentes
tipos de estructuras de control. Para obtener más información, vea estructuras de control anidadas.
NOTE
La palabra clave With también se puede usar en inicializadores de objeto. Para obtener más información y ejemplos, vea
inicializadores de objeto: tipos con nombre y anónimos y tipos anónimos.
Si usa un bloque With solo para inicializar las propiedades o campos de un objeto del que acaba de crear instancias,
considere la posibilidad de utilizar en su lugar un inicializador de objetos.
Ejemplo
En el ejemplo siguiente, cada bloque With ejecuta una serie de instrucciones en un único objeto.
With theCustomer
.Name = "Coho Vineyard"
.URL = "http://www.cohovineyard.com/"
.City = "Redmond"
End With
With theCustomer.Comments
.Add("First comment.")
.Add("Second comment.")
End With
End Sub
With theWindow
With .InfoLabel
.Content = "This is a message."
.Foreground = Brushes.DarkSeaGreen
.Background = Brushes.LightYellow
End With
Vea también
List<T>
Estructuras de control anidadas
Inicializadores de objeto: Tipos con nombre y anónimos
Tipos anónimos
Yield (Instrucción) (Visual Basic)
27/11/2019 • 7 minutes to read • Edit Online
Sintaxis
Yield expression
Parámetros
T ÉRM IN O DEF IN IC IÓ N
Comentarios
La instrucción Yield devuelve un elemento de una colección a la vez. La instrucción Yield se incluye en una
función de iterador o en un descriptor de acceso Get , que realiza iteraciones personalizadas en una colección.
Utilice una función de iterador mediante un ... Instrucción Next o una consulta LINQ. Cada iteración del bucle
For Each llama a la función de iterador. Cuando se alcanza una instrucción Yield en la función de iterador, se
devuelve expression y se conserva la ubicación actual en el código. La ejecución se reinicia desde esa
ubicación la próxima vez que se llama a la función del iterador.
Debe existir una conversión implícita del tipo de expression de la instrucción Yield al tipo de valor devuelto
del iterador.
Puede usar una instrucción Exit Function o Return para finalizar la iteración.
"Yield" no es una palabra reservada y tiene un significado especial solo cuando se utiliza en una función de
Iterator o un descriptor de acceso Get .
Para obtener más información sobre las funciones de iterador y los descriptores de acceso Get , vea
iteradores.
Control de excepciones
Una instrucción Yield puede estar dentro de un bloque Try de una instrucción try... Detectar... Finally. Un
bloque Try que tiene una instrucción Yield puede tener bloques Catch y puede tener un bloque Finally .
Una instrucción Yield no puede estar dentro de un bloque de Catch o un bloque Finally .
Si el cuerpo de For Each (fuera de la función de iterador) produce una excepción, no se ejecuta un bloque de
Catch en la función de iterador, pero se ejecuta un bloque de Finally en la función de iterador. Un bloque
Catch dentro de una función de iterador solo detecta las excepciones que se producen dentro de la función de
iterador.
Implementación técnica
El código siguiente devuelve un IEnumerable (Of String) de una función de iterador y, a continuación, recorre
en iteración los elementos de la IEnumerable (Of String) .
Ejemplo
El ejemplo siguiente tiene una instrucción Yield que está dentro de un ... Siguiente bucle. Cada iteración del
cuerpo de la instrucción for each en Main crea una llamada a la función de iterador Power . Cada llamada a la
función de iterador prosigue con la siguiente ejecución de la instrucción Yield , que se produce durante la
siguiente iteración del bucle For…Next .
El tipo de valor devuelto del método iterador es IEnumerable<T>, un tipo de interfaz de iterador. Cuando se
llama al método iterador, este devuelve un objeto enumerable que contiene las potencias de un número.
Sub Main()
For Each number In Power(2, 8)
Console.Write(number & " ")
Next
' Output: 2 4 8 16 32 64 128 256
Console.ReadKey()
End Sub
Dim result = 1
Ejemplo
En el ejemplo siguiente se muestra un descriptor de acceso Get que es un iterador. La declaración de
propiedad incluye un modificador Iterator .
Sub Main()
Dim theGalaxies As New Galaxies
For Each theGalaxy In theGalaxies.NextGalaxy
With theGalaxy
Console.WriteLine(.Name & " " & .MegaLightYears)
End With
Next
Console.ReadKey()
End Sub
Vea también
Instrucciones
Cláusulas (Visual Basic)
05/12/2019 • 2 minutes to read • Edit Online
En los temas de esta sección se documentan Visual Basic cláusulas en tiempo de ejecución.
Esta sección
Alias
As
Handles
Implements
In
Into
Of
Secciones relacionadas
Referencia del lenguaje Visual Basic
Alias (Cláusula, Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Comentarios
La palabra clave Alias se puede usar en este contexto:
Declare (instrucción)
En el ejemplo siguiente, se usa la palabra clave Alias para proporcionar el nombre de la función en advapi32. dll,
GetUserNameA , que getUserName se usa en lugar de en este ejemplo. En sub getUser se llama a la función
getUserName , que muestra el nombre del usuario actual.
Vea también
Palabras clave
As (Cláusula, Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Presenta una cláusula As , que identifica un tipo de datos en una instrucción de declaración o una lista de
restricciones en un parámetro de tipo genérico.
Comentarios
La palabra clave As se puede usar en los siguientes contextos:
Aggregate (cláusula)
Class (instrucción)
Const (instrucción)
Declare (instrucción)
Delegate (instrucción)
Dim (instrucción)
Enum (instrucción)
Event (instrucción)
Para... Instrucciones Next
Para cada... Instrucciones Next
From (cláusula)
Function (instrucción)
Group Join (cláusula)
Interface (instrucción)
Operator Statement
Property (instrucción)
Structure (instrucción)
Sub (instrucción)
Try... Detectar... Finally (instrucciones)
Vea también
Crear una variable nueva
Tipos de datos
Declaración de variables
Lista de tipos
Generic Types in Visual Basic
Palabras clave
Handles (Cláusula, Visual Basic)
27/11/2019 • 3 minutes to read • Edit Online
Sintaxis
proceduredeclaration Handles eventlist
Elementos
proceduredeclaration
La declaración de procedimiento Sub del procedimiento que controlará el evento.
eventlist
Lista de los eventos que proceduredeclaration debe controlar, separados por comas. Los eventos deben ser
generados bien por la clase base de la clase actual o bien por un objeto declarado mediante la palabra clave
WithEvents .
Comentarios
Utilice la palabra clave Handles al final de una declaración de procedimiento para que controle los eventos
generados por una variable de objeto declarada mediante el uso de la palabra clave WithEvents . La palabra
clave Handles también puede usarse en una clase derivada para controlar eventos de una clase base.
La palabra clave Handles y la instrucción AddHandler permiten especificar que determinados procedimientos
controlen eventos determinados, pero hay diferencias. Use la palabra clave Handles al definir un
procedimiento para especificar que controla un evento determinado. La instrucción AddHandler conecta los
procedimientos a los eventos en tiempo de ejecución. Para obtener más información, vea AddHandler
Statement.
Para los eventos personalizados, la aplicación invoca al descriptor de acceso AddHandler del evento cuando
agrega el procedimiento como un controlador de eventos. Para obtener más información sobre los eventos
personalizados, vea Event Statement.
Ejemplo
Public Class ContainerClass
' Module or class level declaration.
WithEvents Obj As New Class1
En el siguiente ejemplo se demuestra cómo una clase derivada puede usar la instrucción Handles para
controlar un evento de una clase base.
Ejemplo
El ejemplo siguiente contiene dos controladores de eventos de botón para un proyecto de aplicación de
WPF .
Ejemplo
El siguiente ejemplo es equivalente al ejemplo anterior. El eventlist en la cláusula Handles contiene los
eventos de ambos botones.
Private Sub Button_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles
Button1.Click, Button2.Click
MessageBox.Show(sender.Name & " clicked")
End Sub
Vea también
WithEvents
AddHandler (instrucción)
RemoveHandler (instrucción)
Event (instrucción)
RaiseEvent (instrucción)
Eventos
Implements (Cláusula, Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Indica que un miembro de clase o estructura proporciona la implementación para un miembro definido en una
interfaz.
Comentarios
La palabra clave Implements no es igual que la instrucción Implements. Use la instrucción Implements para
especificar que una clase o estructura implementa una o más interfaces y, a continuación, para cada miembro,
use la palabra clave Implements para especificar qué interfaz y qué miembro implementa.
Si una clase o estructura implementa una interfaz, debe incluir la instrucción Implements inmediatamente
después de la instrucción de clase o instrucción de estructura, y debe implementar todos los miembros definidos
por la interfaz.
Reimplementación
En una clase derivada, puede volver a implementar un miembro de interfaz que la clase base ya ha
implementado. Esto no es lo mismo que reemplazar el miembro de clase base en los siguientes aspectos:
No es necesario reemplazar el miembro de la clase base para que se pueda volver a implementar.
Puede volver a implementar el miembro con un nombre diferente.
La palabra clave Implements se puede utilizar en los contextos siguientes:
Event (instrucción)
Function (instrucción)
Property (instrucción)
Sub (instrucción)
Vea también
Implements (instrucción)
Interface (instrucción)
Class (instrucción)
Structure (instrucción)
In (Cláusula, Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Especifica el grupo que la variable de bucle va a recorrer en un bucle For Each , o especifica la colección que se va
a consultar en una cláusula From , Join o Group Join .
Comentarios
La palabra clave In se puede utilizar en los contextos siguientes:
For Each...Next (instrucción)
From (cláusula)
Join (cláusula)
Group Join (cláusula)
Vea también
Palabras clave
Into (Cláusula, Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Identifica las funciones de agregado o agrupaciones que se van a aplicar a una colección.
Comentarios
La palabra clave Each se usa en los contextos siguientes:
Aggregate (cláusula)
Group By (cláusula)
Group Join (cláusula)
Vea también
Palabras clave
Of (Cláusula, Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Presenta una cláusula Of , que identifica un parámetro de tipo en una clase genérica , una estructura, una
interfaz, un delegado o un procedimiento. Para obtener información sobre los tipos genéricos, vea tipos
genéricos en Visual Basic.
Si completa la definición de clase anterior, puede construir una variedad de clases dictionary a partir de ella.
Los tipos que se proporcionan a entryType y keyType determinan qué tipo de entrada contiene la clase y qué
tipo de clave asocia a cada entrada. Debido a la restricción, debe proporcionar a keyType un tipo que
implementa IComparable.
En el ejemplo de código siguiente se crea un objeto que contiene String entradas y asocia una clave Integer
a cada una de ellas. Integer implementa IComparable y, por tanto, satisface la restricción en keyType .
Vea también
IComparable
Lista de tipos
Generic Types in Visual Basic
In
Out
Contextos de declaración y niveles de acceso
predeterminados (Visual Basic)
27/11/2019 • 3 minutes to read • Edit Online
En este tema se describe qué tipos de Visual Basic se pueden declarar dentro de los demás tipos y cuál es
el valor predeterminado de los niveles de acceso si no se especifica.
Vea también
Friend
Private
Public
Lista de atributos (Visual Basic)
27/11/2019 • 4 minutes to read • Edit Online
Especifica los atributos que se van a aplicar a un elemento de programación declarado. Los diversos
atributos se separan con comas. A continuación se encuentra la sintaxis de un atributo.
Sintaxis
[ attributemodifier ] attributename [ ( attributearguments | attributeinitializer ) ]
Elementos
Comentarios
Puede aplicar uno o varios atributos a casi cualquier elemento de programación (tipos, procedimientos,
propiedades, etc.). Los atributos aparecen en los metadatos del ensamblado y pueden ayudarle a anotar el
código o especificar cómo usar un elemento de programación determinado. Puede aplicar atributos
definidos por Visual Basic y el .NET Framework, y puede definir sus propios atributos.
Para obtener más información sobre Cuándo usar atributos, vea información general sobre los atributos.
Para obtener información sobre los nombres de atributo, vea nombres de elementos declarados.
Reglas
Ubicación. Puede aplicar atributos a la mayoría de los elementos de programación declarados.
Para aplicar uno o varios atributos, coloque un bloque de atributos al principio de la declaración
del elemento. Cada entrada de la lista de atributos especifica un atributo que se desea aplicar y el
modificador y los argumentos que se usan para esta invocación del atributo.
Corchetes angulares. Si proporciona una lista de atributos, debe encerrarla entre corchetes
angulares (" < " y " > ").
Par te de la declaración. El atributo debe formar parte de la declaración del elemento, no de una
instrucción independiente. Puede usar la secuencia de continuación de línea (" _ ") para extender la
instrucción de declaración en varias líneas de código fuente.
Modificadores. Se requiere un modificador de atributo ( Assembly o Module ) en cada atributo
aplicado a un elemento de programación al principio de un archivo de código fuente. No se
permiten modificadores de atributo en los atributos aplicados a los elementos que no están al
principio de un archivo de código fuente.
Argumentos. Todos los argumentos posicionales de un atributo deben preceder a cualquier
inicializador de variable o propiedad.
Ejemplo
En el ejemplo siguiente se aplica el atributo DllImportAttribute a una definición de esquema de un
procedimiento Function .
<DllImportAttribute("kernel32.dll", EntryPoint:="MoveFileW",
SetLastError:=True, CharSet:=CharSet.Unicode,
ExactSpelling:=True,
CallingConvention:=CallingConvention.StdCall)>
Public Shared Function MoveFile(ByVal src As String,
ByVal dst As String) As Boolean
' This function copies a file from the path src to the path dst.
' Leave this function empty. The DLLImport attribute forces calls
' to MoveFile to be forwarded to MoveFileW in KERNEL32.DLL.
End Function
DllImportAttribute indica que el procedimiento con atributos representa un punto de entrada de una
biblioteca de vínculos dinámicos (DLL) no administrada. El atributo proporciona el nombre del archivo
DLL como argumento posicional y la otra información como inicializadores de variables.
Vea también
Ensamblado
Module <keyword>
Información general de atributos
Interrumpir y combinar instrucciones en código
Lista de parámetros (Visual Basic)
27/11/2019 • 6 minutes to read • Edit Online
Especifica los parámetros que un procedimiento espera cuando se llama. Varios parámetros se separan
mediante comas. A continuación se encuentra la sintaxis de un parámetro.
Sintaxis
[ <attributelist> ] [ Optional ] [{ ByVal | ByRef }] [ ParamArray ]
parametername[( )] [ As parametertype ] [ = defaultvalue ]
Elementos
attributelist
Opcional. Lista de atributos que se aplican a este parámetro. Debe incluir la lista de atributos entre corchetes
angulares (" < " y " > ").
Optional
Opcional. Especifica que este parámetro no es necesario cuando se llama al procedimiento.
ByVal
Opcional. Especifica que el procedimiento no puede reemplazar o volver a asignar el elemento variable
subyacente al argumento correspondiente en el código de llamada.
ByRef
Opcional. Especifica que el procedimiento puede modificar el elemento variable subyacente en el código de
llamada de la misma manera que el propio código de llamada puede.
ParamArray
Opcional. Especifica que el último parámetro de la lista de parámetros es una matriz opcional de elementos
del tipo de datos especificado. Esto permite al código de llamada pasar un número arbitrario de argumentos
al procedimiento.
parametername
Obligatorio. Nombre de la variable local que representa el parámetro.
parametertype
Es obligatorio si se On``Option Strict . Tipo de datos de la variable local que representa el parámetro.
defaultvalue
Obligatorio para los parámetros de Optional . Cualquier expresión constante o constante que se evalúe
como el tipo de datos del parámetro. Si el tipo es Object , o una clase, una interfaz, una matriz o una
estructura, el valor predeterminado solo se puede Nothing .
Comentarios
Los parámetros se incluyen entre paréntesis y se separan mediante comas. Un parámetro se puede declarar
con cualquier tipo de datos. Si no se especifica parametertype , el valor predeterminado es Object .
Cuando el código de llamada llama al procedimiento, pasa un argumento a cada parámetro necesario. Para
obtener más información, vea diferencias entre parámetros y argumentos.
El argumento que el código de llamada pasa a cada parámetro es un puntero a un elemento subyacente en
el código de llamada. Si este elemento no es variable (una constante, un literal, una enumeración o una
expresión), es imposible que cualquier código lo cambie. Si es un elemento variable (una variable declarada,
un campo, una propiedad, un elemento de matriz o un elemento de estructura), el código de llamada puede
cambiarlo. Para obtener más información, vea diferencias entre argumentos modificables y no modificables.
Si se pasa un elemento variable ByRef , el procedimiento también lo puede cambiar. Para obtener más
información, vea diferencias entre pasar un argumento por valor y por referencia.
Reglas
Paréntesis. Si especifica una lista de parámetros, debe escribirla entre paréntesis. Si no hay ningún
parámetro, todavía puede usar paréntesis que incluyan una lista vacía. Esto mejora la legibilidad del
código al aclarar que el elemento es un procedimiento.
Parámetros opcionales. Si usa el modificador Optional en un parámetro, todos los parámetros
subsiguientes de la lista también deben ser opcionales y declararse mediante el modificador
Optional .
Ejemplo
En el ejemplo siguiente se muestra un procedimiento Function que define dos parámetros.
Vea también
DllImportAttribute
Function (instrucción)
Sub (instrucción)
Declare (instrucción)
Structure (instrucción)
Option Strict (instrucción)
Información general de atributos
Interrumpir y combinar instrucciones en código
Lista de tipos (Visual Basic)
27/11/2019 • 7 minutes to read • Edit Online
Especifica los parámetros de tipo para un elemento de programación genérico . Varios parámetros se
separan mediante comas. A continuación se encuentra la sintaxis de un parámetro de tipo.
Sintaxis
[genericmodifier] typename [ As constraintlist ]
Elementos
T ÉRM IN O DEF IN IC IÓ N
Comentarios
Cada elemento de programación genérico debe tomar al menos un parámetro de tipo. Un parámetro de
tipo es un marcador de posición para un tipo específico (un elemento construido) que el código de cliente
especifica cuando crea una instancia del tipo genérico. Puede definir una clase, una estructura, una
interfaz, un procedimiento o un delegado genéricos.
Para obtener más información sobre cuándo definir un tipo genérico, vea tipos genéricos en Visual Basic.
Para obtener más información sobre los nombres de parámetros de tipo, vea nombres de elementos
declarados.
Reglas
Paréntesis. Si proporciona una lista de parámetros de tipo, debe encerrarla entre paréntesis y
debe introducir la lista con la palabra clave . Solo se usa Of una vez, al principio de la lista.
Restricciones. Una lista de restricciones en un parámetro de tipo puede incluir los elementos
siguientes en cualquier combinación:
Cualquier número de interfaces. El tipo proporcionado debe implementar cada interfaz en
esta lista.
A lo sumo una clase. El tipo proporcionado debe heredar de esa clase.
Palabra clave New . El tipo proporcionado debe exponer un constructor sin parámetros al que
pueda tener acceso el tipo genérico. Esto resulta útil si se restringe un parámetro de tipo
mediante una o más interfaces. Un tipo que implementa interfaces no expone
necesariamente un constructor y, en función del nivel de acceso de un constructor, el código
dentro del tipo genérico podría no tener acceso a él.
La palabra clave Class o la palabra clave Structure . La palabra clave Class restringe un
parámetro de tipo genérico para exigir que cualquier argumento de tipo pasado a él sea un
tipo de referencia, por ejemplo una cadena, una matriz o un delegado, o un objeto creado a
partir de una clase. La palabra clave Structure restringe un parámetro de tipo genérico para
exigir que cualquier argumento de tipo pasado a él sea un tipo de valor, por ejemplo, una
estructura, una enumeración o un tipo de datos elemental. No puede incluir Class y
Structure en el mismo constraintlist .
El tipo proporcionado debe cumplir todos los requisitos que se incluyen en constraintlist .
Las restricciones de cada parámetro de tipo son independientes de las restricciones en otros
parámetros de tipo.
Comportamiento
Sustitución en tiempo de compilación. Cuando se crea un tipo construido a partir de un
elemento de programación genérico, se proporciona un tipo definido para cada parámetro de tipo.
El compilador de Visual Basic sustituye el tipo proporcionado por cada aparición de typename
dentro del elemento genérico.
Ausencia de restricciones. Si no especifica ninguna restricción en un parámetro de tipo, el
código se limita a las operaciones y miembros admitidos por el tipo de datos Object para ese
parámetro de tipo.
Ejemplo
En el ejemplo siguiente se muestra una definición de esqueleto de una clase de diccionario genérico,
incluida una función esqueleto para agregar una nueva entrada al diccionario.
Ejemplo
Dado que dictionary es genérico, el código que lo usa puede crear una variedad de objetos a partir de él,
cada uno con la misma funcionalidad pero actuando en un tipo de datos diferente. En el ejemplo siguiente
se muestra una línea de código que crea un objeto dictionary con String entradas y Integer claves.
Dim dictInt As New dictionary(Of String, Integer)
Ejemplo
En el ejemplo siguiente se muestra la definición de esqueleto equivalente generada por el ejemplo
anterior.
Vea también
Of
New (operador)
Niveles de acceso en Visual Basic
Object Data Type
Function (instrucción)
Structure (instrucción)
Sub (instrucción)
Utilizar una clase genérica
Covarianza y contravarianza
In
Out
Etiquetas XML recomendadas para comentarios de
documentación (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
El compilador de Visual Basic puede procesar comentarios de documentación en el código en un archivo XML.
Puede usar herramientas adicionales para procesar el archivo XML en la documentación de.
Los comentarios XML se permiten en construcciones de código como tipos y miembros de tipo. En el caso de los
tipos parciales, solo una parte del tipo puede tener comentarios XML, aunque no hay ninguna restricción en el
comentario de sus miembros.
NOTE
Los comentarios de documentación no se pueden aplicar a espacios de nombres. La razón es que un espacio de nombres
puede abarcar varios ensamblados, y no todos los ensamblados deben cargarse al mismo tiempo.
El compilador procesa cualquier etiqueta que sea XML válida. Las siguientes etiquetas proporcionan
funcionalidad de uso común en la documentación del usuario.
NOTE
Si desea que aparezcan corchetes angulares en el texto de un Comentario de documentación, use < y > . Por
ejemplo, la cadena "<text in angle brackets>" aparecerá como <text in angle brackets> .
Vea también
Documentar el código con XML
-doc
Crear documentación XML
<c > (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Sintaxis
<c>text</c>
Parámetros
PA RÁ M ET RO DESC RIP C IÓ N
Comentarios
La etiqueta <c> proporciona una manera de indicar que el texto de una descripción debe marcarse como código.
Use <code> para indicar varias líneas como código.
Compile con -doc para procesar los comentarios de documentación de un archivo.
Ejemplo
En este ejemplo se usa la etiqueta <c> de la sección Summary para indicar que Counter es code.
''' <summary>
''' Resets the value the <c>Counter</c> field.
''' </summary>
Public Sub ResetCounter()
counterValue = 0
End Sub
Private counterValue As Integer = 0
''' <summary>
''' Returns the number of times Counter was called.
''' </summary>
''' <value>Number of times Counter was called.</value>
Public ReadOnly Property Counter() As Integer
Get
counterValue += 1
Return counterValue
End Get
End Property
Vea también
Etiquetas XML para comentarios
> de código de <(Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Sintaxis
<code>content</code>
Parámetros
content
Texto que se va a marcar como código.
Comentarios
Use la etiqueta <code> para indicar varias líneas como código. Use <c> para indicar que el texto dentro de una
descripción debe marcarse como código.
Compile con -doc para procesar los comentarios de documentación de un archivo.
Ejemplo
En este ejemplo se usa la etiqueta <> de código para incluir código de ejemplo para usar el campo ID .
Vea también
Etiquetas XML para comentarios
> de ejemplo <(Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Sintaxis
<example>description</example>
Parámetros
description
Una descripción del ejemplo de código.
Comentarios
La etiqueta <example> permite especificar un ejemplo de cómo usar un método u otro miembro de la biblioteca.
Esto normalmente implica el uso de la etiqueta <code>.
Compile con -doc para procesar los comentarios de documentación de un archivo.
Ejemplo
En este ejemplo se usa la etiqueta <example> para incluir un ejemplo de uso del campo ID .
Vea también
Etiquetas XML para comentarios
<> de excepciones (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Sintaxis
<exception cref="member">description</exception>
Parámetros
member
Una referencia a una excepción que está disponible desde el entorno de compilación actual. El compilador
comprueba si la excepción dada existe y traduce member al nombre de elemento canónico en la salida XML.
member debe aparecer entre comillas dobles (" ").
description
Una descripción.
Comentarios
Use la etiqueta <exception> para especificar qué excepciones se pueden iniciar. Esta etiqueta se aplica a una
definición de método.
Compile con -doc para procesar los comentarios de documentación de un archivo.
Ejemplo
En este ejemplo se usa la etiqueta <exception> para describir una excepción que la función IntDivide puede
iniciar.
Vea también
Etiquetas XML para comentarios
<incluir > (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Hace referencia a otro archivo que describe los tipos y miembros en el código fuente.
Sintaxis
<include file="filename" path="tagpath[@name='id']" />
Parámetros
filename
Obligatorio. El nombre del archivo que contiene la documentación. El nombre de archivo se puede calificar con una
ruta de acceso. Escriba filename entre comillas dobles ("").
tagpath
Obligatorio. La ruta de acceso de las etiquetas de filename que conduce a la etiqueta name . Escriba la ruta de
acceso entre comillas dobles ("").
name
Obligatorio. Especificador de nombre en la etiqueta que precede a los comentarios. Name tendrá un id .
id
Obligatorio. El identificador de la etiqueta que precede a los comentarios. Incluya el identificador entre comillas
simples (' ').
Comentarios
Use la etiqueta <include> para hacer referencia a los comentarios de otro archivo que describen los tipos y
miembros del código fuente. Esto es una alternativa a colocar los comentarios de documentación directamente en
el archivo de código fuente.
La etiqueta <include> usa la recomendación W3C XML Path Language (XPath) versión 1,0. Para obtener más
información acerca de cómo personalizar el uso de <include> , vea https://www.w3.org/TR/xpath.
Ejemplo
En este ejemplo se usa la etiqueta <include> para importar los comentarios de documentación de los miembros
de un archivo denominado commentFile.xml .
<Docs>
<Members name="Open">
<summary>Opens a file.</summary>
<param name="filename">File name to open.</param>
</Members>
<Members name="Close">
<summary>Closes a file.</summary>
<param name="filename">File name to close.</param>
</Members>
</Docs>
Vea también
Etiquetas XML para comentarios
lista de <> (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Sintaxis
<list type="type">
<listheader>
<term>term</term>
<description>description</description>
</listheader>
<item>
<term>term</term>
<description>description</description>
</item>
</list>
Parámetros
type
El tipo de la lista. Debe ser una "viñeta" para una lista con viñetas, "número" para una lista numerada o "tabla" para
una tabla de dos columnas.
term
Solo se usa cuando type es "Table". Un término para definir, que se define en la etiqueta de descripción.
description
Cuando type es "Bullet" o "Number", description es un elemento de la lista cuando type es "Table" description
es la definición de term .
Comentarios
El bloque <listheader> define el encabezado de una tabla o de una lista de definiciones. Al definir una tabla, solo
tiene que proporcionar una entrada para term en el encabezado.
Cada elemento de la lista se especifica con un bloque <item> . Al crear una lista de definiciones, debe especificar
term y description . Sin embargo, para una tabla, una lista con viñetas o una lista numerada, solo tiene que
proporcionar una entrada para description .
Una lista o una tabla puede tener tantos bloques de <item> como sea necesario.
Compile con -doc para procesar los comentarios de documentación de un archivo.
Ejemplo
En este ejemplo se usa la etiqueta <list> para definir una lista con viñetas en la sección Comentarios.
''' <remarks>Before calling the <c>Reset</c> method, be sure to:
''' <list type="bullet">
''' <item><description>Close all connections.</description></item>
''' <item><description>Save the object state.</description></item>
''' </list>
''' </remarks>
Public Sub Reset()
' Code goes here.
End Sub
Vea también
Etiquetas XML para comentarios
<para > (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Sintaxis
<para>content</para>
Parámetros
content
El texto del párrafo.
Comentarios
La etiqueta <para> es para su uso dentro de una etiqueta, como <> de Resumen, <comentarios >o <devuelve >y
permite agregar la estructura al texto.
Compile con -doc para procesar los comentarios de documentación de un archivo.
Ejemplo
En este ejemplo se usa la etiqueta <para> para dividir la sección Comentarios para el método UpdateRecord en
dos párrafos.
Vea también
Etiquetas XML para comentarios
<> de parámetros (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Sintaxis
<param name="name">description</param>
Parámetros
name
Nombre de un parámetro de método. Ponga el nombre entre comillas dobles (" ").
description
Descripción del parámetro.
Comentarios
La etiqueta <param> debe usarse en el comentario de una declaración de método para describir uno de los
parámetros del método.
El texto de la etiqueta <param> aparecerá en las siguientes ubicaciones:
Información de parámetros de IntelliSense. Para obtener más información, vea Using IntelliSense.
Examinador de objetos. Para obtener más información, vea Ver la estructura del código.
Compile con -doc para procesar los comentarios de documentación de un archivo.
Ejemplo
En este ejemplo se usa la etiqueta <param> para describir el parámetro id .
Vea también
Etiquetas XML para comentarios
<paramref > (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Sintaxis
<paramref name="name"/>
Parámetros
name
Nombre del parámetro al que se hace referencia. Ponga el nombre entre comillas dobles (" ").
Comentarios
La etiqueta <paramref> proporciona una manera de indicar que una palabra es un parámetro. El archivo XML se
puede procesar para dar formato a este parámetro de alguna manera distinta.
Compile con -doc para procesar los comentarios de documentación de un archivo.
Ejemplo
En este ejemplo se usa la etiqueta <paramref> para hacer referencia al parámetro id .
Vea también
Etiquetas XML para comentarios
<> de permisos (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Sintaxis
<permission cref="member">description</permission>
Parámetros
member
Referencia a un miembro o campo al cual se puede llamar desde el entorno de compilación actual. El compilador
comprueba si el elemento de código dado existe y traduce member al nombre de elemento canónico en la salida
XML. Escriba member entre comillas ("").
description
Descripción del acceso al miembro.
Comentarios
Use la etiqueta <permission> para documentar el acceso de un miembro. Utilice la clase PermissionSet para
especificar el acceso a un miembro.
Compile con -doc para procesar los comentarios de documentación de un archivo.
Ejemplo
En este ejemplo se usa la etiqueta <permission> para describir que el método ReadFile requiere la
FileIOPermission.
Vea también
Etiquetas XML para comentarios
<Comentarios > (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Sintaxis
<remarks>description</remarks>
Parámetros
description
Descripción del miembro.
Comentarios
Use la etiqueta <remarks> para agregar información sobre un tipo, complementando la información especificada
con <> de Resumen.
Esta información aparece en el Examinador de objetos. Para obtener información sobre el Examinador de objetos,
vea ver la estructura del código.
Compile con -doc para procesar los comentarios de documentación de un archivo.
Ejemplo
En este ejemplo se usa la etiqueta <remarks> para explicar lo que hace el método UpdateRecord .
Vea también
Etiquetas XML para comentarios
<devuelve > (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Sintaxis
<returns>description</returns>
Parámetros
description
Descripción del valor devuelto.
Comentarios
Use la etiqueta <returns> del comentario para una declaración de método que describa el valor devuelto.
Compile con -doc para procesar los comentarios de documentación de un archivo.
Ejemplo
En este ejemplo se usa la etiqueta <returns> para explicar lo que devuelve la función DoesRecordExist .
Vea también
Etiquetas XML para comentarios
<Ver > (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Sintaxis
<see cref="member"/>
Parámetros
member
Referencia a un miembro o campo al cual se puede llamar desde el entorno de compilación actual. El compilador
comprueba si el elemento de código dado existe y pasa member al nombre de elemento en el resultado XML.
member debe aparecer entre comillas dobles (" ").
Comentarios
Use la etiqueta <see> para especificar un vínculo desde dentro del texto. Use <> seeAlso para indicar el texto que
desea que aparezca en la sección "vea también".
Compile con -doc para procesar los comentarios de documentación de un archivo.
Ejemplo
En este ejemplo se usa la etiqueta <see> de la sección UpdateRecord notas para hacer referencia al método
DoesRecordExist .
Vea también
Etiquetas XML para comentarios
<seealso > (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Sintaxis
<seealso cref="member"/>
Parámetros
member
Referencia a un miembro o campo al cual se puede llamar desde el entorno de compilación actual. El compilador
comprueba si el elemento de código dado existe y pasa member al nombre de elemento en el resultado XML.
member debe aparecer entre comillas dobles (" ").
Comentarios
Use la etiqueta <seealso> para especificar el texto que desea que aparezca en la sección Vea también. Use <see>
para especificar un vínculo desde dentro del texto.
Compile con -doc para procesar los comentarios de documentación de un archivo.
Ejemplo
En este ejemplo se usa la etiqueta <seealso> de la sección DoesRecordExist notas para hacer referencia al método
UpdateRecord .
Vea también
Etiquetas XML para comentarios
> de Resumen de <(Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Sintaxis
<summary>description</summary>
Parámetros
description
Resumen del objeto.
Comentarios
Use la etiqueta <summary> para describir un tipo o un miembro de tipo. Use <remarks> para agregar información
adicional a una descripción de tipo.
El texto de la etiqueta <summary> es el único origen de información sobre el tipo en IntelliSense y también se
muestra en el Examinador de objetos. Para obtener información sobre el Examinador de objetos, vea ver la
estructura del código.
Compile con -doc para procesar los comentarios de documentación de un archivo.
Ejemplo
En este ejemplo se usa la etiqueta <summary> para describir el método ResetCounter y la propiedad Counter .
''' <summary>
''' Resets the value the <c>Counter</c> field.
''' </summary>
Public Sub ResetCounter()
counterValue = 0
End Sub
Private counterValue As Integer = 0
''' <summary>
''' Returns the number of times Counter was called.
''' </summary>
''' <value>Number of times Counter was called.</value>
Public ReadOnly Property Counter() As Integer
Get
counterValue += 1
Return counterValue
End Get
End Property
Vea también
Etiquetas XML para comentarios
<typeparam > (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Sintaxis
<typeparam name="name">description</typeparam>
Parámetros
name
Nombre del parámetro de tipo. Ponga el nombre entre comillas dobles (" ").
description
Descripción del parámetro de tipo.
Comentarios
Use la etiqueta <typeparam> del comentario para un tipo genérico o una declaración de miembro genérico para
describir uno de los parámetros de tipo.
Compile con -doc para procesar los comentarios de documentación de un archivo.
Ejemplo
En este ejemplo se usa la etiqueta <typeparam> para describir el parámetro id .
Vea también
Etiquetas XML para comentarios
> de valor <(Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Sintaxis
<value>property-description</value>
Parámetros
property-description
Una descripción de la propiedad.
Comentarios
Use la etiqueta <value> para describir una propiedad. Tenga en cuenta que al agregar una propiedad mediante el
Asistente para código en el entorno de desarrollo de Visual Studio, se agregará una etiqueta <summary > para la
nueva propiedad. Después, debe agregar manualmente una etiqueta de <value> para describir el valor que
representa la propiedad.
Compile con -doc para procesar los comentarios de documentación de un archivo.
Ejemplo
En este ejemplo se usa la etiqueta <value> para describir el valor que contiene la propiedad Counter .
''' <summary>
''' Resets the value the <c>Counter</c> field.
''' </summary>
Public Sub ResetCounter()
counterValue = 0
End Sub
Private counterValue As Integer = 0
''' <summary>
''' Returns the number of times Counter was called.
''' </summary>
''' <value>Number of times Counter was called.</value>
Public ReadOnly Property Counter() As Integer
Get
counterValue += 1
Return counterValue
End Get
End Property
Vea también
Etiquetas XML para comentarios
Propiedades de eje XML (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
En los temas de esta sección se documenta la sintaxis de las propiedades del eje XML en Visual Basic. Las
propiedades del eje XML facilitan el acceso a XML directamente en el código.
Esta sección
T EM A DESC RIP C IÓ N
Propiedad del eje de atributo XML Describe cómo obtener acceso a los atributos de un objeto
XElement.
Propiedad del eje secundario XML Describe cómo obtener acceso a los elementos secundarios
de un objeto XElement.
Propiedad del eje descendiente XML Describe cómo obtener acceso a los descendientes de un
objeto XElement.
Propiedad de indexador de extensión Describe cómo obtener acceso a los elementos individuales
de una colección de objetos XElement o XAttribute.
Propiedad de valor XML Describe cómo obtener acceso al valor del primer elemento
de una colección de objetos XElement o XAttribute.
Vea también
XML
Propiedad de eje para atributos XML (Visual Basic)
27/11/2019 • 5 minutes to read • Edit Online
Proporciona acceso al valor de un atributo para un XElement objeto o al primer elemento de una colección de
objetos XElement.
Sintaxis
object.@attribute
' -or-
object.@<attribute>
Elementos
object
Obligatorio. Objeto XElement o colección de objetos XElement.
.@
Obligatorio. Denota el inicio de una propiedad de eje de atributo.
<
Opcional. Denota el principio del nombre del atributo cuando attribute no es un identificador válido en Visual
Basic.
attribute
Obligatorio. Nombre del atributo al que se va a tener acceso, con el formato [ prefix :] name .
PA RT E DESC RIP C IÓ N
>
Opcional. Denota el final del nombre del atributo cuando attribute no es un identificador válido en Visual Basic.
Valor devuelto
Cadena que contiene el valor de attribute . Si el nombre de atributo no existe, se devuelve Nothing .
Comentarios
Puede usar una propiedad de eje de atributo XML para tener acceso al valor de un atributo por nombre desde un
objeto XElement o desde el primer elemento de una colección de objetos XElement. Puede recuperar un valor de
atributo por nombre o agregar un nuevo atributo a un elemento especificando un nuevo nombre precedido por el
identificador @.
Cuando se hace referencia a un atributo XML mediante el identificador @, el valor del atributo se devuelve como
una cadena y no es necesario especificar explícitamente la propiedad Value.
Las reglas de nomenclatura para los atributos XML difieren de las reglas de nomenclatura para los identificadores
de Visual Basic. Para obtener acceso a un atributo XML que tiene un nombre que no es un identificador de Visual
Basic válido, incluya el nombre entre corchetes angulares (< y >).
Ejemplo
En el ejemplo siguiente se muestra cómo obtener los valores de los atributos XML denominados type de una
colección de elementos XML que se denominan phone .
Console.WriteLine(phoneTypes)
<type>home</type>
<type>work</type>
</phoneTypes>
Ejemplo
En el ejemplo siguiente se muestra cómo crear atributos para un elemento XML mediante declaración, como parte
del XML, y dinámicamente agregando un atributo a una instancia de un objeto XElement. El atributo type se crea
mediante declaración y el atributo owner se crea dinámicamente.
Console.WriteLine(phone2)
Ejemplo
En el ejemplo siguiente se usa la sintaxis de corchetes angulares para obtener el valor del atributo XML
denominado number-type , que no es un identificador válido en Visual Basic.
Ejemplo
En el ejemplo siguiente se declara ns como un prefijo de espacio de nombres XML. A continuación, usa el prefijo
del espacio de nombres para crear un literal XML y acceder al primer nodo secundario con el nombre completo "
ns:name ".
Class TestClass3
End Class
Vea también
XElement
Propiedades del eje XML
Literales XML
Crear XML en Visual Basic
Nombres de atributos y elementos XML declarados
Propiedades de eje secundario XML (Visual Basic)
08/01/2020 • 4 minutes to read • Edit Online
Proporciona el acceso a los elementos secundarios de uno de los siguientes: un objeto XElement, un objeto
XDocument, una colección de objetos XElement o una colección de objetos XDocument.
Sintaxis
object.<child>
Componentes de
T ÉRM IN O DE ESQ UEM A JSO N
Valor devuelto
Una colección de objetos XElement.
Notas
Puede usar una propiedad de eje secundario XML para tener acceso a los nodos secundarios por nombre desde un
objeto XElement o XDocument, o desde una colección de objetos XElement o XDocument. Utilice la propiedad XML
Value para tener acceso al valor del primer nodo secundario de la colección devuelta. Para obtener más
información, vea propiedad valor XML.
El compilador Visual Basic convierte las propiedades del eje secundario en llamadas al método Elements.
Ejemplo
En el ejemplo siguiente se muestra cómo obtener acceso a los nodos secundarios llamados phone desde el objeto
contact .
Ejemplo
En el ejemplo siguiente se muestra cómo tener acceso a los nodos secundarios denominados phone desde la
colección devuelta por la propiedad contact del eje secundario del objeto contacts .
Ejemplo
En el ejemplo siguiente se declara ns como un prefijo de espacio de nombres XML. A continuación, se usa el
prefijo del espacio de nombres para crear un literal XML y obtener acceso al primer nodo secundario con el
nombre completo ns:name .
Imports <xmlns:ns = "http://SomeNamespace">
Class TestClass4
End Class
Vea también
XElement
Propiedades del eje XML
Literales XML
Crear XML en Visual Basic
Nombres de atributos y elementos XML declarados
Propiedad de eje descendiente XML Visual Basic)
27/11/2019 • 3 minutes to read • Edit Online
Proporciona acceso a los descendientes de los elementos siguientes: un objeto XElement, un objeto XDocument,
una colección de objetos XElement o una colección de objetos XDocument.
Sintaxis
object...<descendant>
Elementos
object Obligatorio. Un objeto XElement, un objeto XDocument, una colección de objetos XElement o una
colección de objetos XDocument.
...< Obligatorio. Denota el inicio de una propiedad de eje descendiente.
descendant Obligatorio. Nombre de los nodos descendientes a los que se va a tener acceso, con el formato [
prefix:]name .
PA RT E DESC RIP C IÓ N
Valor devuelto
Una colección de objetos XElement.
Comentarios
Puede usar una propiedad de eje descendiente XML para tener acceso a los nodos descendientes por nombre de
un objeto XElement o XDocument, o de una colección de objetos XElement o XDocument. Utilice la propiedad
Value XML para tener acceso al valor del primer nodo descendiente de la colección devuelta. Para obtener más
información, vea propiedad valor XML.
El compilador Visual Basic convierte las propiedades de los ejes descendientes en llamadas al método
Descendants.
Ejemplo
En el ejemplo siguiente se muestra cómo obtener acceso al valor del primer nodo descendiente denominado name
y los valores de todos los nodos descendientes denominados phone del objeto contacts .
Ejemplo
En el ejemplo siguiente se declara ns como un prefijo de espacio de nombres XML. A continuación, usa el prefijo
del espacio de nombres para crear un literal XML y tener acceso al valor del primer nodo secundario con el nombre
completo ns:name .
Class TestClass2
End Class
Vea también
XElement
Propiedades del eje XML
Literales XML
Crear XML en Visual Basic
Nombres de atributos y elementos XML declarados
Propiedad de indizador de extensión (Visual Basic)
27/11/2019 • 3 minutes to read • Edit Online
Sintaxis
object(index)
Elementos
T ÉRM IN O DEF IN IC IÓ N
Valor devuelto
Objeto de la ubicación especificada en la colección, o Nothing si el índice está fuera del intervalo.
Comentarios
Puede usar la propiedad de indizador de extensión para tener acceso a los elementos individuales de una
colección. Esta propiedad de indizador se utiliza normalmente en la salida de las propiedades del eje XML. Las
propiedades XML secundario y del eje descendiente XML devuelven colecciones de objetos XElement o un valor de
atributo.
El compilador Visual Basic convierte las propiedades de indizador de extensión en llamadas al método
ElementAtOrDefault . A diferencia de un indizador de matriz, el método ElementAtOrDefault devuelve Nothing si el
índice está fuera del intervalo. Este comportamiento es útil cuando no se puede determinar fácilmente el número
de elementos de una colección.
Esta propiedad de indizador es como una propiedad de extensión para las colecciones que implementan
IEnumerable<T> o IQueryable<T>: solo se usa si la colección no tiene un indizador o una propiedad
predeterminada.
Para tener acceso al valor del primer elemento de una colección de objetos XElement o XAttribute, puede usar la
propiedad Value XML. Para obtener más información, vea propiedad valor XML.
Ejemplo
En el ejemplo siguiente se muestra cómo usar el indizador de extensión para tener acceso al segundo nodo
secundario de una colección de objetos XElement. Se tiene acceso a la colección mediante la propiedad del eje
secundario, que obtiene todos los elementos secundarios denominados phone en el objeto contact .
Vea también
XElement
Propiedades del eje XML
Literales XML
Crear XML en Visual Basic
Propiedad de valor XML
Value (Propiedad XML) (Visual Basic)
27/11/2019 • 3 minutes to read • Edit Online
Proporciona acceso al valor del primer elemento de una colección de objetos XElement.
Sintaxis
object.Value
Elementos
T ÉRM IN O DEF IN IC IÓ N
Valor devuelto
String que contiene el valor del primer elemento de la colección, o Nothing si la colección está vacía.
Comentarios
La propiedad Value facilita el acceso al valor del primer elemento de una colección de objetos XElement. Esta
propiedad comprueba primero si la colección contiene al menos un objeto. Si la colección está vacía, esta
propiedad devuelve Nothing . De lo contrario, esta propiedad devuelve el valor de la Value propiedad del primer
elemento de la colección.
NOTE
Cuando se tiene acceso al valor de un atributo XML mediante el identificador '@', el valor de atributo se devuelve como un
String y no es necesario especificar explícitamente la propiedad Value.
Para tener acceso a otros elementos de una colección, puede usar la propiedad de indizador de extensión XML.
Para más información, consulte extensión de la propiedad Indexer.
Herencia
La mayoría de los usuarios no tendrá que implementar IEnumerable<T>y, por tanto, puede omitir esta sección.
La propiedad Value es una propiedad de extensión para los tipos que implementan IEnumerable(Of XElement) . El
enlace de esta propiedad de extensión es como el enlace de métodos de extensión: Si un tipo implementa una de
las interfaces y define una propiedad con el nombre "Value", esa propiedad tiene prioridad sobre la propiedad de
extensión. En otras palabras, esta propiedad de Value se puede invalidar definiendo una nueva propiedad en una
clase que implementa IEnumerable(Of XElement) .
Ejemplo
En el ejemplo siguiente se muestra cómo utilizar la propiedad Value para tener acceso al primer nodo de una
colección de objetos XElement. En el ejemplo se usa la propiedad del eje secundario para obtener la colección de
todos los nodos secundarios denominados phone que se encuentran en el objeto contact .
Ejemplo
En el ejemplo siguiente se muestra cómo obtener el valor de un atributo XML de una colección de objetos
XAttribute. En el ejemplo se usa la propiedad de eje de atributo para mostrar el valor del atributo type de todos
los elementos phone .
home
work
Vea también
XElement
IEnumerable<T>
Propiedades del eje XML
Literales XML
Crear XML en Visual Basic
Métodos de extensión
Propiedad de indexador de extensión
Propiedad del eje secundario XML
Propiedad del eje de atributo XML
Literales XML (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
En los temas de esta sección se documenta la sintaxis de los literales XML en Visual Basic. La sintaxis de los
literales XML permite incorporar XML directamente en el código.
Esta sección
T EM A DESC RIP C IÓ N
Literal de instrucción de procesamiento XML Describe la sintaxis de literales que representan objetos
XProcessingInstruction.
Vea también
XML
Literal de elemento XML (Visual Basic)
27/11/2019 • 9 minutes to read • Edit Online
Sintaxis
<name [ attributeList ] />
-or-
<name [ attributeList ] > [ elementContents ] </[ name ]>
Elementos
<
PA RT E DESC RIP C IÓ N
Expresión incrustada con el formato <%= nameExp %> . El tipo de nameExp debe ser String o un tipo
que se pueda convertir implícitamente en XName. No se permite una expresión incrustada en una
etiqueta de cierre de un elemento.
attributeList
PA RT E DESC RIP C IÓ N
Opcional. Representa la etiqueta de cierre del elemento. No se permite el parámetro opcional name
cuando es el resultado de una expresión incrustada.
Valor devuelto
Un objeto XElement.
Comentarios
Puede usar la sintaxis de literales del elemento XML para crear XElement objetos en el código.
NOTE
Un literal XML puede abarcar varias líneas sin utilizar caracteres de continuación de línea. Esta característica permite copiar
contenido de un documento XML y pegarlo directamente en un programa Visual Basic.
Las expresiones incrustadas del formulario <%= exp %> permiten agregar información dinámica a un literal de
elemento XML. Para obtener más información, vea expresiones incrustadas en XML.
El compilador Visual Basic convierte el literal de elemento XML en llamadas al constructor XElement y, si es
necesario, el constructor XAttribute.
Ejemplo
En el ejemplo siguiente se muestra cómo crear un elemento XML simple que tiene dos elementos vacíos
anidados.
Console.WriteLine(test1)
En el ejemplo se muestra el texto siguiente. Observe que el literal conserva la estructura de los elementos vacíos.
<outer>
<inner1></inner1>
<inner2 />
</outer>
Ejemplo
En el ejemplo siguiente se muestra cómo utilizar expresiones incrustadas para asignar un nombre a un elemento
y crear atributos.
Console.WriteLine(book)
Ejemplo
En el ejemplo siguiente se declara ns como un prefijo de espacio de nombres XML. A continuación, usa el prefijo
del espacio de nombres para crear un literal XML y muestra el formulario final del elemento.
Class TestClass1
Dim test =
<ns:outer>
<ns:middle xmlns:ns="http://NewNamespace">
<ns:inner1/>
<%= inner2 %>
</ns:middle>
</ns:outer>
End Class
Observe que el compilador ha convertido el prefijo del espacio de nombres XML global en una definición de
prefijo para el espacio de nombres XML. El elemento <NS: Middle > vuelve a definir el prefijo de espacio de
nombres XML para el elemento de > <NS: inner1. Sin embargo, el elemento <NS: inner2 > utiliza el espacio de
nombres definido por la instrucción Imports .
Vea también
XElement
Nombres de atributos y elementos XML declarados
Literal de comentario XML
Literal de CDATA XML
Literales XML
Crear XML en Visual Basic
Expresiones incrustadas en XML
Imports (instrucción), espacio de nombres XML
Literal de documento XML (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Sintaxis
<?xml version="1.0" [encoding="encoding"] [standalone="standalone"] ?>
[ piCommentList ]
rootElement
[ piCommentList ]
Elementos
T ÉRM IN O DEF IN IC IÓ N
Un objeto XElement.
Colección que contiene un objeto XElement y
cualquier número de objetos XComment y
XProcessingInstruction.
Valor devuelto
Un objeto XDocument.
Comentarios
Un literal de documento XML se identifica mediante la declaración XML al principio del literal. Aunque cada literal
de documento XML debe tener exactamente un elemento XML raíz, puede tener cualquier número de instrucciones
de procesamiento XML y comentarios XML.
Un literal de documento XML no puede aparecer en un elemento XML.
NOTE
Un literal XML puede abarcar varias líneas sin utilizar caracteres de continuación de línea. Esto le permite copiar contenido de
un documento XML y pegarlo directamente en un programa de Visual Basic.
El compilador Visual Basic convierte el literal del documento XML en llamadas a los constructores XDocument y
XDeclaration.
Ejemplo
En el ejemplo siguiente se crea un documento XML que tiene una declaración XML, una instrucción de
procesamiento, un comentario y un elemento que contiene otro elemento.
Vea también
XElement
XProcessingInstruction
XComment
XDocument
Literal de instrucción de procesamiento XML
Literal de comentario XML
Literal de elemento XML
Literales XML
Crear XML en Visual Basic
Expresiones incrustadas en XML
Literal de CDATA XML (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Sintaxis
<![CDATA[content]]>
Elementos
<![CDATA[
Obligatorio. Denota el inicio de la sección XML CDATA.
content
Obligatorio. Contenido de texto para que aparezca en la sección XML CDATA.
]]>
Obligatorio. Denota el final de la sección.
Valor devuelto
Un objeto XCData.
Comentarios
Las secciones CDATA XML contienen texto sin formato que se debe incluir, pero no analizar, con el XML que lo
contiene. Una sección CDATA XML puede contener cualquier texto. Esto incluye los caracteres XML reservados. La
sección CDATA XML finaliza con la secuencia "]] >". Esto implica los puntos siguientes:
No se puede usar una expresión insertada en un literal CDATA XML porque los delimitadores de expresión
incrustados son contenido XML CDATA válido.
Las secciones CDATA XML no se pueden anidar porque content no pueden contener el valor "]] >".
Puede asignar un literal CDATA XML a una variable o incluirlo en un literal de elemento XML.
NOTE
Un literal XML puede abarcar varias líneas, pero no utiliza caracteres de continuación de línea. Esto le permite copiar
contenido de un documento XML y pegarlo directamente en un programa de Visual Basic.
El compilador Visual Basic convierte el literal CDATA XML en una llamada al constructor XCData.
Ejemplo
En el ejemplo siguiente se crea una sección CDATA que contiene el texto "puede contener etiquetas de > XML de
<literal".
Dim cdata As XCData = <![CDATA[Can contain literal <XML> tags]]>
Vea también
XCData
Literal de elemento XML
Literales XML
Crear XML en Visual Basic
Literal de comentario XML (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Sintaxis
<!-- content -->
Elementos
T ÉRM IN O DEF IN IC IÓ N
Valor devuelto
Un objeto XComment.
Comentarios
Los literales de comentario XML no incluyen el contenido del documento; contienen información sobre el
documento. La sección de comentarios XML finaliza con la secuencia "-->". Esto implica los puntos siguientes:
No se puede usar una expresión insertada en un literal de comentario XML porque los delimitadores de
expresión incrustados son contenido de comentario XML válido.
Las secciones de comentarios XML no se pueden anidar porque content no pueden contener el valor "--
>".
Puede asignar un literal de comentario XML a una variable o puede incluirlo en un literal de elemento XML.
NOTE
Un literal XML puede abarcar varias líneas sin utilizar caracteres de continuación de línea. Esta característica permite copiar
contenido de un documento XML y pegarlo directamente en un programa Visual Basic.
El compilador Visual Basic convierte el literal de comentario XML en una llamada al constructor XComment.
Ejemplo
En el ejemplo siguiente se crea un comentario XML que contiene el texto "This is a comment".
Dim com As XComment = <!-- This is a comment -->
Vea también
XComment
Literal de elemento XML
Literales XML
Crear XML en Visual Basic
Literal de instrucción de procesamiento XML (Visual
Basic)
27/11/2019 • 2 minutes to read • Edit Online
Sintaxis
<?piName [ = piData ] ?>
Elementos
<?
Obligatorio. Denota el inicio del literal de instrucción de procesamiento XML.
piName
Obligatorio. Nombre que indica la aplicación a la que se destina la instrucción de procesamiento. No puede
comenzar por "XML" o "XML".
piData
Opcional. Cadena que indica cómo la aplicación de destino piName debe procesar el documento XML.
?>
Obligatorio. Denota el final de la instrucción de procesamiento.
Valor devuelto
Un objeto XProcessingInstruction.
Comentarios
Los literales de instrucciones de procesamiento XML indican cómo deben procesar las aplicaciones un documento
XML. Cuando una aplicación carga un documento XML, la aplicación puede comprobar las instrucciones de
procesamiento XML para determinar cómo procesar el documento. La aplicación interpreta el significado de
piName y piData .
El literal de documento XML utiliza una sintaxis similar a la de la instrucción de procesamiento XML. Para obtener
más información, vea literal de documento XML.
NOTE
El elemento piName no puede comenzar con las cadenas "XML" o "XML", ya que la especificación XML 1,0 reserva esos
identificadores.
Puede asignar un literal de instrucción de procesamiento XML a una variable o incluirlo en un literal de
documento XML.
NOTE
Un literal XML puede abarcar varias líneas sin necesidad de caracteres de continuación de línea. Esto le permite copiar
contenido de un documento XML y pegarlo directamente en un programa de Visual Basic.
El compilador Visual Basic convierte el literal de instrucción de procesamiento XML en una llamada al constructor
XProcessingInstruction.
Ejemplo
En el ejemplo siguiente se crea una instrucción de procesamiento que identifica una hoja de estilos para un
documento XML.
Dim pi As XProcessingInstruction =
<?xml-stylesheet type="text/xsl" href="show_book.xsl"?>
Vea también
XProcessingInstruction
Literal de documento XML
Literales XML
Crear XML en Visual Basic
Mensajes de error (Visual Basic)
27/11/2019 • 4 minutes to read • Edit Online
Al escribir, compilar o ejecutar una aplicación de Visual Basic, pueden producirse los siguientes tipos de errores:
1. Errores en tiempo de diseño, que se producen al escribir una aplicación en Visual Studio.
2. Errores en tiempo de compilación, que se producen cuando se compila una aplicación en Visual Studio o en
un símbolo del sistema.
3. Errores en tiempo de ejecución, que se producen al ejecutar una aplicación en Visual Studio o como un
archivo ejecutable independiente.
Para obtener información sobre cómo solucionar un error específico, vea Recursos adicionales para
programadores de Visual Basic.
#ElseIf es una directiva de compilación condicional. Un #ElseIf cláusula debe ir precedida por una coincidencia
#If o #ElseIf cláusula.
Identificador de error : BC30014
Vea también
#If...Then...#Else (directivas)
Las instrucciones '#Region' y '#End Region' no son
válidas en los cuerpos de método y operaciones
lambda de varias líneas
23/10/2019 • 2 minutes to read • Edit Online
El #Region bloque debe declararse en un nivel de clase, módulo o espacio de nombres. Una región contraíble
puede incluir uno o varios procedimientos, pero no puede comenzar ni terminar dentro de un procedimiento.
Identificador de error : BC32025
Vea también
#Region (directiva)
no se puede aplicar '<atributo > ' porque el formato
del GUID '<número > ' no es correcto
25/11/2019 • 2 minutes to read • Edit Online
Un bloque de atributos COMClassAttribute especifica un identificador único global (GUID) que no se ajusta al
formato adecuado para un GUID. COMClassAttribute utiliza GUID para identificar de forma única la clase, la interfaz
y el evento de creación.
Un GUID consta de 16 bytes, de los cuales los ocho primeros son numéricos y el resto son binarios. Se genera
mediante utilidades de Microsoft como Uuidgen. exe y se garantiza que es único en el espacio y en el tiempo.
Identificador de error : BC32500
Vea también
Guid
Información general de atributos
'<classname >' no es conforme a CLS porque la
interfaz '<interfacename >' implementa no es
conforme a CLS
23/10/2019 • 2 minutes to read • Edit Online
Una clase o interfaz se marca como <CLSCompliant(True)> cuando se deriva (o lo implementa) de un tipo marcado
como <CLSCompliant(False)> o que no está marcado.
Para una clase o interfaz sea compatible con la independencia del lenguaje y componentes independientes del
lenguaje (CLS), su jerarquía de herencia completa debe ser compatible. Esto significa que cada tipo del que hereda,
directa o indirectamente, debe ser compatible. De forma similar, si una clase implementa una o varias interfaces,
todas deben conformes a lo largo de su jerarquía de herencia.
Al aplicar CLSCompliantAttribute a un elemento de programación, establezca el parámetro isCompliant del
atributo en True o False para indicar conformidad o disconformidad. No hay ningún valor predeterminado para
este parámetro, por lo que debe proporcionar uno.
Si no se aplica CLSCompliantAttribute a un elemento, se considera que no es conforme.
De forma predeterminada, este mensaje es una advertencia. Para obtener más información sobre cómo ocultar las
advertencias o cómo tratarlas como errores, vea Configuring Warnings in Visual Basic.
Identificador de error : BC40029
Una instrucción intenta obtener acceso a un elemento de programación que se ha marcado con el atributo
ObsoleteAttribute y la directiva para tratarlo como una advertencia.
Puede marcar que un elemento de programación ya no está en uso aplicándole ObsoleteAttribute . Si lo hace,
puede establecer la propiedad IsError del atributo en True o False . Si se establece en True , el compilador trata
como un error los intentos de usar el elemento. Si se establece en False o se deja el valor predeterminado False ,
el compilador emite una advertencia si se produce un intento de usar el elemento.
De forma predeterminada, este mensaje es una advertencia, ya que la propiedad IsError de ObsoleteAttribute es
False . Para más información sobre cómo ocultar las advertencias o cómo tratarlas como errores, vea Configuring
Warnings in Visual Basic.
Identificador de error : BC40008
Vea también
Información general de atributos
'<eventname >' es un evento y no se puede llamar
directamente
23/10/2019 • 2 minutes to read • Edit Online
' < eventname >' es un evento y no se puede llamar directamente. Use un RaiseEvent instrucción para generar un
evento.
Una llamada a procedimiento especifica un evento para el nombre del procedimiento. Un controlador de eventos
es un procedimiento, pero el propio evento es un dispositivo de señalización, que debe generarse y controlarse.
Identificador de error : BC32022
Vea también
RaiseEvent (instrucción)
'<expresión >' no puede utilizarse como una
restricción de tipo
23/10/2019 • 2 minutes to read • Edit Online
Una lista de restricciones incluye una expresión que no representa una restricción válida en un parámetro de tipo.
Una lista de restricciones impone requisitos al argumento de tipo pasado al parámetro de tipo. Puede especificar
los requisitos siguientes en cualquier combinación:
El argumento de tipo debe implementar una o varias interfaces
El argumento de tipo debe heredar de al menos una clase
El argumento de tipo debe exponer un constructor sin parámetros al que el código de creación pueda
acceder (incluya la restricción New ).
Si no incluye ninguna clase o interfaz específica en la lista de restricciones, puede imponer un requisito más general
especificando uno de los elementos siguientes:
El argumento de tipo debe ser un tipo de valor (incluya la restricción Structure ).
El argumento de tipo debe ser un tipo de referencia (incluya la restricción Class ).
No es posible especificar Structure y Class para el mismo parámetro de tipo ni se pueden especificar estas
restricciones más de una vez.
Identificador de error : BC32061
Vea también
Generic Types in Visual Basic
Value Types and Reference Types
Referencias a elementos declarados
'<functionname >' no se ha declarado (Smart
Device/Visual Basic Error del compilador)
23/10/2019 • 2 minutes to read • Edit Online
< functionname > no se ha declarado. La funcionalidad de E/S de archivos está disponible normalmente en el
espacio de nombres Microsoft.VisualBasic , pero la versión de destino de .NET Compact Framework no la admite.
Identificador de error : BC30766
Vea también
System.IO
Acceso a archivos con Visual Basic
'<nombreDeInterfaz >. <membername >' ya está
implementado por la clase base<nombredeclasebase
>'. Reimplementación de <tipo > supone
23/10/2019 • 2 minutes to read • Edit Online
Una propiedad, procedimiento o evento en una clase derivada utiliza una Implements cláusula que especifica un
miembro de interfaz que ya está implementado en la clase base.
Una clase derivada puede volver a implementar un miembro de interfaz implementado por su clase base. Esto no
es el mismo que reemplazar la implementación de la clase base. Para obtener más información, consulte
Implements.
De forma predeterminada, este mensaje es una advertencia. Para obtener más información sobre cómo ocultar las
advertencias o cómo tratarlas como errores, vea Configuring Warnings in Visual Basic.
Identificador de error : BC42015
Vea también
Interfaces
'<palabra clave >' es válido solo dentro de un
método de instancia
23/10/2019 • 2 minutes to read • Edit Online
El Me , MyClass , y MyBase palabras clave que hacen referencia a instancias de clase específica. No se pueden
utilizar dentro de un compartido Function o Sub procedimiento.
Identificador de error : BC30043
Vea también
Asignación de variables de objeto
Me, My, MyBase y MyClass
Fundamentos de la herencia
'<membername > ' no puede exponer el tipo
'<TypeName > ' fuera del proyecto a través de
<containerType > '<containertypename > '
23/11/2019 • 2 minutes to read • Edit Online
Una variable, un parámetro de procedimiento o un valor devuelto de función se expone fuera de su contenedor,
pero se declara como un tipo que no se debe exponer fuera del contenedor.
El código esqueleto siguiente muestra una situación que genera este error.
Un tipo que se declara Protected , Friend , Protected Friend o Private está diseñado para tener acceso limitado
fuera de su contexto de declaración. Si se usa como el tipo de datos de una variable con acceso menos restringido,
se anularía este propósito. En el código de esqueleto anterior, exposedVar se Public y exponería privateClass al
código que no debería tener acceso a él.
Identificador de error : BC30909
Vea también
Niveles de acceso en Visual Basic
' <membername > ' es ambiguo en las interfaces
heredadas ' <interfacename1 > ' y ' <interfacename2
>'
23/10/2019 • 2 minutes to read • Edit Online
La interfaz hereda dos o más miembros con el mismo nombre de varias interfaces.
IDENTIFICADOR de error : BC30685
Interface Left
Sub MySub()
End Interface
Interface Right
Sub MySub()
End Interface
Interface LeftRight
Inherits Left, Right
End Interface
Module test
Sub Main()
Dim x As LeftRight
' x.MySub() 'x is ambiguous.
CType(x, Left).MySub() ' Cast to base type.
CType(x, Right).MySub() ' Call the other base type.
End Sub
End Module
Vea también
Interfaces
<mensaje > Este error también podría ser debido a la
combinación de una referencia de archivo con una
referencia de proyecto al ensamblado
'<assemblyname >'
23/10/2019 • 2 minutes to read • Edit Online
<mensaje > Este error también podría ser debido a la combinación de una referencia de archivo con una referencia
de proyecto al ensamblado '<assemblyname >. En este caso, intente reemplazar la referencia de archivo a
'<nombredearchivodeensamblado >' en el proyecto '<projectname1 >' con una referencia de proyecto a
'<projectname2 >'.
Código del proyecto accede a un miembro de otro proyecto, pero la configuración de la solución no admite el
compilador de Visual Basic resolver la referencia.
Para obtener acceso a un tipo definido en otro ensamblado, el compilador de Visual Basic debe tener una referencia
a ese ensamblado. Debe ser una referencia única y no ambigua, que no produzca referencias circulares entre
proyectos.
Identificador de error : BC30971
Vea también
Administrar referencias en un proyecto
Referencias a elementos declarados
Administrar propiedades de soluciones y proyectos
Solucionar problemas de referencias rotas
'<methodname >' tiene varias definiciones con firmas
idénticas
23/10/2019 • 2 minutes to read • Edit Online
Un Function o Sub declaración de procedimiento utiliza el procedimiento idéntico nombre y lista de argumentos
que una declaración anterior. Una posible causa es un intento de sobrecargar el procedimiento original. Los
procedimientos sobrecargados deben tener distintas listas de argumentos.
Identificador de error : BC30269
Vea también
Referencias a elementos declarados
Consideraciones sobre la sobrecarga de procedimientos
'<nombre >' es ambiguo en el espacio de nombres
'<namespacename >'
23/10/2019 • 2 minutes to read • Edit Online
Se proporcionó un nombre que es ambiguo y, por tanto, entra en conflicto con otro nombre. El compilador de
Visual Basic no tiene ninguna regla de resolución de conflictos; deben eliminar la ambigüedad de los nombres
usted mismo.
Identificador de error : BC30560
Vea también
Espacios de nombres en Visual Basic
Namespace (instrucción)
'<nombre1 >' es ambiguo y se ha importado de los
espacios de nombres o tipos<nombre2 >'
23/10/2019 • 2 minutes to read • Edit Online
Se proporcionó un nombre que es ambiguo y, por tanto, entra en conflicto con otro nombre. El compilador de
Visual Basic no tiene ninguna regla de resolución de conflictos; deben eliminar la ambigüedad de los nombres
usted mismo.
Identificador de error : BC30561
Vea también
Imports (instrucción), espacio de nombres y tipo .NET
Espacios de nombres en Visual Basic
Namespace (instrucción)
el > <proceduresignature1 no es conforme a CLS
porque sobrecarga <proceduresignature2 > que
difiere de él solo en la matriz de tipos de parámetro
de matriz o en el rango de los tipos de parámetro de
matriz
23/10/2019 • 2 minutes to read • Edit Online
Un procedimiento o propiedad está marcado como <CLSCompliant(True)> cuando invalida otro procedimiento o
propiedad y la única diferencia entre sus listas de parámetros es el nivel de anidamiento de una matriz escalonada
o el rango de una matriz.
En las declaraciones siguientes, las declaraciones segunda y tercera generan este error:
Overloads Sub ProcessArray(arrayParam() As Integer)
La segunda declaración cambia el parámetro unidimensional original arrayParam a una matriz de matrices. La
tercera declaración cambia arrayParam a una matriz bidimensional (rango 2). Aunque Visual Basic permite que las
sobrecargas solo difieran en uno de estos cambios, tal sobrecarga no es compatible con los componentes
independientes del lenguaje y del lenguaje (CLS).
Al aplicar CLSCompliantAttribute a un elemento de programación, establezca el parámetro isCompliant del
atributo en True o False para indicar conformidad o disconformidad. No hay ningún valor predeterminado para
este parámetro, por lo que debe proporcionar uno.
Si no se aplica CLSCompliantAttribute a un elemento, se considera que no es conforme.
De forma predeterminada, este mensaje es una advertencia. Para obtener más información sobre cómo ocultar las
advertencias o cómo tratarlas como errores, vea Configuring Warnings in Visual Basic.
IDENTIFICADOR de error : BC40035
Vea también
Sobrecarga de procedimientos
Sobrecargas
" debe implementar "" para la interfaz """ />
'<TypeName > ' debe implementar '<membername > ' para la interfaz
'<InterfaceName > '. La implementación de la propiedad debe tener
especificadores ' ReadOnly '/' WriteOnly ' coincidentes.
Una clase o estructura notifica a que implemente una interfaz pero no
implementa un procedimiento, una propiedad o un evento definidos por la
interfaz. Se deben implementar todos los miembros de la interfaz.
Identificador de error : BC30154
Vea también
Implements (instrucción)
Interfaces
" debe implementar "" para la interfaz """ />
Vea también
Implements (instrucción)
Interfaces
'<typename >' no puede heredar de <tipo >
'<nombreDeTipoBase >' porque expande el acceso
de la base de <tipo > fuera del ensamblado
23/10/2019 • 2 minutes to read • Edit Online
Una clase o interfaz hereda de una clase base o interfaz, pero tiene un nivel de acceso menos restrictivo.
Por ejemplo, un Public interfaz hereda de un Friend interfaz, o un Protected clase hereda de un Private clase.
Esto expone la clase base o interfaz para tener acceso a más allá del nivel deseado.
Identificador de error : BC30910
Vea también
Class (instrucción)
Interface (instrucción)
Inherits (instrucción)
Niveles de acceso en Visual Basic
'<typename >' es un tipo delegado
23/10/2019 • 2 minutes to read • Edit Online
'<typename >' es un tipo delegado. Construcción de delegado permite una única expresión AddressOf como una
lista de argumentos. A menudo se puede usar una expresión de AddressOf en lugar de una construcción de
delegado.
Un New cláusula crea una instancia de una clase de delegado proporciona una lista de argumentos no válido al
constructor de delegado.
Puede proporcionar una sola AddressOf expresión al crear una nueva instancia de delegado.
Este error puede producirse si no pasa ningún argumento al constructor de delegado, si se pasa más de un
argumento, o si se pasa un único argumento que no es válido AddressOf expresión.
Identificador de error : BC32008
Vea también
New (operador)
AddressOf (operador)
Delegados
Cómo: Invocar un método delegado
'<typename >' es un tipo y no se puede usar como
una expresión.
23/10/2019 • 2 minutes to read • Edit Online
Aparece un nombre de tipo cuando se necesita una expresión. Las expresiones deben constar de la combinación de
variables, constantes, literales, propiedades y llamadas al procedimiento Function .
Identificador de error : BC30108
Vea también
Operadores y expresiones
Un carácter de comilla doble no es un símbolo
(token) de comentario válido para campos
delimitados donde EscapeQuote está establecido en
True
25/11/2019 • 2 minutes to read • Edit Online
Se proporcionó una comilla como delimitador para TextFieldParser , pero EscapeQuotes está establecido en True .
Vea también
SetDelimiters
Delimiters
TextFieldParser
Leer archivos de texto delimitado por comas
Una llamada a una propiedad o un método no puede
incluir una referencia a un objeto privado como un
argumento o un valor de retorno
25/11/2019 • 2 minutes to read • Edit Online
Vea también
Private
Se creó una referencia al ensamblado de
interoperabilidad ' <assembly1 > ' incrustado debido
a una referencia indirecta a ese ensamblado desde el
ensamblado ' <assembly2 > '
26/10/2019 • 2 minutes to read • Edit Online
NOTE
Para el compilador de línea de comandos, el establecimiento de la propiedad Embed Interop Types de una referencia a
ensamblado en True equivale a hacer referencia al ensamblado utilizando la opción -link .
Para quitar la advertencia, puede establecer la propiedad Embed Interop Types de ensamblado1 en False .
En este caso, un ensamblado de interoperabilidad primario (PIA) proporciona información de tipo de
interoperabilidad.
Vea también
-Link (Visual Basic)
Interoperating with Unmanaged Code (Interoperar con código no administrado)
No se ha especificado un formulario de inicio
25/11/2019 • 2 minutes to read • Edit Online
Vea también
WindowsFormsApplicationBase
OnCreateMainForm
MainForm
Información general sobre el modelo de aplicaciones de Visual Basic
Acceso de miembro compartido, miembro de
constante, miembro de enumeración o tipo anidado
a través de una instancia de; no se evaluará la
expresión de calificación
29/10/2019 • 3 minutes to read • Edit Online
Una variable de instancia de una clase o estructura se utiliza para tener acceso a una variable, una propiedad, un
procedimiento o un evento Shared definidos en esa clase o estructura. Esta advertencia también puede producirse
si se usa una variable de instancia para tener acceso a un miembro compartido implícitamente de una clase o
estructura, como una constante o una enumeración, o una clase o estructura anidada.
El propósito de compartir un miembro es crear una sola copia de ese miembro y hacer que esa copia única esté
disponible para cada instancia de la clase o estructura en la que se declara. Es coherente con este propósito para
tener acceso a un miembro Shared a través del nombre de su clase o estructura, en lugar de una variable que
contiene una instancia individual de esa clase o estructura.
El acceso a un miembro Shared a través de una variable de instancia puede hacer que el código sea más difícil de
entender si se oculta el hecho de que el miembro es Shared . Además, si dicho acceso forma parte de una
expresión que realiza otras acciones, como un procedimiento Function que devuelve una instancia del miembro
compartido, Visual Basic omite la expresión y cualquier otra acción que, de lo contrario, realizaría.
Para obtener más información y un ejemplo, vea Shared.
De forma predeterminada, este mensaje es una advertencia. Para más información sobre cómo ocultar las
advertencias o cómo tratarlas como errores, vea Configuring Warnings in Visual Basic.
Identificador de error : BC42025
Ejemplo
En el ejemplo siguiente se genera bc42025:
Module Program
Public Sub Main()
Dim tc As New TestClass()
tc.SayHello() ' BC42025.
End Sub
End Module
Module Program
Public Sub Main()
TestClass.SayHello()
End Sub
End Module
NOTE
Debe alertar sobre los efectos del ámbito cuando dos elementos de programación tienen el mismo nombre. En el ejemplo
anterior, si declara una instancia de mediante Dim testClass As TestClass = Nothing , el compilador trata una llamada a
testClass.SayHello() como un acceso al método a través del nombre de la clase y no se produce ninguna advertencia.
Vea también
Shared
Ámbito en Visual Basic
El operando 'AddressOf' debe ser el nombre de un
método (sin paréntesis)
29/10/2019 • 2 minutes to read • Edit Online
El operador AddressOf crea una instancia de delegado de procedimiento que hace referencia a un procedimiento
específico. La sintaxis es la siguiente:
AddressOf procedurename
Se han insertado paréntesis alrededor del argumento siguiente a AddressOf , donde no se necesita ninguno.
Identificador de error : BC30577
Ejemplo
En el ejemplo siguiente se genera bc30577:
Sub Main()
' Any of the following two lines generates bc30577.
'Dim t As New Threading.Thread(AddressOf(CountZeroToTen))
'Dim t As New Threading.Thread(AddressOf CountZeroToTen())
t.Start()
End Sub
Sub Main()
Dim t As New Threading.Thread(AddressOf CountZeroToTen)
t.Start()
End Sub
Vea también
AddressOf (operador)
Delegados
Error inesperado porque no se puede conseguir un
recurso del sistema operativo necesario para el inicio
de una instancia única
25/11/2019 • 2 minutes to read • Edit Online
La aplicación no pudo obtener un recurso de sistema operativo necesario. Algunas de las posibles causas de este
problema son:
La aplicación no tiene permisos para crear objetos de sistema operativo con nombre.
Common Language Runtime no tiene permisos para crear archivos asignados a memoria.
La aplicación necesita acceder a un objeto de sistema operativo, pero hay otro proceso que lo está utilizando.
Vea también
Página de aplicación, Diseñador de proyectos (Visual Basic)
Conceptos básicos del depurador
Hable con nosotros
El nombre de miembro de tipo anónimo sólo se
puede inferir a partir de un nombre simple o
completo sin argumentos
29/10/2019 • 2 minutes to read • Edit Online
No se puede inferir un nombre de miembro de tipo anónimo a partir de una expresión compleja.
Identificador de error : BC36556
Ejemplo
En el ejemplo siguiente se genera BC36556:
Para obtener más información sobre los orígenes de los que los tipos anónimos pueden y no pueden inferir
nombres y tipos de miembros, vea Cómo: inferir nombres y tipos de propiedades en declaraciones de tipos
anónimos.
Vea también
Tipos anónimos
Deducir tipos y nombres de propiedades en declaraciones de tipos anónimos
Argumento no opcional (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
El número y los tipos de argumentos deben coincidir con los esperados. Hay un número de argumentos incorrecto
o un argumento omitido no es opcional. Un argumento solo se puede omitir en una llamada a un procedimiento
definido por el usuario si se declaró Optional en la definición del procedimiento.
Vea también
Tipos de error
Los límites de matriz no pueden aparecer en los
especificadores de tipo
29/10/2019 • 2 minutes to read • Edit Online
Los tamaños de la matriz no se pueden declarar como parte de un especificador de tipo de datos.
Identificador de error : BC30638
Ejemplo
En el ejemplo siguiente se genera BC30638:
Defina una matriz e inicialícela con el número deseado de elementos, como se muestra en el ejemplo
siguiente:
Vea también
Matrices
Una matriz declarada como variable de control de
bucle no se puede declarar con un tamaño inicial
29/10/2019 • 2 minutes to read • Edit Online
Un bucle For Each usa una matriz como su variable de iteración, pero inicializa esa matriz.
Identificador de error : BC32039
Ejemplo
En el ejemplo siguiente se genera bc32039:
Next
Next
Next
Vea también
For...Next (instrucción)
Matrices
Colecciones
Falta la expresión de subíndice de matriz
23/10/2019 • 2 minutes to read • Edit Online
Una inicialización de matriz deja al menos uno de los subíndices que definen los límites de la matriz. Por ejemplo, la
instrucción puede contener la expresión myArray (5,5,,10) , que deja el tercer subíndice.
Identificador de error : BC30306
Vea también
Matrices
Las matrices declaradas como miembros de
estructura no se pueden declarar con un tamaño
inicial
23/10/2019 • 2 minutes to read • Edit Online
Una matriz de una estructura se declara con un tamaño inicial. No se puede inicializar ningún elemento de
estructura y declarar un tamaño de matriz es una forma de inicialización.
Identificador de error : BC31043
Ejemplo
En el ejemplo siguiente se genera BC31043:
Structure DemoStruct
Public demoArray(9) As Integer
End Structure
Structure DemoStruct
Public demoArray() As Integer
End Structure
Sub UseStruct()
Dim struct As DemoStruct
ReDim struct.demoArray(9)
Struct.demoArray(2) = 777
End Sub
Vea también
Matrices
Declarar una estructura
'As Any' no se admite en instrucciones 'Declare'
23/10/2019 • 2 minutes to read • Edit Online
El tipo de datos Any se usó con las instrucciones Declare en Visual Basic 6,0 y versiones anteriores para permitir
el uso de argumentos que podrían contener cualquier tipo de datos. Sin embargo, Visual Basic admite la
sobrecarga, por lo que hace que el tipo de datos Any esté obsoleto.
Identificador de error : BC30828
2. Use el atributo MarshalAsAttribute para especificar As Any cuando se espera Void* en el procedimiento al
que se llama.
Vea también
MarshalAsAttribute
Tutorial: Llamar a las API de Windows
Declare (instrucción)
Crear prototipos en código administrado
El atributo '<attributeName > ' no se puede aplicar
varias veces
25/11/2019 • 2 minutes to read • Edit Online
El atributo solo se puede aplicar una vez. El atributo AttributeUsage determina si un atributo se puede aplicar más
de una vez.
Identificador de error : BC30663
<AttributeUsage(AllowMultiple := True)>
Vea también
AttributeUsageAttribute
Creación de atributos personalizados
AttributeUsage
Error de automatización
25/11/2019 • 2 minutes to read • Edit Online
Se ha producido un error al ejecutar un método u obtener o establecer una propiedad de una variable de objeto. El
error se notificó a través de la aplicación que creó el objeto.
Vea también
Tipos de error
Hable con nosotros
Valor de suma de comprobación incorrecto; no tiene
dígitos hexadecimales o el número de dígitos
hexadecimales es impar
31/10/2019 • 2 minutes to read • Edit Online
Un valor de suma de comprobación contiene dígitos hexadecimales no válidos o un número impar de dígitos.
Cuando ASP.NET genera un archivo de origen de Visual Basic (extensión .vb), calcula una suma de comprobación y
la coloca en un archivo se origen oculto que se identifica por medio de #externalchecksum . Un usuario también
puede generar un archivo .vb con el mismo fin, aunque lo más conveniente es dejar este proceso para uso interno.
De forma predeterminada, este mensaje es una advertencia. Para obtener información sobre cómo ocultar las
advertencias o cómo tratarlas como errores, vea Configuring Warnings in Visual Basic.
Identificador de error : BC42033
Vea también
ASP.NET Overview (Información general de ASP.NET)
Hable con nosotros
Convención de llamada a archivo DLL no válida
23/10/2019 • 2 minutes to read • Edit Online
Los argumentos pasados a una biblioteca de vínculos dinámicos (DLL) deben coincidir exactamente con los
esperados por la rutina. Convenciones de llamada ocupan de número, tipo y orden de los argumentos. El programa
puede estar llamando a una rutina en un archivo DLL que se pasa el tipo incorrecto o el número de argumentos.
Vea también
Tipos de error
Call (instrucción)
Declare (instrucción)
Modo de archivo incorrecto
23/10/2019 • 2 minutes to read • Edit Online
Las instrucciones que se utilizan para manipular el contenido del archivo deben ser adecuadas para el modo en que
se abrió el archivo. Entre las posibles causas se incluyen:
Un FilePutObject o FileGetObject instrucción especifica un archivo secuencial.
Un Print instrucción especifica un archivo abierto para un modo de acceso distinto Output o Append .
Un Input instrucción especifica un archivo abierto para un modo de acceso distinto Input
Asegúrese de que Print especifica un archivo abierto para cualquiera Output o Append modo de acceso.
Si no es así, utilice otra instrucción para colocar datos en el archivo o vuelva a abrir el archivo en un modo
adecuado.
Asegúrese de que Input especifica un archivo abierto para Input . Si no es así, utilice otra instrucción para
colocar datos en el archivo o vuelva a abrir el archivo en un modo adecuado.
Si está escribiendo en un archivo de solo lectura, cambie el estado de lectura/escritura del archivo o no
intente escribir en él.
Use la funcionalidad disponible en el objeto My.Computer.FileSystem .
Vea también
FileSystem
Solución de problemas: Leer y escribir en archivos de texto
Número o nombre de archivo incorrecto
23/10/2019 • 2 minutes to read • Edit Online
Se produjo un error al intentar obtener acceso al archivo especificado. Entre las posibles causas de este error son:
La instrucción hace referencia a un archivo con un nombre de archivo o un número que no se especificó en
el FileOpen instrucción o que se especificó en un FileOpen instrucción pero era posteriormente cerrado.
Una instrucción hace referencia a un archivo con un número que está fuera del intervalo del número de
archivos.
Una instrucción hace referencia a un nombre de archivo o un número que no es válido.
Vea también
FileOpen
Convenciones de nomenclatura de Visual Basic
Longitud de registro incorrecta
23/10/2019 • 2 minutes to read • Edit Online
Vea también
FileGet
FileGetObject
FilePut
FilePutObject
Dado que no se espera esta llamada, la ejecución del
método actual continúa antes de que se complete la
llamada.
31/10/2019 • 9 minutes to read • Edit Online
Dado que no se esperaba esta llamada, la ejecución del método actual continuará antes de que se complete la
llamada. Considere la posibilidad de aplicar el operador Await al resultado de la llamada.
El método actual llama a un método asincrónico que devuelve un Task o un Task<TResult> y no aplica el operador
Await al resultado. La llamada al método asincrónico inicia una tarea asincrónica. Pero, dado que no se aplica
ningún operador Await , el programa continúa sin esperar a que la tarea concluya. En la mayoría de los casos, no
se espera ese comportamiento. Normalmente otros aspectos del método de llamada dependen de los resultados
de la llamada o, como mínimo, se espera que el método llamado se complete antes de volver del método que
contiene la llamada.
Otro problema igual de importante es lo que sucede con las excepciones que se producen en el método
asincrónico llamado. Una excepción que aparece en un método que devuelve un valor Task o Task<TResult> se
almacena en la tarea devuelta. Si no espera la tarea o comprueba explícitamente las excepciones, se perderá la
excepción. Si espera la tarea, su excepción se volverá a producir.
El procedimiento recomendado es esperar siempre la llamada.
De forma predeterminada, este mensaje es una advertencia. Para más información sobre cómo ocultar las
advertencias o cómo tratarlas como errores, vea Configuring Warnings in Visual Basic.
Identificador de error : BC42358
' Variable delay is used to slow down the called method so that you
' can distinguish between awaiting and not awaiting in the program's output.
' You can adjust the value to produce the output that this topic shows
' after the code.
Dim delay = 5000
' Call #3
' To contrast with an awaited call, replace the unawaited call
' (Call #1 or Call #2) with the following awaited call. The best
' practice is to await the call.
'Await CalledMethodAsync(delay)
ResultsTextBox.Text &= vbCrLf & " Entering called method, starting and awaiting Task.Delay."
' Slow the process down a little so you can distinguish between awaiting
' and not awaiting. Adjust the value for howLong if necessary.
Await Task.Delay(howLong)
ResultsTextBox.Text &= vbCrLf & " Task.Delay is finished--returning from called method."
End Function
En el ejemplo, si elige Call #1 o Call #2, el método asincrónico no esperado ( CalledMethodAsync ) termina después
de que se completen su llamador ( CallingMethodAsync ) y el llamador del llamador ( StartButton_Click ). La última
línea de la salida siguiente muestra cuándo finaliza el método llamado. La entrada y la salida del controlador de
eventos que llama a CallingMethodAsync en el ejemplo completo se marcan en la salida.
Ejemplo
La siguiente aplicación de Windows Presentation Foundation (WPF) contiene los métodos del ejemplo anterior. En
los pasos siguientes se configura la aplicación:
1. Cree una aplicación WPF y asígnele el nombre AsyncWarning .
2. En el Editor de código de Visual Studio, elija la pestaña MainWindow.xaml .
Si la pestaña no está visible, abra el menú contextual de MainWindow.xaml en el Explorador de
soluciones y elija Ver código .
3. Reemplace el código de la vista XAML de MainWindow. xaml por el código siguiente:
<Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Button x:Name="StartButton" Content="Start" HorizontalAlignment="Left" Margin="214,28,0,0"
VerticalAlignment="Top" Width="75" HorizontalContentAlignment="Center" FontWeight="Bold"
FontFamily="Aharoni" Click="StartButton_Click" />
<TextBox x:Name="ResultsTextBox" Margin="0,80,0,0" TextWrapping="Wrap" FontFamily="Lucida
Console"/>
</Grid>
</Window>
En la vista Diseño de MainWindow.xaml aparece una ventana simple que contiene un botón y un cuadro de
texto.
Para obtener más información sobre el Diseñador XAML, vea Tutorial: Crear una IU usando el Diseñador
XAML. Para obtener información sobre cómo crear su propia interfaz de usuario simple, vea las secciones
"To create a WPF application" (Para crear una aplicación WPF) y "To design a simple WPF MainWindow"
(Para diseñar una ventana MainWindow simple de WPF) de Walkthrough: Accessing the Web by Using
Async and Await (Tutorial: Acceso a la web usando async y await).
4. Reemplace el código en el archivo MainWindow.xaml.vb por el código siguiente.
Class MainWindow
' Variable delay is used to slow down the called method so that you
' can distinguish between awaiting and not awaiting in the program's output.
' You can adjust the value to produce the output that this topic shows
' after the code.
Dim delay = 5000
' Call #3
' To contrast with an awaited call, replace the unawaited call
' (Call #1 or Call #2) with the following awaited call. The best
' practice is to await the call.
'Await CalledMethodAsync(delay)
ResultsTextBox.Text &= vbCrLf & " Entering called method, starting and awaiting Task.Delay."
' Slow the process down a little so you can distinguish between awaiting
' and not awaiting. Adjust the value for howLong if necessary.
Await Task.Delay(howLong)
ResultsTextBox.Text &= vbCrLf & " Task.Delay is finished--returning from called method."
End Function
End Class
' Output
' Output
Vea también
Await (operador)
Programación asincrónica con Async y Await
No se puede convertir un tipo anónimo en un árbol
de expresión porque se utiliza una propiedad del tipo
para inicializar otra propiedad.
29/10/2019 • 2 minutes to read • Edit Online
El compilador no acepta la conversión de un tipo anónimo en un árbol de expresión cuando se usa una propiedad
del tipo anónimo para inicializar otra propiedad del tipo anónimo. Por ejemplo, en el código siguiente, Prop1 se
declara en la lista de inicialización y, a continuación, se utiliza como valor inicial de Prop2 .
Identificador de error : BC36548
Ejemplo
Module M2
Sub Main()
' The following line causes the error.
ExpressionExample(Function() New With {.Prop1 = 2, .Prop2 = .Prop1})
End Sub
End Module
Sub Main()
Dim temp = 2
ExpressionExample(Function() New With {.Prop1 = temp, .Prop2 = temp})
End Sub
Vea también
Tipos anónimos (Visual Basic)
Árboles de expresión (Visual Basic)
Cómo: usar árboles de expresión para generar consultas dinámicas (Visual Basic)
No se puede crear el componente ActiveX
31/10/2019 • 2 minutes to read • Edit Online
Intentó poner un control ActiveX en un formulario en el tiempo de diseño o agregar un formulario a un proyecto
con un control ActiveX en él, pero no se pudo encontrar la información asociada correspondiente en el Registro.
Vea también
Tipos de error
Hable con nosotros
No se puede hacer referencia a '<name > ' porque es
miembro del campo con tipo de valor '<name > ' de
la clase '<className > ' que tiene ' System.
MarshalByRefObject ' como clase base
27/11/2019 • 2 minutes to read • Edit Online
La clase System.MarshalByRefObject habilita las aplicaciones que admiten el acceso remoto a objetos en los límites
del dominio de aplicación. Los tipos deben heredar de la clase MarshalByRejectObject cuando el tipo se utiliza en
los límites del dominio de aplicación. No se debe copiar el estado del objeto porque los miembros del objeto no se
pueden usar fuera del dominio de aplicación en el que se crearon.
Identificador de error : BC30310
Vea también
MarshalByRefObject
Dim (instrucción)
No se puede hacer referencia a un miembro de
instancia de una clase desde un método compartido
o un inicializador de método compartido sin una
instancia explícita de la clase
27/11/2019 • 2 minutes to read • Edit Online
Ha intentado hacer referencia a un miembro no compartido de una clase desde un procedimiento compartido. En
el ejemplo siguiente se muestra este tipo de situación:
Class Sample
Public x as Integer
Public Shared Sub SetX()
x = 10
End Sub
End Class
En el ejemplo anterior, la instrucción de asignación x = 10 genera este mensaje de error. Esto se debe a que un
procedimiento compartido está intentando obtener acceso a una variable de instancia.
La variable x es un miembro de instancia porque no se ha declarado como Shared. Cada instancia de la clase
Sample contiene su propia variable individual x . Cuando una instancia establece o cambia el valor de x , no
afecta al valor de x en ninguna otra instancia.
Sin embargo, el procedimiento SetX se Shared entre todas las instancias de la clase Sample . Esto significa que no
está asociado a ninguna instancia de la clase, sino que funciona independientemente de las instancias individuales.
Dado que no tiene conexión con una instancia determinada, setX no puede tener acceso a una variable de
instancia. Debe funcionar solo en Shared variables. Cuando SetX establece o cambia el valor de una variable
compartida, el nuevo valor está disponible para todas las instancias de la clase.
Identificador de error : BC30369
3. Si desea que cada instancia tenga su propia copia individual del miembro, no especifique Shared para la
declaración de miembro. Quite la palabra clave Shared de la declaración de procedimiento.
Vea también
Shared
No se puede crear el archivo temporal necesario
23/10/2019 • 2 minutes to read • Edit Online
Está llena o la unidad que contiene el directorio especificado por la variable de entorno TEMP, o la variable de
entorno TEMP especifica un directorio o unidad no válida o de solo lectura.
Vea también
Tipos de error
No se puede abrir '<nombre de archivo > ' para
escritura
27/11/2019 • 2 minutes to read • Edit Online
No se puede abrir el archivo especificado para escribir en él, quizás porque ya se ha abierto.
Identificador de error : BC2012
Vea también
WriteAllText
WriteAllBytes
Escritura en archivos
No se encuentra la clase '<className > '
27/11/2019 • 2 minutes to read • Edit Online
No se encuentra la clase '<className > '. Esta situación suele ser consecuencia de un 'Microsoft.VisualBasic.dll'
discordante.
No se pudo encontrar un miembro definido.
Identificador de error : BC31098
Vea también
Hable con nosotros
Esta clase no admite automatización o no admite la
interfaz esperada
31/10/2019 • 2 minutes to read • Edit Online
La clase especificada en la llamada a la función GetObject o a la función CreateObject no ha expuesto una interfaz
de programación, o bien el proyecto se ha cambiado de .dll a .exe (o a la inversa).
Vea también
Tipos de error
Hable con nosotros
La instrucción 'Class' debe terminar con la instrucción
'End Class' correspondiente
23/10/2019 • 2 minutes to read • Edit Online
Class se usa para iniciar un Class bloquear; por lo tanto, solo puede aparecer al principio del bloque, con la
instrucción correspondiente End Class final del bloque de instrucción. O bien hay un redundantes Class
instrucción, o bien no ha terminado su Class bloque con End Class .
Identificador de error : BC30481
Vea también
End <palabra clave > instrucción
Class (instrucción)
Formato del Portapapeles no válido
23/10/2019 • 2 minutes to read • Edit Online
El formato de Portapapeles especificado no es compatible con el método que se está ejecutando. Entre las posibles
causas de este error son:
Usar el Portapapeles GetText o SetText método con un formato de Portapapeles distinto vbCFText o
vbCFLink .
Usar el Portapapeles GetData o SetData método con un formato de Portapapeles distinto vbCFBitmap ,
vbCFDIB , o vbCFMetafile .
Vea también
Portapapeles: agregar otros formatos
Expresión constante no se puede representar en el
tipo '<typename >'
23/10/2019 • 2 minutes to read • Edit Online
Está intentando evaluar una constante que no encaja en el tipo de destino, normalmente porque desborda el
intervalo.
Identificador de error : BC30439
Vea también
Información general sobre las constantes
Constantes y enumeraciones
Las constantes deben ser de tipo intrínseco o
enumerado; no pueden ser de tipo clase, estructura,
parámetro de tipo ni matriz
23/10/2019 • 2 minutes to read • Edit Online
Ha intentado declarar una constante como una clase, estructura o tipo de matriz, o como un parámetro de tipo
definido por un tipo genérico contenedor.
Las constantes deben ser de un tipo intrínseco ( Boolean , Byte , Date , Decimal , Double , Integer , Long , Object ,
SByte , Short , Single , String , UInteger , ULong , o UShort ), o un Enum tipo basado en uno de los tipos enteros.
Vea también
Constantes y enumeraciones
Tipos de datos
Tipos de datos
Constructor '<nombre >' no se puede llamar a sí
mismo
23/10/2019 • 2 minutes to read • Edit Online
Vea también
Duración del objeto: ¿Cómo se crean y destruyen objetos
Copiar el valor del parámetro 'ByRef'
'<parametername >' en el argumento coincidente
restringe del tipo '<typename1 >' al tipo
'<nombredetipo2 >'
23/10/2019 • 3 minutes to read • Edit Online
Si tiene que devolver un valor al argumento de llamada, defina el operador de conversión inversa como
Widening, si es posible.
Vea también
Procedimientos
Argumentos y parámetros de procedimiento
Paso de argumentos por valor y por referencia
Procedimientos de operadores
Operator (instrucción)
Cómo: Definir un operador
Cómo: Definir un operador de conversión
Conversiones de tipos en Visual Basic
Conversiones de ampliación y de restricción
El modificador 'Custom' no es válido en eventos
declarados sin tipos de delegado explícitos
23/10/2019 • 2 minutes to read • Edit Online
A diferencia de un evento no personalizado, un Custom Event declaración requiere un As cláusula después del
nombre de evento que se especifica explícitamente el tipo de delegado para el evento.
Los eventos no personalizados pueden ser definido con un As cláusula y explícita el tipo delegado, o con un
parámetro de lista inmediatamente después del nombre de evento.
Identificador de error : BC31122
2. Reemplazar la lista de parámetros del evento personalizado con un As cláusula que especifica el tipo de
delegado.
Continuando con el ejemplo, Custom Event declaración se volvería como sigue.
Ejemplo
Este ejemplo se declara un Custom Event y especifica los As cláusula con un tipo de delegado.
Vea también
Event (instrucción)
Delegate (instrucción)
Eventos
Los tipos de datos de los parámetros de tipo no se
pueden inferir de estos argumentos
23/10/2019 • 2 minutes to read • Edit Online
Los tipos de datos de los parámetros de tipo no se pueden inferir de estos argumentos. Especificar los tipos de
datos explícitamente puede corregir este error.
Este error se produce cuando en caso de error en la resolución de sobrecarga. Se produce como un mensaje
subordinado que indica por qué se ha eliminado un candidato de sobrecarga determinado. El mensaje de error
explica que el compilador no puede usar la inferencia de tipos para buscar tipos de datos para los parámetros de
tipo.
NOTE
Al especificar argumentos no es una opción (por ejemplo, para operadores de consulta en expresiones de consulta), el
mensaje de error aparece sin la segunda oración.
Module Module1
Sub Main()
End Sub
End Module
Interface InterfaceExample(Of T)
End Interface
Vea también
Conversión de delegado flexible
Generic Procedures in Visual Basic
Conversiones de tipos en Visual Basic
Se esperaba una declaración
23/10/2019 • 2 minutes to read • Edit Online
Una instrucción no declarativa, como una asignación o una instrucción del bucle, se produce fuera de cualquier
procedimiento. Sólo se permiten declaraciones procedimientos externos.
Como alternativa, se declara un elemento de programación sin una palabra clave como Dim o Const .
Identificador de error : BC30188
Vea también
Procedimientos
Dim (instrucción)
Propiedad predeterminada '<nombrepropiedad1 >'
entra en conflicto con la propiedad predeterminada
'<nombrepropiedad2 >' en '<classname >', por lo
que se debe declarar como 'Shadows'
23/10/2019 • 2 minutes to read • Edit Online
Se declara una propiedad con el mismo nombre que una propiedad definida en la clase base. En esta situación, la
propiedad de esta clase debe ocultar la propiedad de clase base.
Este mensaje es una advertencia. De forma predeterminada, se da por supuesto que es Shadows . Para más
información sobre cómo ocultar las advertencias o cómo tratarlas como errores, vea Configuring Warnings in
Visual Basic.
Identificador de error : BC40007
Vea también
Shadows
Sombrear en Visual Basic
El acceso a la propiedad predeterminada es ambiguo
entre los miembros heredados de la interfaz '
<defaultpropertyname > ' de la interfaz '
<interfacename1 > ' y ' <defaultpropertyname > ' de
la interfaz ' <interfacename2 > '
23/10/2019 • 2 minutes to read • Edit Online
Una interfaz hereda de dos interfaces, cada una de las cuales declara una propiedad predeterminada con el mismo
nombre. El compilador no puede resolver un acceso a esta propiedad predeterminada sin calificación. Esto se
ilustra en el siguiente ejemplo:
Cuando se especifica testObj(1) , el compilador intenta resolverlo en la propiedad predeterminada. Sin embargo,
hay dos propiedades predeterminadas posibles debido a las interfaces heredadas, por lo que el compilador señala
este error.
IDENTIFICADOR de error : BC30686
O bien
Implemente la interfaz heredada en una clase. A continuación, puede implementar cada una de las
propiedades heredadas con nombres diferentes. Sin embargo, solo uno de ellos puede ser la propiedad
predeterminada de la clase de implementación. Esto se ilustra en el siguiente ejemplo:
Public Class useIface3
Implements Iface3
Default Public Property prop1(ByVal arg As Integer) As Integer Implements Iface1.prop
' Insert code to define Get and Set procedures for prop1.
End Property
Public Property prop2(ByVal arg As Integer) As Integer Implements Iface2.prop
' Insert code to define Get and Set procedures for prop2.
End Property
End Class
Vea también
Interfaces
Clase delegada<classname >' no tiene ningún
método Invoke, por lo que una expresión de este tipo
no puede ser el destino de una llamada al método
23/10/2019 • 2 minutes to read • Edit Online
Una llamada a Invoke a través de un delegado ha fallado porque Invoke no está implementado en la clase de
delegado.
Identificador de error : BC30220
Vea también
Delegados
Delegate (instrucción)
AddressOf (operador)
Dim (instrucción)
Las clases derivadas no pueden provocar eventos de
clase base
23/10/2019 • 2 minutes to read • Edit Online
Un evento puede generarse solo desde el espacio de declaración en el que se declara. Por lo tanto, una clase no
puede provocar los eventos de cualquier otra clase, incluso uno desde el que se deriva.
Identificador de error : BC30029
Vea también
Event (instrucción)
RaiseEvent (instrucción)
Error de E/S del dispositivo
23/10/2019 • 2 minutes to read • Edit Online
Se produjo un error de entrada o salido mientras el programa estaba usando un dispositivo como una impresora o
unidad de disco.
Vea también
Tipos de error
Se debe llamar primero a la función 'Dir' con un
argumento 'Pathname'
23/10/2019 • 2 minutes to read • Edit Online
Una llamada inicial a la Dir función no incluye el PathName argumento. La primera llamada a Dir debe incluir un
PathName , las llamadas posteriores, pero a Dir no es necesario incluir parámetros para recuperar el elemento
siguiente.
Vea también
Dir
Se esperaba el fin de instrucción
23/10/2019 • 2 minutes to read • Edit Online
La instrucción es sintácticamente completa, pero un elemento de programación adicional sigue al elemento que se
complete la instrucción. Falta un terminador de línea al final de cada instrucción.
Un terminador de línea divide los caracteres de un archivo de código fuente de Visual Basic en líneas. Ejemplos de
terminadores de línea son el Unicode carro devuelto carácter (& HD), el Unicode avance de línea carácter (& alta
disponibilidad), y seguido del carácter de avance de línea Unicode del carácter de retorno de carro Unicode. Para
obtener más información acerca de los terminadores de línea, consulte el especificación del lenguaje Visual Basic.
Identificador de error : BC30205
Vea también
Cómo: Interrumpir y combinar instrucciones en código
Instrucciones
Error al crear el manifiesto del ensamblado: <mensaje
de error >
31/10/2019 • 2 minutes to read • Edit Online
El compilador Visual Basic llama a Assembly Linker (al. exe, también conocido como ALink) para generar un
ensamblado con un manifiesto. El vinculador ha informado de un error en una fase previa a la emisión de la
creación del ensamblado.
Esto puede suceder si existen problemas con el archivo de clave o el contenedor de claves especificado. Para firmar
completamente un ensamblado, debe proporcionar un archivo de clave válido que contenga información sobre las
claves pública y privada. Para retrasar la firma de un ensamblado, debe activar la casilla Retrasar solo firma y
proporcionar un archivo de clave válido que contenga información sobre la clave pública. La clave privada no es
necesaria cuando un ensamblado tiene la firma retrasada. Para obtener más información, vea Cómo: Firmar un
ensamblado con un nombre seguro.
Identificador de error : BC30140
Vea también
Cómo: Firmar un ensamblado con un nombre seguro
Página Firma, Diseñador de proyectos
Al. exe
Hable con nosotros
Error al crear recursos Win32: <mensaje de error >
31/10/2019 • 2 minutes to read • Edit Online
El compilador Visual Basic llama a Assembly Linker (al. exe, también conocido como ALink) para generar un
ensamblado con un manifiesto. El vinculador ha informado de un error al crear un recurso en memoria. Esto podría
deberse a un problema con el entorno o a que el equipo tiene poca memoria.
Identificador de error : BC30136
Vea también
Al. exe
Hable con nosotros
Error al cargar la biblioteca DLL (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Una biblioteca de vínculos dinámicos (DLL) es una biblioteca especificada en la cláusula Lib de una instrucción
Declare . Entre las posibles causas de este error se incluyen:
Vea también
Declare (instrucción)
Error al guardar el archivo de recursos de Win32
temporal '<nombreDeArchivo > ': mensaje de error
de <
31/10/2019 • 2 minutes to read • Edit Online
El compilador Visual Basic llama a Assembly Linker (al. exe, también conocido como ALink) para generar un
ensamblado con un manifiesto. El vinculador ha informado de un error al obtener un nombre de archivo para
usarlo para escribir en un recurso en memoria.
Identificador de error : BC30137
Vea también
Al. exe
Hable con nosotros
Se produjeron errores al compilar los esquemas XML
del proyecto
23/10/2019 • 2 minutes to read • Edit Online
Se produjeron errores al compilar los esquemas XML en el proyecto. Por este motivo, IntelliSense XML no está
disponible.
Hay un error en un esquema de definición de esquemas XML (XSD) incluido en el proyecto. Este error se produce
cuando se agrega un archivo de esquema (.xsd) de XSD que entra en conflicto con el esquema XSD existente
configurado para el proyecto.
Identificador de error : BC36810
Vea también
Lista de errores (Ventana)
XML
Se superó el tiempo de espera de evaluación de la
expresión o instrucción
31/10/2019 • 2 minutes to read • Edit Online
Vea también
Depurar en Visual Studio
Evento '<eventname1 >' no se puede implementar el
evento '<eventname2 >' en la interfaz '<interfaz >'
porque sus tipos de delegado<delegate1 >' y
'<delegate2 >' no coinciden
23/10/2019 • 2 minutes to read • Edit Online
Visual Basic no puede implementar un evento porque el tipo de delegado del evento no coincide con el tipo de
delegado del evento en la interfaz. Este error puede producirse cuando define varios eventos en una interfaz e
intenta implementarlos juntos con el mismo evento. Un evento puede implementar dos o más eventos solo si
todos los eventos implementados se declaran con la sintaxis As y si se especifica el mismo tipo delegado.
Identificador de error : BC31423
Vea también
Event (instrucción)
Delegate (instrucción)
Eventos
Los eventos no se pueden declarar con un tipo
delegado que tenga un tipo de valor devuelto
23/10/2019 • 2 minutes to read • Edit Online
Vea también
Eventos
Los métodos no compartidos no pueden controlar los
eventos de variables WithEvents compartidas
23/10/2019 • 2 minutes to read • Edit Online
Una variable declarada con el Shared modificador es una variable compartida. Una variable compartida identifica
exactamente una ubicación de almacenamiento. Una variable declarada con el WithEvents modificador afirma que
el tipo al que pertenece la variable controla el conjunto de eventos que provoca la variable. Cuando se asigna un
valor a la variable, la propiedad creada por el WithEvents declaración modo se desenlaza cualquier controlador de
eventos existente y enlaza el nuevo controlador de eventos a través de la Add método.
Identificador de error : BC30594
Vea también
Shared
WithEvents
La expresión no genera un valor
23/10/2019 • 2 minutes to read • Edit Online
Ha intentado usar una expresión que no genera un valor en un contexto que genera valores, como la llamada a un
Sub en un contexto donde un Function se espera.
Vea también
Tipos de error
Expresión tiene el tipo '<typename >' que es un tipo
restringido y no se puede usar para tener acceso a
miembros heredados de 'Object' o 'ValueType'
23/10/2019 • 2 minutes to read • Edit Online
Una expresión se evalúa como un tipo que no se puede realizar la conversión boxing por common language
runtime (CLR), pero tiene acceso a un miembro que requiere la conversión boxing.
Laconversión boxing hace referencia al procesamiento necesario para convertir un tipo a Object o, en ocasiones, a
ValueType. Common language runtime no puede encerrar ciertos tipos de estructura, por ejemplo ArgIterator,
RuntimeArgumentHandle, y TypedReference.
Esta expresión intenta utilizar el tipo restringido para llamar a un método heredado de Object o ValueType, tales
como GetHashCode o ToString. Para obtener acceso a este método, Visual Basic ha intentado una conversión
boxing implícita que produce este error.
Identificador de error : BC31393
Vea también
Conversiones implícitas y explícitas
La expresión es un valor y, por lo tanto, no puede ser
destino de una asignación
23/10/2019 • 2 minutes to read • Edit Online
Una instrucción intenta asignar un valor a una expresión. Solo puede asignar un valor a una variable, propiedad o
elemento de matriz de escritura en tiempo de ejecución. En el ejemplo siguiente se muestra cómo se puede
producir este error.
La última instrucción del ejemplo anterior produce un error porque solo crea una asignación temporal para la Point
estructura devuelta por Location la propiedad. Una estructura es un tipo de valor y la estructura temporal no se
conserva después de que se ejecute la instrucción. El problema se resuelve declarando y usando una variable para
Location, lo que crea una asignación más permanente para Point la estructura. En el ejemplo siguiente se muestra
código que puede reemplazar la última instrucción del ejemplo anterior.
Expresión de tipo <tipo > no es consultable. Asegúrese de que no falta una importación de espacio de nombres o
de referencia de ensamblado para el proveedor LINQ.
Puede consultables tipos se definen en el System.Linq, System.Data.Linq, y System.Xml.Linq espacios de nombres.
Debe importar uno o varios de estos espacios de nombres para realizar consultas LINQ.
El System.Linq espacio de nombres permite a los objetos de consulta como colecciones y matrices mediante LINQ.
El System.Data.Linq espacio de nombres le permite consultar los conjuntos de datos de ADO.NET y las bases de
datos de SQL Server mediante LINQ.
El System.Xml.Linq espacio de nombres le permite consultar XML con LINQ y usar características XML en Visual
Basic.
Identificador de error : BC36593
Vea también
System.Linq
System.Data.Linq
System.Xml.Linq
Introducción a LINQ en Visual Basic
LINQ
XML
Referencias y la instrucción Imports
Imports (instrucción), espacio de nombres y tipo .NET
Página Referencias, Diseñador de proyectos (Visual Basic)
La expresión llama de forma recursiva a la propiedad
contenedora '<PropertyName > '
23/11/2019 • 2 minutes to read • Edit Online
Una instrucción en el procedimiento Set de una definición de propiedad almacena un valor en el nombre de la
propiedad.
El enfoque recomendado para contener el valor de una propiedad es definir una variable Private en el contenedor
de la propiedad y utilizarla en los procedimientos Get y Set . A continuación, el procedimiento Set debe
almacenar el valor entrante en esta variable Private .
El procedimiento Get se comporta como un procedimiento Function , por lo que puede asignar un valor al
nombre de la propiedad y devolver el control al encontrar la instrucción End Get . Sin embargo, el enfoque
recomendado consiste en incluir la variable Private como valor en una instrucción return.
El procedimiento Set se comporta como un procedimiento Sub , que no devuelve ningún valor. Por lo tanto, el
nombre del procedimiento o de la propiedad no tiene ningún significado especial dentro de un procedimiento de
Set , y no se puede almacenar un valor en él.
En el ejemplo siguiente se muestra el enfoque que puede producir este error, seguido del enfoque recomendado.
De forma predeterminada, este mensaje es una advertencia. Para más información sobre cómo ocultar las
advertencias o cómo tratarlas como errores, vea Configuring Warnings in Visual Basic.
Identificador de error : BC42026
Vea también
Procedimientos de propiedades
Property (instrucción)
Set (instrucción)
Expresión demasiado compleja
23/10/2019 • 2 minutes to read • Edit Online
Vea también
Operadores y expresiones
El atributo 'Extension' sólo se puede aplicar a las
declaraciones 'Module', 'Sub' o 'Function'
23/10/2019 • 2 minutes to read • Edit Online
La única manera de extender un tipo de datos en Visual Basic es definir un método de extensión dentro de un
módulo estándar. El método de extensión puede ser un procedimiento Sub o un procedimiento Function . Todos
los métodos de extensión se deben marcar con el atributo de extensión, <Extension()> , del espacio de nombres
System.Runtime.CompilerServices. Opcionalmente, un módulo que contiene un método de extensión se puede
marcar de la misma manera. Ningún otro uso del atributo de extensión es válido.
Identificador de error : BC36550
Ejemplo
En el ejemplo siguiente se define un método Print para el tipo de datos String .
Imports StringUtility
Imports System.Runtime.CompilerServices
Namespace StringUtility
<Extension()>
Module StringExtensions
<Extension()>
Public Sub Print (ByVal str As String)
Console.WriteLine(str)
End Sub
End Module
End Namespace
Vea también
Información general de atributos
Métodos de extensión
Module (instrucción)
Archivo ya abierto
23/10/2019 • 2 minutes to read • Edit Online
A veces se debe cerrar un archivo antes que otro FileOpen o puede producirse otra operación. Entre las causas
posibles de este error se incluyen:
Modo de salida secuencial FileOpen ejecutó la operación para un archivo que ya está abierto
La instrucción hace referencia a un archivo abierto.
Vea también
FileOpen
Archivo demasiado grande para su lectura en una
matriz de bytes
23/10/2019 • 2 minutes to read • Edit Online
El tamaño del archivo que está intentando leer en una matriz de bytes supera los 4 GB. El
My.Computer.FileSystem.ReadAllBytes método no puede leer un archivo que supera este tamaño.
Vea también
ReadAllBytes
StreamReader
Acceso a archivos con Visual Basic
Cómo: Leer texto de archivos con StreamReader
No se encontró el nombre del archivo o de la clase
durante la operación de automatización (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
No se encontró el nombre especificado para el nombre de archivo o la clase en una llamada a la función de
GetObject .
Vea también
Tipos de error
No se encuentra el archivo (error en tiempo de
ejecución de Visual Basic)
23/10/2019 • 2 minutes to read • Edit Online
No se encontró el archivo que se especifique. El error tiene las siguientes causas posibles:
La instrucción hace referencia a un archivo que no existe.
Se ha intentado llamar a un procedimiento en una biblioteca de vínculos dinámicos (DLL), pero la biblioteca
especificada en el Lib cláusula de la Declare no se encuentra la instrucción.
Se intentó abrir un proyecto o cargar un archivo de texto que no existe.
Vea también
Declare (instrucción)
El primer operando de una expresión 'If' binaria debe
ser un tipo que acepte valores NULL o un tipo de
referencia
27/03/2020 • 2 minutes to read • Edit Online
Una If expresión puede tomar dos o tres argumentos. Cuando se envían solo dos argumentos, el primer
argumento debe ser un tipo de referencia o un tipo de valor que acepta valores NULL. Si el primer argumento se
Nothing evalúa como algo distinto de , se devuelve su valor. Si el primer argumento Nothing se evalúa como , se
evalúa y devuelve el segundo argumento.
Por ejemplo, el código If siguiente contiene dos expresiones, una con tres argumentos y otra con dos
argumentos. Las expresiones calculan y devuelven el mismo valor.
Dim choice1 = 4
Dim choice2 = 5
Dim booleanVar = True
ID de error : BC33107
Vea también
Operador If
Instrucción If...Then...Else
Tipos de valores que aceptan valores NULL
La primera instrucción de este 'Sub New' debe ser
una llamada a 'MyBase.New' o 'MyClass.New'
(constructor no accesible sin parámetros)
23/10/2019 • 2 minutes to read • Edit Online
La primera instrucción de este 'Sub New' debe ser una llamada a 'MyBase.New' o 'MyClass.New' porque clase
base<basename >' de '<derivedname >' no tiene un 'Sub New' accesible que se puede llamar sin argumentos.
En una clase derivada, cada constructor debe llamar a un constructor de clase base ( MyBase.New ). Si la clase base
tiene un constructor sin parámetros accesible para las clases derivadas, MyBase.New se puede llamar de forma
automática. Si no es así, debe llamar a un constructor de clase base con parámetros y no puede realizarse
automáticamente. En este caso, la primera instrucción de cada constructor de clase derivada debe llamar a un
constructor con parámetros en la clase base, o llamar a otro constructor en la clase derivada que realiza un
constructor de clase base llamada.
Identificador de error : BC30148
Vea también
Fundamentos de la herencia
La primera instrucción de este 'Sub New' debe ser
una llamada explícita a 'MyBase.New' o
'MyClass.New' porque el '<nombreconstructor >' en
la clase base<nombredeclasebase >' de
'<derivedclassname >' está marcado como obsoleto:
'< ErrorMessage >'
23/10/2019 • 2 minutes to read • Edit Online
Un constructor de clase no realiza una llamada de manera explícita a un constructor de clase base y el constructor
de clase base se marca con el atributo ObsoleteAttribute y la directiva para tratarlo como un error.
Cuando un constructor de clase derivada no llama a un constructor de clase base, Visual Basic intenta generar una
llamada implícita a un constructor de clase base sin parámetros. Si no hay ningún constructor accesible en la clase
base que se pueda llamar sin argumentos, Visual Basic no se puede generar una llamada implícita. En este caso, el
constructor necesario se marca con el ObsoleteAttribute atributo, por lo que Visual Basic no puede llamarlo.
Para marcar que cualquier elemento de programación ya no está en uso, aplíquele ObsoleteAttribute . Si lo hace,
puede establecer la propiedad IsError del atributo en True o False . Si se establece en True , el compilador trata
como un error los intentos de usar el elemento. Si se establece en False o se deja el valor predeterminado False ,
el compilador emite una advertencia si se produce un intento de usar el elemento.
Identificador de error : BC30920
Vea también
Información general de atributos
'For Each' en el tipo '<typename >' es ambigua
porque el tipo implementa varias creaciones de
instancias de 'IEnumerable (Of T)'
23/10/2019 • 2 minutes to read • Edit Online
Un For Each instrucción especifica una variable de iterador que tiene más de un GetEnumerator método.
La variable de iterador debe ser de un tipo que implementa el System.Collections.IEnumerable o
System.Collections.Generic.IEnumerable<T> interfaz en uno de los Collections espacios de nombres de .NET
Framework. Es posible que una clase implementar más de una interfaz genérica construida, con un argumento de
tipo diferente para cada construcción. Si se usa una clase que hace esto para la variable de iterador, esa variable
tiene más de un GetEnumerator método. En tal caso, Visual Basic no puede elegir qué método va a llamar.
Identificador de error : BC32096
Vea también
For Each...Next (instrucción)
Interfaces
La referencia de <referencia de ensamblado de
confianza > no es válida
23/10/2019 • 2 minutes to read • Edit Online
La referencia de <referencia de ensamblado de confianza > no es válida. Los ensamblados con signo de nombre
seguro deben especificar una clave pública en las declaraciones InternalsVisibleTo.
El nombre de ensamblado pasado InternalsVisibleToAttribute al constructor de atributos identifica un ensamblado
con nombre seguro, pero no incluye PublicKey un atributo.
IDENTIFICADOR de error : BC31535
Vea también
AssemblyName
Ensamblados de confianza
Función '<NombreDeProcedimiento >' no devuelve
un valor en todas las rutas de código
23/10/2019 • 2 minutes to read • Edit Online
Función '<NombreDeProcedimiento >' no devuelve un valor en todas las rutas de código. ¿Falta alguna instrucción
'Return'?
Un Function procedimiento tiene al menos una ruta de acceso posibles a través de su código que no devuelve un
valor.
Puede devolver un valor desde un Function procedimiento en cualquiera de las maneras siguientes:
Incluya el valor en un instrucción Return.
Asigne el valor para el Function procedimiento asigne un nombre y, a continuación, realizar un
Exit Function instrucción.
Si el control se transfiere a Exit Function o End Function y no ha asignado ningún valor para el nombre del
procedimiento, el procedimiento devuelve el valor predeterminado del tipo de datos devuelto. Para obtener más
información, vea "Comportamiento" en instrucción Function.
De forma predeterminada, este mensaje es una advertencia. Para obtener más información sobre cómo ocultar las
advertencias o cómo tratarlas como errores, vea Configuring Warnings in Visual Basic.
Identificador de error : BC42105
Vea también
Procedimientos de función
Function (instrucción)
Página Compilación, Diseñador de proyectos (Visual Basic)
Se deshabilitó la evaluación de funciones porque se
excedió el tiempo de espera de una evaluación de
funciones anterior
31/10/2019 • 2 minutes to read • Edit Online
La evaluación de la función está deshabilitada porque se agotó el tiempo de espera de evaluación de la función
anterior. Para volver a habilitar la evaluación de funciones, vuelva a ejecutar el paso o reinicie la depuración.
En el depurador de Visual Studio, una expresión especifica una llamada a procedimiento, pero otra evaluación ha
agotado de tiempo de espera.
Las posibles causas de que se agote el tiempo de espera de una llamada a un procedimiento incluyen un bucle
infinito o un bucle sin fin. Para obtener más información, vea para... Instrucción siguiente.
Un caso especial de un bucle infinito es la recursividad. Para obtener más información, vea procedimientos
recursivos.
Identificador de error : BC30957
Vea también
Depurar en Visual Studio
Desplazarse por el código con el depurador
Los parámetros genéricos utilizados como tipos de
parámetros opcionales deben tener restricción de
clase
23/10/2019 • 2 minutes to read • Edit Online
Se declara un procedimiento con un parámetro opcional que se utiliza un parámetro de tipo que no esté
restringido a ser un tipo de referencia.
Siempre debe proporcionar un valor predeterminado para cada parámetro opcional. Si el parámetro es de un tipo
de referencia, el valor opcional debe ser Nothing , que es un valor válido para cualquier tipo de referencia. Sin
embargo, si el parámetro es de un tipo de valor, ese tipo debe ser un tipo de datos básico predefinido por Visual
Basic. Esto es porque un tipo de valor compuesto, como una estructura definida por el usuario, no tiene ningún
valor predeterminado válido.
Cuando se usa un parámetro de tipo para un parámetro opcional, debe garantizar que es de un tipo de referencia
para evitar la posibilidad de un tipo de valor no tiene ningún valor predeterminado válido. Esto significa que debe
restringir el parámetro de tipo con el Class palabra clave o con el nombre de una clase específica.
Identificador de error : BC32124
Vea también
Generic Types in Visual Basic
Lista de tipos
Class (instrucción)
Parámetros opcionales
Estructuras
Nothing
'Get' descriptor de acceso de propiedad
'<propertyname >' no es accesible
23/10/2019 • 2 minutes to read • Edit Online
Una instrucción intenta recuperar el valor de una propiedad cuando no tiene acceso a la propiedad Get
procedimiento.
Si el Get Statement está marcada con un acceso más restrictivo nivel que su Property Statement, podría producirse
un error de un intento de leer el valor de propiedad en los casos siguientes:
El Get instrucción está marcada como privada y el código de llamada está fuera de la clase o estructura en
la que se define la propiedad.
El Get instrucción está marcada como Protected y el código de llamada no está en la clase o estructura en la
que se define la propiedad, ni en una clase derivada.
El Get instrucción está marcada como Friend y el código de llamada no está en el mismo ensamblado en el
que se define la propiedad.
Identificador de error : BC31103
Vea también
Procedimientos de propiedades
Cómo: Declarar una propiedad con niveles de acceso mixtos
La cláusula Handles requiere una variable WithEvents
definida en el tipo contenedor o en uno de sus tipos
base
23/10/2019 • 2 minutes to read • Edit Online
No proporcionó una variable WithEvents en la cláusula Handles . La palabra clave Handles al final de una
declaración de procedimiento hace que controle los eventos generados por una variable de objeto declarada
mediante la palabra clave WithEvents .
Identificador de error : BC30506
Ejemplo
En el ejemplo siguiente, Visual Basic genera BC30506 de error del compilador porque la palabra clave WithEvents
no se utiliza en la definición de la instancia de System.Timers.Timer.
Imports System.Timers
Module Module1
Private _timer1 As New Timer() With {.Interval = 1000, .Enabled = True}
Sub Main()
Console.WriteLine("Press any key to start the timer...")
Console.ReadKey()
_timer1.Start()
Console.ReadKey()
End Sub
El ejemplo siguiente se compila correctamente porque la variable _timer1 se define con la palabra clave
WithEvents :
Imports System.Timers
Module Module1
Private WithEvents _timer1 As New Timer() With {.Interval = 1000}
Sub Main()
Console.WriteLine("Press any key to start the timer...")
Console.ReadKey()
_timer1.Start()
Console.ReadKey()
End Sub
End Module
Vea también
Handles
Se esperaba un identificador
23/10/2019 • 2 minutes to read • Edit Online
Vea también
Nombres de elementos declarados
Información general de atributos
El identificador es demasiado largo
23/10/2019 • 2 minutes to read • Edit Online
El nombre o identificador de cada elemento de programación se limita a 1023 caracteres. Además, un nombre
completo no puede superar los 1023 caracteres. Esto significa que la cadena de identificador completa (
<namespace>.<...>.<namespace>.<class>.<element> ) no puede tener más de 1023 caracteres, incluido el operador de
acceso a miembros ( . ) caracteres.
Identificador de error : BC30033
Vea también
Nombres de elementos declarados
Se esperaba un inicializador
23/10/2019 • 2 minutes to read • Edit Online
Ha intentado declarar una instancia de una clase con un inicializador de objeto en el que la lista de inicialización
está vacía, tal como se muestra en el ejemplo siguiente.
' Not valid.
Al menos un campo o propiedad se debe inicializar en la lista de inicializadores, como se muestra en el ejemplo
siguiente.
Dim aStudent As New Student With {.year = "Senior"}
Vea también
Inicializadores de objeto: Tipos con nombre y anónimos
Cómo: Declarar un objeto usando un inicializador de objeto
Se sobrepasó el final del archivo
23/10/2019 • 2 minutes to read • Edit Online
Ya sea un Input instrucción está leyendo desde un archivo que está vacío o uno en el que todos los datos se usa o
ha usado el EOF función con un archivo abierto para acceso binario.
Vea también
Input
EOF
Seek
Loc
Se produjo un error interno en <ubicación >
31/10/2019 • 2 minutes to read • Edit Online
Se ha producido un error interno. La línea en la que se produjo está incluida en el mensaje de error.
Vea también
Conceptos básicos del depurador
Conversión implícita de '<typename1 >' a
'<nombredetipo2 >' en copiar el valor del parámetro
'ByRef' '<parametername >' en el argumento
correspondiente.
23/10/2019 • 2 minutes to read • Edit Online
Se llama a un procedimiento con un ByRef argumento de un tipo diferente del parámetro correspondiente.
Si se pasa un argumento ByRef , Visual Basic a veces copia el valor del argumento en una variable local en el
procedimiento en lugar de pasar una referencia. En tal caso, cuando el procedimiento vuelve, Visual Basic debe, a
continuación, copiar el valor de la variable local en el argumento en el código de llamada.
Si un valor de argumento ByRef se copia en el procedimiento y el argumento y el parámetro son del mismo tipo,
no es necesario realizar ninguna conversión. Pero si los tipos son diferentes, Visual Basic debe convertir en ambas
direcciones. Dado que no se puede usar CType o cualquiera de las otras palabras clave de conversión en un
argumento de procedimiento o parámetro, dicha conversión siempre es implícito.
De forma predeterminada, este mensaje es una advertencia. Para obtener más información sobre cómo ocultar las
advertencias o cómo tratarlas como errores, vea Configuring Warnings in Visual Basic.
Identificador de error : BC41999
Vea también
Procedimientos
Argumentos y parámetros de procedimiento
Paso de argumentos por valor y por referencia
Conversiones implícitas y explícitas
'Is' requiere operandos que tienen tipos de referencia,
pero este operando tiene el tipo de valor '<typename
>'
23/10/2019 • 2 minutes to read • Edit Online
El Is operador de comparación determina si dos variables de objeto hacen referencia a la misma instancia. Esta
comparación no está definida para los tipos de valor.
Identificador de error : BC30020
Vea también
Is (operador)
Like (operador)
Operadores de comparación
El operando 'IsNot' de tipo 'nombreDeTipo' solo se
puede comparar con 'Nothing', porque
'nombreDeTipo' es un tipo que acepta valores NULL
27/03/2020 • 2 minutes to read • Edit Online
Una variable declarada como un tipo de valor que Nothing acepta IsNot valores NULL se ha comparado con una
expresión que no sea el uso del operador.
ID de error : BC32128
End If
End If
Vea también
Tipos de valores que aceptan valores NULL
Operador IsNot
Las etiquetas que son números deben ir seguidas de
dos puntos
23/10/2019 • 2 minutes to read • Edit Online
Los números de línea siguen las mismas reglas que otros tipos de etiquetas y deben contener un signo de dos
puntos.
IDENTIFICADOR de error : BC30801
400: X += 1
Vea también
GoTo (instrucción)
La expresión lambda no se quitará de este
controlador de eventos
23/10/2019 • 2 minutes to read • Edit Online
La expresión lambda no se quitará de este controlador de eventos. Asigne la expresión lambda a una variable y use
la variable para agregar y quitar el evento.
Cuando se usan expresiones lambda con controladores de eventos, es posible que no vea el comportamiento que
espera. El compilador genera un nuevo método para cada definición de expresión lambda, incluso si son idénticos.
Por lo tanto, el código siguiente muestra False .
Module Module1
Sub Main()
Dim fun1 As ChangeInteger = Function(p As Integer) p + 1
Dim fun2 As ChangeInteger = Function(p As Integer) p + 1
Console.WriteLine(fun1 = fun2)
End Sub
End Module
Cuando se usan expresiones lambda con controladores de eventos, esto puede provocar resultados inesperados. En
el ejemplo siguiente, la instrucción RemoveHandler no quita la expresión lambda agregada por AddHandler .
Module Module1
Sub Main()
End Sub
End Module
De forma predeterminada, este mensaje es una advertencia. Para más información sobre cómo ocultar las
advertencias o tratarlas como errores, vea Configuring Warnings in Visual Basic.
Identificador de error : BC42326
Sub Main()
' Use the variable again when you want to remove the listener.
RemoveHandler ProcessInteger, PrintHandler
End Sub
End Module
Vea también
Expresiones lambda
Conversión de delegado flexible
Eventos
Las expresiones lambda no son válidas en la primera
expresión de una instrucción 'Select Case'
23/10/2019 • 2 minutes to read • Edit Online
No se puede usar una expresión lambda para la expresión de prueba en un Select Case instrucción. Definiciones
de la expresión lambda que devuelven las funciones y la expresión de prueba de un Select Case instrucción debe
ser un tipo de datos básico.
El código siguiente provoca este error:
Vea también
Expresiones lambda
If...Then...Else (instrucción)
Select...Case (instrucción)
Resolución enlazada tempranamente; pueden
producirse errores en tiempo de ejecución
23/10/2019 • 2 minutes to read • Edit Online
Vea también
Enlace en tiempo de compilación y en tiempo de ejecución
Declaración de variables de objeto
La resolución de sobrecarga enlazada
tardíamente<no se puede aplicar a '
nombreprocedimiento > ' porque la instancia de
acceso es un tipo de interfaz
23/10/2019 • 3 minutes to read • Edit Online
El compilador está intentando resolver una referencia a una propiedad o procedimiento sobrecargado, pero se
produce un error en la referencia porque Object un argumento es de tipo y el objeto de referencia tiene el tipo de
datos de una interfaz. El Object argumento obliga al compilador a resolver la referencia como enlazada en tiempo
de ejecución.
En estas circunstancias, el compilador resuelve la sobrecarga a través de la clase de implementación en lugar de a
través de la interfaz subyacente. Si la clase cambia el nombre de una de las versiones sobrecargadas, el compilador
no considera que la versión es una sobrecarga porque su nombre es diferente. Esto, a su vez, hace que el
compilador omita la versión a la que se ha cambiado el nombre cuando podría haber sido la opción correcta para
resolver la referencia.
IDENTIFICADOR de error : BC30933
Ejemplo
En el ejemplo siguiente se muestra una llamada a un Sub procedimiento sobrecargado que produce este error en
tiempo de compilación.
Module m1
Interface i1
Sub s1(ByVal p1 As Integer)
Sub s1(ByVal p1 As Double)
End Interface
Class c1
Implements i1
Public Overloads Sub s1(ByVal p1 As Integer) Implements i1.s1
End Sub
Public Overloads Sub s2(ByVal p1 As Double) Implements i1.s1
End Sub
End Class
Sub Main()
Dim refer As i1 = New c1
Dim o1 As Object = 3.1415
' The following reference is INVALID and causes a compiler error.
refer.s1(o1)
End Sub
End Module
En el ejemplo anterior, si el compilador permitía s1 la llamada a como escrita, la resolución se realizaría c1 a
través de la clase i1 en lugar de la interfaz. Esto significa que el compilador no tendría s2 en cuenta porque su
nombre es c1 diferente en, aunque es la opción i1 correcta tal y como se define en.
Puede corregir el error cambiando la llamada a cualquiera de las siguientes líneas de código:
refer.s1(CType(o1, Integer))
refer.s1(CType(o1, Double))
Cada una de las líneas de código anteriores convierte explícitamente Object la o1 variable a uno de los tipos de
parámetros definidos para las sobrecargas.
Vea también
Sobrecarga de procedimientos
Resolución de sobrecargas
Función CType
'.' o '!' inicial sólo puede aparecer dentro de una
instrucción 'With'
23/10/2019 • 2 minutes to read • Edit Online
Un punto (.) o signo de exclamación (!) que no está dentro un With bloque aparece sin una expresión de la
izquierda. Acceso a miembros ( . ) y acceso a miembros de diccionario ( ! ) requieren una expresión que especifica
el elemento que contiene el miembro. Esto debe aparecer inmediatamente a la izquierda del descriptor de acceso o
como destino de una With bloque que contiene el acceso a miembros.
Identificador de error : BC30157
Vea también
Caracteres especiales en el código
With...End With (instrucción)
La línea es demasiado larga
23/10/2019 • 2 minutes to read • Edit Online
Vea también
Tipos de error
Ya no se admiten instrucciones 'Line' (error del
compilador de Visual Basic)
23/10/2019 • 2 minutes to read • Edit Online
Vea también
System.IO
System.Drawing
Acceso a archivos con Visual Basic
El método no tiene una firma compatible con el
delegado
23/10/2019 • 2 minutes to read • Edit Online
Hay una incompatibilidad entre las firmas del método y el delegado que está intentando usar. La instrucción
Delegate define los tipos de parámetro y los tipos de valores devueltos de una clase de delegado. Cualquier
procedimiento que tiene que coincidan con los parámetros de tipos compatibles y devolver tipos que pueden
usarse para crear una instancia de este tipo de delegado.
Identificador de error : BC36563
Vea también
AddressOf (operador)
Delegate (instrucción)
Resolución de sobrecargas
Generic Types in Visual Basic
Los métodos de 'System.Nullable(Of T)' no se pueden
utilizar como operandos del operador 'AddressOf'
23/10/2019 • 2 minutes to read • Edit Online
Una instrucción usa la AddressOf operador con un operando que representa un procedimiento de la Nullable<T>
estructura.
Identificador de error : BC32126
Module Module1
Sub Main()
Dim nullInstance As New Nullable(Of Integer)(1)
Console.WriteLine(del.Invoke())
End Sub
Vea también
Nullable<T>
AddressOf (operador)
Tipos de valor que aceptan valores NULL
Generic Types in Visual Basic
Las instrucciones 'Module' sólo pueden ocurrir en el
nivel de archivo o de espacio de nombres
23/10/2019 • 2 minutes to read • Edit Online
Module las instrucciones deben aparecer en la parte superior del archivo de origen inmediatamente después de
Option y Imports instrucciones, los atributos globales y las declaraciones de espacio de nombres, pero antes de
todas las demás declaraciones.
Identificador de error : BC30617
Vea también
Module (instrucción)
Nombre <membername > no es conforme a CLS
23/10/2019 • 2 minutes to read • Edit Online
Un ensamblado está marcado como <CLSCompliant(True)> pero expone un miembro con un nombre que comienza
con un carácter de subrayado ( _ ).
Un elemento de programación puede contener uno o más caracteres de subrayado, pero to sea compatible con la
independencia del lenguaje y componentes independientes del lenguaje (CLS), no debe comenzar con un carácter
de subrayado. Vea Declared Element Names.
Al aplicar CLSCompliantAttribute a un elemento de programación, establezca el parámetro isCompliant del
atributo en True o False para indicar conformidad o disconformidad. No hay ningún valor predeterminado para
este parámetro, por lo que debe proporcionar uno.
Si no se aplica CLSCompliantAttribute a un elemento, se considera que no es conforme.
De forma predeterminada, este mensaje es una advertencia. Para obtener más información sobre cómo ocultar las
advertencias o cómo tratarlas como errores, vea Configuring Warnings in Visual Basic.
Identificador de error : BC40031
Vea también
Nombres de elementos declarados
Convenciones de nomenclatura de Visual Basic
No se<ha declarado el nombre ' nombre > '
23/10/2019 • 3 minutes to read • Edit Online
Una instrucción hace referencia a un elemento de programación, pero el compilador no puede encontrar un
elemento con ese nombre exacto.
IDENTIFICADOR de error : BC30451
Imports Microsoft.VisualBasic.CompilerServices
</Project>
Vea también
Resumen de constantes y declaraciones
Convenciones de nomenclatura de Visual Basic
Nombres de elementos declarados
Referencias a elementos declarados
Nombre <namespacename > en el espacio de
nombres raíz <fullnamespacename > no es conforme
a CLS
24/10/2019 • 2 minutes to read • Edit Online
Un ensamblado se marca como <CLSCompliant(True)> , pero un elemento del nombre del espacio de nombres raíz
comienza con un carácter de subrayado ( _ ).
Un elemento de programación puede contener uno o más guiones bajos, pero para que sea compatible con la
independencia del lenguaje y los componentes independientes del lenguaje (CLS), no debe comenzar con un
carácter de subrayado. Vea Declared Element Names.
Al aplicar CLSCompliantAttribute a un elemento de programación, establezca el parámetro isCompliant del
atributo en True o False para indicar conformidad o disconformidad. No hay ningún valor predeterminado para
este parámetro, por lo que debe proporcionar uno.
Si no se aplica CLSCompliantAttribute a un elemento, se considera que no es conforme.
De forma predeterminada, este mensaje es una advertencia. Para obtener información sobre cómo ocultar las
advertencias o cómo tratarlas como errores, vea Configuring Warnings in Visual Basic.
Identificador de error : BC40039
Vea también
Namespace (instrucción)
Espacios de nombres en Visual Basic
-rootnamespace
Página de aplicación, Diseñador de proyectos (Visual Basic)
Nombres de elementos declarados
Convenciones de nomenclatura de Visual Basic
Namespace o tipo especificado en las
importaciones<nombrecompletoelemento >' no
contiene ningún miembro público o no se encuentra
23/10/2019 • 2 minutes to read • Edit Online
Vea también
Imports (instrucción), espacio de nombres y tipo .NET
Namespace (instrucción)
Public
Espacios de nombres en Visual Basic
Referencias a elementos declarados
Namespace o tipo especificado en el nivel de
proyecto Imports'<nombrecompletoelemento >' no
contiene ningún miembro público o no se encuentra
23/10/2019 • 3 minutes to read • Edit Online
Vea también
Página Referencias, Diseñador de proyectos (Visual Basic)
Administrar propiedades de soluciones y proyectos
Public
Espacios de nombres en Visual Basic
Referencias a elementos declarados
Se necesita un índice de matriz de propiedades
31/10/2019 • 2 minutes to read • Edit Online
Este valor de propiedad consiste en una matriz, más que en un único valor. No especificó el índice de la propiedad
de matriz a la que intenta acceder.
Vea también
Tipos de error
Hable con nosotros
La función anidada no tiene una signatura
compatible con el delegado ' <delegatename > '
23/10/2019 • 2 minutes to read • Edit Online
Se ha asignado una expresión lambda a un delegado que tiene una firma no compatible. Por ejemplo, en el código
siguiente, el delegado Del tiene dos parámetros de entero.
El error se produce si una expresión lambda con un argumento se declara como de tipo Del :
Vea también
Conversión de delegado flexible
Expresiones lambda
No se encontró ningún método 'Main' accesible con
una firma apropiada en '<nombre >'
23/10/2019 • 2 minutes to read • Edit Online
Las aplicaciones de línea de comandos deben tener un Sub Main definido. Main debe declararse como
Public Shared si está definido en una clase o como Public si está definido en un módulo.
Vea también
Estructura de un programa de Visual Basic
Procedimientos
No compatible con CLS <membername > no se
permite en una interfaz conforme a CLS
23/10/2019 • 2 minutes to read • Edit Online
Una propiedad, procedimiento o evento en una interfaz se marca como <CLSCompliant(True)> cuando la propia
interfaz está marcada como <CLSCompliant(False)> o no está marcada.
Para una interfaz sea compatible con la independencia del lenguaje y componentes independientes del lenguaje
(CLS), deben ser compatible con todos sus miembros.
Al aplicar CLSCompliantAttribute a un elemento de programación, establezca el parámetro isCompliant del
atributo en True o False para indicar conformidad o disconformidad. No hay ningún valor predeterminado para
este parámetro, por lo que debe proporcionar uno.
Si no se aplica CLSCompliantAttribute a un elemento, se considera que no es conforme.
De forma predeterminada, este mensaje es una advertencia. Para obtener más información sobre cómo ocultar las
advertencias o cómo tratarlas como errores, vea Configuring Warnings in Visual Basic.
Identificador de error : BC40033
Si requiere conformidad con CLS y no tiene control sobre el código fuente de interfaz, o si no cumple las
condiciones ser compatible, defina a este miembro dentro de una interfaz diferente.
Si necesita que este miembro permanezca dentro de su interfaz actual, quite el CLSCompliantAttribute de su
definición o márquelo como <CLSCompliant(False)> .
Vea también
Interface (instrucción)
No se admite la inferencia de tipos que acepten
valores NULL en este contexto
27/03/2020 • 2 minutes to read • Edit Online
Los tipos de valor y las estructuras se pueden declarar que aceptan valores NULL.
Dim a? As Integer
Dim b As Integer?
Sin embargo, no puede usar la declaración que acepta valores NULL en combinación con la inferencia de tipos. Los
siguientes ejemplos provocan este error.
ID de error : BC36629
Vea también
Tipos de valores que aceptan valores NULL
Inferencia de tipo de variable local
El número de índices sobrepasa el número de
dimensiones de la matriz indizada
23/10/2019 • 2 minutes to read • Edit Online
El número de índices usado para obtener acceso a un elemento de matriz debe ser exactamente igual al rango de la
matriz, es decir, el número de dimensiones que tiene declaradas.
Identificador de error : BC30106
Vea también
Matrices
El objeto o la clase no admite el conjunto de eventos
23/10/2019 • 2 minutes to read • Edit Online
Se intentó usar un WithEvents variable con un componente que no puede funcionar como un origen de eventos
para el conjunto de eventos especificado. Por ejemplo, desea recibir los eventos de un objeto y, después, cree otro
objeto que Implements el primer objeto. Aunque es posible que cree que puede recibir los eventos del objeto
implementado, esto no es siempre el caso. Implements solo se implementa una interfaz para los métodos y
propiedades. WithEvents no se admite para privada UserControls , porque el tipo de información necesaria para
generar el ObjectEvent no está disponible en tiempo de ejecución.
Vea también
WithEvents
Implements (instrucción)
Se requiere un objeto (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Las referencias a las propiedades y los métodos requieren a menudo un calificador de objeto explícito. Este es un
caso.
Vea también
Tipos de error
Variable de objeto o de bloque With no establecida
23/10/2019 • 4 minutes to read • Edit Online
Se está haciendo referencia a una variable de objeto no válido. Este error puede producirse por varias razones:
Se declaró una variable sin especificar un tipo. Si una variable se declara sin especificar un tipo, el valor
predeterminado es Type Object .
Por ejemplo, una Dim x variable declarada con sería de tipo Object; una variable declarada con
Dim x As String sería String de tipo.
TIP
La Option Strict instrucción no permite tipos implícitos que generan un Object tipo. Si omite el tipo, se
producirá un error en tiempo de compilación. Consulte Option Strict (instrucción).
NOTE
En versiones anteriores de Visual Basic o VBA, este error también se desencadenaba asignando un valor a una variable sin
usar la Set palabra clave ( x = "name" en lugar de Set x = "name" ). La Set palabra clave ya no es válida en Visual
Basic .net.
Option Strict On
Al ejecutar el proyecto, aparecerá un error del compilador en el lista de errores para cualquier variable que
se especificó sin un tipo.
2. Si no desea habilitar Option Strict , busque en el código las variables que se especificaron sin un tipo (
Dim x en lugar de Dim x As String ) y agregue el tipo previsto a la declaración.
3. Asegúrese de que no hace referencia a una variable de objeto que se ha Nothing establecido en. Busque en el
código la palabra Nothing clave y revise el código para que el objeto no se establezca en Nothing hasta que
se haya hecho referencia a él.
4. Asegúrese de que las variables de matriz se dimensionan antes de tener acceso a ellas. Puede asignar una
dimensión la primera vez que cree la matriz ( Dim x(5) As String en lugar de Dim x() As String ), o bien use
la ReDim palabra clave para establecer las dimensiones de la matriz antes de tener acceso a ella por primera
vez.
5. Asegúrese de que With el bloque se inicializa ejecutando el punto de With entrada de la instrucción.
Vea también
Declaración de variables de objeto
ReDim (instrucción)
With...End With (instrucción)
Declaración de un operador debe ser uno de: +,-,
*,,/, ^, &, Like, Mod y, Or, Xor, no, < <, >>...
23/10/2019 • 2 minutes to read • Edit Online
Puede declarar sólo un operador que sea apto para la sobrecarga. En la tabla siguiente se enumera los operadores
que se puede declarar.
T IP O O P ERA DO RES
Vea también
Operator (instrucción)
Procedimientos de operadores
Cómo: Definir un operador
Cómo: Definir un operador de conversión
Function (instrucción)
Se esperaba 'Optional'
23/10/2019 • 2 minutes to read • Edit Online
Vea también
Parámetros opcionales
Los parámetros opcionales deben especificar un valor
predeterminado
29/10/2019 • 2 minutes to read • Edit Online
Los parámetros opcionales deben proporcionar valores predeterminados que se pueden utilizar si un
procedimiento que realiza la llamada no proporciona ningún parámetro.
Identificador de error : BC30812
Ejemplo
En el ejemplo siguiente se genera BC30812:
Vea también
Optional
El ordinal no es válido
23/10/2019 • 2 minutes to read • Edit Online
La llamada a una biblioteca de vínculos dinámicos (DLL) indica que use un número en lugar de un nombre de
procedimiento mediante el #num sintaxis. Este error tiene las siguientes causas posibles:
Un intento para convertir el #num expresión a un error de ordinal.
El #num especificado no se especifica ninguna función en el archivo DLL.
Una biblioteca de tipos tiene una declaración no válida, lo que resulta en un uso interno de un número
ordinal no válido.
Vea también
Declare (instrucción)
Memoria insuficiente (error del compilador de Visual
Basic)
23/10/2019 • 2 minutes to read • Edit Online
Vea también
Tipos de error
Espacio de pila insuficiente (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
La pila es un área de trabajo de memoria que aumenta y disminuye dinámicamente con las demandas del
programa en ejecución. Se han superado sus límites.
4. Vuelva a definir algunas cadenas de longitud fija como cadenas de longitud variable, ya que las cadenas de
longitud fija utilizan más espacio de pila que las cadenas de longitud variable. También puede definir la
cadena en el nivel de módulo en el que no se requiere espacio de pila.
5. Compruebe el número de llamadas a funciones DoEvents anidadas mediante el cuadro de diálogo Calls
para ver los procedimientos que están activos en la pila.
6. Asegúrese de que no ocasionó un "evento en cascada" desencadenando un evento que llama a un
procedimiento de evento que ya está en la pila. Un evento en cascada es similar a una llamada a
procedimiento recursivo no terminada, pero es menos obvio, ya que la llamada se realiza mediante Visual
Basic en lugar de una llamada explícita en el código. Utilice el cuadro de diálogo Calls para ver los
procedimientos que están activos en la pila.
Vea también
Ventana Memoria
Espacio para cadenas insuficiente (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Con Visual Basic, puede usar cadenas muy grandes. Sin embargo, los requisitos de otros programas y la forma de
trabajar con las cadenas pueden producir este error.
Vea también
Tipos de error
Resumen de manipulación de cadenas
Desbordamiento (Error de Visual Basic)
23/10/2019 • 2 minutes to read • Edit Online
Un literal representa un valor fuera de los límites del tipo de datos a la que se está asignando.
Identificador de error : BC30036
Vea también
Tipos de datos
Desbordamiento (Error en tiempo de ejecución de
Visual Basic)
23/10/2019 • 2 minutes to read • Edit Online
Se produce un desbordamiento al intentar una asignación que supera los límites del destino de la asignación.
Vea también
Int32.MaxValue
Double.MaxValue
Tipos de datos
Tipos de error
No se encuentra la ruta de acceso
23/10/2019 • 2 minutes to read • Edit Online
Durante una operación de acceso a archivos o acceso a disco, el sistema operativo no pudo encontrar la ruta de
acceso especificada. La ruta de acceso a un archivo incluye la especificación de unidad además de los directorios y
subdirectorios que deben recorrerse para localizar el archivo. Una ruta de acceso puede ser relativa o absoluta.
Vea también
Tipos de error
Error de acceso a la ruta o al archivo
23/10/2019 • 2 minutes to read • Edit Online
Durante una operación de acceso a archivos o acceso a disco, el sistema operativo no se pudo realizar una conexión
entre la ruta de acceso y el nombre de archivo.
Vea también
Tipos de error
Permiso denegado (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Se intentó escribir en un disco protegido contra escritura o para tener acceso a un archivo bloqueado.
Vea también
Tipos de error
El argumento o la llamada al procedimiento no es
válido (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Vea también
Tipos de error
Propiedad '<propertyname >' no devuelve un valor
en todas las rutas de código
23/10/2019 • 2 minutes to read • Edit Online
Propiedad '<propertyname >' no devuelve un valor en todas las rutas de código. Podría producirse una excepción
de referencia nula en tiempo de ejecución al usar el resultado.
Una propiedad Get procedimiento tiene al menos una ruta de acceso posibles a través de su código que no
devuelve un valor.
Puede devolver un valor de una propiedad Get procedimiento en cualquiera de las maneras siguientes:
Asigne el valor al nombre de propiedad y, a continuación, realizar un Exit Property instrucción.
Asigne el valor al nombre de propiedad y, a continuación, realizar el End Get instrucción.
Incluya el valor en un instrucción Return.
Si el control se transfiere a Exit Property o End Get y no ha asignado ningún valor para el nombre de propiedad,
el Get procedimiento devuelve el valor predeterminado de la propiedad tipo de datos. Para obtener más
información, vea "Comportamiento" en instrucción Function.
De forma predeterminada, este mensaje es una advertencia. Para obtener más información sobre cómo ocultar las
advertencias o cómo tratarlas como errores, vea Configuring Warnings in Visual Basic.
Identificador de error : BC42107
Vea también
Procedimientos de propiedades
Property (instrucción)
Get (instrucción)
El índice de la matriz de propiedades no es válido
23/10/2019 • 2 minutes to read • Edit Online
Vea también
Matrices
El procedimiento Let de la propiedad no está
definido y el procedimiento Get no ha devuelto un
objeto
23/10/2019 • 2 minutes to read • Edit Online
Solo pueden aplicar determinadas propiedades, métodos y las operaciones a Collection objetos. Especifica una
operación o propiedad que es exclusiva para colecciones, pero el objeto no es una colección.
Vea también
Collection
Propiedad no encontrada
23/10/2019 • 2 minutes to read • Edit Online
Vea también
Tipos de error
No se encuentra la propiedad ni el método
23/10/2019 • 2 minutes to read • Edit Online
Vea también
Tipos de error
Variable de rango <variable > oculta una variable en
un bloque de inclusión, una variable de rango
definida anteriormente o una variable declarada de
forma implícita en una expresión de consulta
23/10/2019 • 2 minutes to read • Edit Online
Un nombre de variable de rango especificado en un Select , From , Aggregate , o Let cláusula duplica el nombre
de una variable de rango definido anteriormente en la consulta o el nombre de una variable que se declara
implícitamente por la consulta, Por ejemplo, un nombre de campo o el nombre de una función de agregado.
Identificador de error : BC36633
Vea también
Introducción a LINQ en Visual Basic
From (cláusula)
Let (cláusula)
Aggregate (cláusula)
Select (cláusula)
El nombre de una variable de rango sólo se puede
inferir a partir de un nombre simple o completo sin
argumentos
23/10/2019 • 2 minutes to read • Edit Online
Un elemento de programación que toma uno o más argumentos se incluye en una consulta LINQ. El compilador no
puede inferir una variable de rango de ese elemento de programación.
Identificador de error : BC36599
Vea también
Introducción a LINQ en Visual Basic
Select (cláusula)
Necesaria una referencia al ensamblado
'<assemblyidentity >' que contiene el tipo
'<typename >', pero no se encontró una referencia
adecuada debido a la ambigüedad entre los
proyectos<projectname1 >' y '< projectname2 >'
23/10/2019 • 2 minutes to read • Edit Online
Una expresión usa un tipo como, por ejemplo, una clase, estructura, interfaz, enumeración o delegado, que se
define fuera del proyecto. Sin embargo, hay referencias de proyectos a más de un ensamblado que definen ese
tipo.
Los proyectos citados generan ensamblados con el mismo nombre. Por lo tanto, el compilador no puede
determinar qué ensamblado debe usar para el tipo al que se está accediendo.
Para obtener acceso a un tipo definido en otro ensamblado, el compilador de Visual Basic debe tener una referencia
a ese ensamblado. Debe ser una referencia única y no ambigua, que no produzca referencias circulares entre
proyectos.
Identificador de error : BC30969
Vea también
Administrar referencias en un proyecto
Referencias a elementos declarados
Administrar propiedades de soluciones y proyectos
Solucionar problemas de referencias rotas
Necesaria una referencia al ensamblado
'<assemblyname >' que contiene la clase
base<classname >'
23/10/2019 • 2 minutes to read • Edit Online
Necesaria una referencia al ensamblado '<assemblyname >' que contiene la clase base<classname >'. Agregue
una al proyecto.
La clase está definida en una biblioteca de vínculos dinámicos (DLL) o un ensamblado al que no se hace referencia
directamente en el proyecto. El compilador de Visual Basic requiere una referencia para evitar la ambigüedad en
caso de la clase está definida en más de una DLL o ensamblado.
Identificador de error : BC30007
Vea también
Administrar referencias en un proyecto
Solucionar problemas de referencias rotas
La operación solicitada no está disponible porque no
está definida la función de biblioteca en tiempo de
ejecución '<función > '.
26/10/2019 • 2 minutes to read • Edit Online
Visual Basic está intentando realizar una llamada interna a una función en el tiempo de ejecución de Visual Basic
(Microsoft. VisualBasic. dll) que no se puede encontrar.
Identificador de error : BC35000
Este error se produce en los proyectos de estilo SDK (proyectos con un archivo *. vbproj que comienza con la línea
<Project Sdk="Microsoft.NET.Sdk"> ). De forma predeterminada, solo un subconjunto del ensamblado Microsoft.
VisualBasic. dll se incrusta en el ensamblado de la aplicación y <función > no se incluye en ese subconjunto.
<VBRuntime>Default</VBRuntime>
Vea también
-vbruntime (( opción del compilador)
Reanudar sin error
23/10/2019 • 2 minutes to read • Edit Online
Un Resume aparecido instrucción fuera del código de control de errores o el código pasó de un controlador de
errores, aunque se ha producido ningún error.
Vea también
Resume (instrucción)
On Error (instrucción)
Tipo de función de valor devuelto
'<NombreDeProcedimiento >' no es conforme a CLS
23/10/2019 • 3 minutes to read • Edit Online
Un Function procedimiento está marcado como <CLSCompliant(True)> pero devuelve un tipo que está marcado
como <CLSCompliant(False)> , no está marcado o no cumple los requisitos porque es un tipo no conforme.
Para que un procedimiento sea conforme a la Independencia del lenguaje y componentes independientes del
lenguaje (CLS), solo debe usar tipos conformes a CLS. Esto se aplica a los tipos de los parámetros, el tipo de valor
devuelto y los tipos de todas sus variables locales.
Los siguientes tipos de datos de Visual Basic no son conformes a CLS:
SByte (tipo de datos)
UInteger (tipo de datos)
ULong (tipo de datos)
UShort (tipo de datos)
Al aplicar CLSCompliantAttribute a un elemento de programación, establezca el parámetro isCompliant del
atributo en True o False para indicar conformidad o disconformidad. No hay ningún valor predeterminado para
este parámetro, por lo que debe proporcionar uno.
Si no se aplica CLSCompliantAttribute a un elemento, se considera que no es conforme.
De forma predeterminada, este mensaje es una advertencia. Para obtener más información sobre cómo ocultar las
advertencias o cómo tratarlas como errores, vea Configuring Warnings in Visual Basic.
Identificador de error : BC40027
Si trabaja con objetos de automatización o COM, tenga en cuenta que algunos tipos tienen anchos de datos
diferente que en .NET Framework. Por ejemplo, int suele ser de 16 bits en otros entornos. Si va a devolver
un entero de 16 bits a esos componentes, declárelo como Short en lugar de Integer en el código
administrado de Visual Basic.
'Set' descriptor de acceso de propiedad
'<propertyname >' no es accesible
23/10/2019 • 2 minutes to read • Edit Online
Una instrucción intenta almacenar el valor de una propiedad cuando no tiene acceso a la propiedad Set
procedimiento.
Si el instrucción Set está marcada con un acceso más restrictivo nivel que su Property Statement, podría producirse
un error de un intento para establecer el valor de propiedad en los casos siguientes:
El Set instrucción está marcada como privada y el código de llamada está fuera de la clase o estructura en
la que se define la propiedad.
El Set instrucción está marcada como Protected y el código de llamada no está en la clase o estructura en la
que se define la propiedad, ni en una clase derivada.
El Set instrucción está marcada como Friend y el código de llamada no está en el mismo ensamblado en el
que se define la propiedad.
Identificador de error : BC31102
Vea también
Procedimientos de propiedades
Cómo: Declarar una propiedad con niveles de acceso mixtos
Algunas subclaves no se pueden eliminar
23/10/2019 • 2 minutes to read • Edit Online
Se ha intentado eliminar una clave del registro, pero la operación no se pudo porque algunas subclaves no se
puede eliminar. Normalmente, esto es debido a una falta de permisos.
Vea también
Microsoft.VisualBasic.MyServices.RegistryProxy
DeleteSubKey
RegistryPermission
La instrucción no puede terminar un bloque fuera de
una línea de la instrucción 'If'
23/10/2019 • 2 minutes to read • Edit Online
Una sola línea If instrucción contiene varias instrucciones separadas por dos puntos (:), uno de los cuales es un
End declaración de un bloque de control fuera de la línea If . Línea If instrucciones no utilizan el End If
instrucción.
Identificador de error : BC32005
Vea también
If...Then...Else (instrucción)
La instrucción no es válida en un espacio de nombres
23/10/2019 • 2 minutes to read • Edit Online
La instrucción no puede aparecer en el nivel de un espacio de nombres. Las declaraciones sola permitidas en el
nivel de espacio de nombres son el módulo, clase, interfaz, delegado, enumeración y declaraciones de estructura.
Identificador de error : BC30001
Vea también
Ámbito en Visual Basic
Espacios de nombres en Visual Basic
La instrucción no es válida dentro de un método o
una expresión lambda de varias líneas
23/10/2019 • 2 minutes to read • Edit Online
La instrucción no es válida dentro de un Sub , Function , propiedad Get , o la propiedad Set procedimiento.
Algunas instrucciones se pueden colocar en el nivel de clase o módulo. Otros, como Option Strict , debe estar en
el nivel de espacio de nombres y preceder a todas las demás declaraciones.
Identificador de error : BC30024
Vea también
Sub (instrucción)
Function (instrucción)
Get (instrucción)
Set (instrucción)
Las constantes de cadena deben terminar en comillas
dobles
23/10/2019 • 2 minutes to read • Edit Online
Vea también
Cadenas
Estructura '<structurename >' debe contener al
menos una variable miembro de instancia o
declaración de evento de al menos una instancia no
esté marcada como 'Custom'
23/10/2019 • 2 minutes to read • Edit Online
Una definición de estructura no incluye las variables no compartidas o eventos no personalizados no compartidos.
Cada estructura debe tener una variable o un evento que se aplica a cada instancia concreta (no compartida) en
lugar de a todas las instancias colectivamente (Shared). Procedimientos, propiedades y constantes no compartidas
no cumplen este requisito. Además, si no hay ninguna variable no compartida y un solo evento no compartido, ese
evento no puede ser un Custom eventos.
Identificador de error : BC30941
Vea también
Estructuras
Cómo: Declarar una estructura
Structure (instrucción)
No se encontró 'Sub Main' en '<nombre >'
23/10/2019 • 2 minutes to read • Edit Online
Vea también
Sub (instrucción)
Procedimiento Main en Visual Basic
Sub o Function no definida (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Se debe definir una Sub o Function para que se llame a. Las causas posibles de este error son:
Error al escribir el nombre del procedimiento.
Intentar llamar a un procedimiento desde otro proyecto sin agregar explícitamente una referencia a ese
proyecto en el cuadro de diálogo referencias .
Especificar un procedimiento que no es visible para el procedimiento que realiza la llamada.
Declarar una rutina de biblioteca de vínculos dinámicos (DLL) de Windows o una rutina de recursos de
código de Macintosh que no está en la biblioteca o el recurso de código especificado.
Vea también
Tipos de error
Administrar referencias en un proyecto
Sub (instrucción)
Function (instrucción)
El subíndice está fuera del intervalo (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Un subíndice de matriz no es válido porque está fuera del intervalo permitido. El valor de subíndice más bajo de
una dimensión es siempre 0, y el valor de subíndice más alto lo devuelve el método GetUpperBound de esa
dimensión.
Vea también
Array.GetUpperBound
Matrices
TextFieldParser no puede finalizar la operación de
lectura porque se ha superado el tamaño máximo de
búfer
23/10/2019 • 2 minutes to read • Edit Online
No se puede completar la operación porque se ha superado el tamaño máximo del búfer (10 000 000 bytes).
Vea también
OpenTextFieldParser
TextFieldParser
Cómo: Leer archivos de texto con varios formatos
Análisis de archivos de texto con el objeto TextFieldParser
El tipo de la variable<' variablename > ' no se inferirá
porque está enlazado a un campo en un ámbito de
inclusión
23/10/2019 • 3 minutes to read • Edit Online
El tipo de la variable<' variablename > ' no se inferirá porque está enlazado a un campo en un ámbito de inclusión.
Cambie el nombre de '<variablename > ' o use el nombre completo (por ejemplo, ' me. variablename ' o ' MyBase.
variablename ').
Una variable de control de bucle en su código tiene el mismo nombre que un campo de la clase u otro ámbito de
inclusión. Dado que la variable de control se utiliza sin una cláusula As , se enlaza al campo en el ámbito de
inclusión y el compilador no crea una nueva variable para ella ni infiere su tipo.
En el ejemplo siguiente, Index , es decir, la variable de control en la instrucción For , se enlaza al campo Index de
la clase Customer . El compilador no crea una nueva variable para la variable de control Index ni infiere su tipo.
Class Customer
Sub Main()
End Sub
End Class
De forma predeterminada, este mensaje es una advertencia. Para obtener información sobre cómo ocultar las
advertencias o cómo tratarlas como errores, vea Configuring Warnings in Visual Basic.
IDENTIFICADOR de error : BC42110
Para resolver esta advertencia
Convierta la variable de control de bucle en local cambiando su nombre por un identificador que tampoco
sea el nombre de un campo de la clase.
For I = 1 To 10
Asegúrese de que la variable de control de bucle se enlaza al campo de clase agregando el prefijo Me. al
nombre de variable.
For Me.Index = 1 To 10
En lugar de basarse en la inferencia de tipo local, use una cláusula As para especificar un tipo para la
variable de control de bucle.
For Index As Integer = 1 To 10
Ejemplo
El código siguiente muestra el ejemplo anterior con la primera corrección en contexto.
Class Customer
Sub Main()
For I = 1 To 10
' ...
Next
End Sub
End Class
Vea también
Option Infer (instrucción)
For Each...Next (instrucción)
For...Next (instrucción)
Procedimientos: Hacer referencia a la instancia actual de un objeto
Inferencia de tipo de variable local
Me, My, MyBase y MyClass
Esta matriz es fija o está bloqueada temporalmente
(Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Vea también
Matrices
Esta clave ya está asociada con un elemento de esta
colección
23/10/2019 • 2 minutes to read • Edit Online
La clave especificada para un miembro de la colección ya identifica a otro miembro de la colección. Una clave es
una cadena especificada en el Add método que identifica de forma única un miembro específico de una colección.
Vea también
Tipos de error
Demasiados archivos
23/10/2019 • 2 minutes to read • Edit Online
Más archivos se crearon en el directorio raíz del sistema operativo que permite o se han abierto más archivos que
el número especificado en el archivos = establecer en el archivo CONFIG. Archivo SYS.
Vea también
Tipos de error
El tipo '<TypeName > ' no tiene constructores
31/10/2019 • 2 minutes to read • Edit Online
Un tipo no admite una llamada a Sub New() . Una causa probable puede ser un archivo binario o un compilador
dañado.
Identificador de error : BC30251
Vea también
Objetos y clases
Hable con nosotros
Tipo <typename > no es conforme a CLS
23/10/2019 • 2 minutes to read • Edit Online
Una variable, propiedad o valor devuelto de función se declara con un tipo de datos que no es conforme a CLS.
Para una aplicación sea compatible con la independencia del lenguaje y componentes independientes del lenguaje
(CLS), debe utilizar solo tipos conformes a CLS.
Los siguientes tipos de datos de Visual Basic no son conformes a CLS:
SByte (tipo de datos)
UInteger (tipo de datos)
ULong (tipo de datos)
UShort (tipo de datos)
Identificador de error : BC40041
Si la aplicación no necesita ser compatible con CLS, no es necesario cambiar nada. Sin embargo debe ser
consciente de que no.
Tipo de '<typename >' no está definido
23/10/2019 • 2 minutes to read • Edit Online
La instrucción hace referencia a un tipo que no se ha definido. Puede definir un tipo en una instrucción de
declaración como Enum , Structure , Class , o Interface .
Identificador de error : BC30002
Asegúrese de que el espacio de nombres del tipo no se ha redefinido en el proyecto. Si es así, utilice el
Global palabra clave para el nombre de tipo completo. Por ejemplo, si un proyecto define un espacio de
nombres denominado System , System.Object tipo no se puede acceder a menos que se completa con el
Global palabra clave: Global.System.Object .
Si el tipo está definido, pero no se registra la biblioteca de objetos o la biblioteca de tipos en el que se define
en Visual Basic, haga clic Agregar referencia en el proyecto menú y, a continuación, seleccione el objeto
adecuado biblioteca o biblioteca de tipos.
Asegúrese de que el tipo está en un ensamblado que es parte del perfil de .NET Framework de destino. Para
obtener más información, consulte Solucionar problemas de versión de .NET Framework de destino.
Vea también
Espacios de nombres en Visual Basic
Enum (instrucción)
Structure (instrucción)
Class (instrucción)
Interface (instrucción)
Administrar referencias en un proyecto
No se pudieron inferir los argumentos de tipo a partir
del delegado
23/10/2019 • 2 minutes to read • Edit Online
Una instrucción de asignación usa AddressOf para asignar la dirección de un procedimiento genérico a un
delegado, pero no proporciona ningún argumento de tipo al procedimiento genérico.
Normalmente, cuando se invoca un tipo genérico, se facilita un argumento de tipo para cada parámetro de tipo
definido por el tipo genérico. Si no se facilita ningún argumento de tipo, el compilador intenta inferir los tipos que
se deben pasar a los parámetros de tipo. Si el contexto no proporciona suficiente información para que el
compilador infiera los tipos, se genera un error.
Identificador de error : BC36564
Vea también
Generic Types in Visual Basic
AddressOf (operador)
Generic Procedures in Visual Basic
Lista de tipos
Métodos de extensión
No coinciden los tipos (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Vea también
Tipos de error
No se puede<inferir el tipo de ' variablename > '
porque los límites del bucle y la variable Step no se
amplían al mismo tipo
23/10/2019 • 2 minutes to read • Edit Online
Ha escrito un For...Next bucle en el que el compilador no puede inferir un tipo de datos para la variable de
control de bucle, ya que se cumplen las condiciones siguientes:
El tipo de datos de la variable de control de bucle no se especifica con una cláusula As .
Los límites del bucle y la variable step contienen al menos dos tipos de datos.
No existe ninguna conversión estándar entre los tipos de datos.
Por consiguiente, el compilador no puede inferir el tipo de datos de la variable de control de un bucle.
En el ejemplo siguiente, la variable de paso es un carácter y los límites del bucle son ambos enteros. Dado que no
hay ninguna conversión estándar entre los caracteres y los enteros, se genera este error.
Dim stepVar = 1
-o bien-
Use funciones de conversión explícitas para convertir los límites del bucle y la variable de paso en los tipos
adecuados. En el ejemplo anterior, aplique la Val función a stepVar .
Vea también
Val
For...Next (instrucción)
Conversiones implícitas y explícitas
Inferencia de tipo de variable local
Option Infer (instrucción)
Funciones de conversión de tipos
Conversiones de ampliación y de restricción
Tipo de miembro '<membername >' no es conforme
a CLS
23/10/2019 • 3 minutes to read • Edit Online
El tipo de datos especificado para este miembro no es parte de la independencia del lenguaje y componentes
independientes del lenguaje (CLS). No es un error dentro del componente, ya que .NET Framework y Visual Basic
admiten este tipo de datos. Sin embargo, es posible que otro componente escrito en código estrictamente
conforme a CLS no admite este tipo de datos. Es posible que este componente no pueda interactuar correctamente
con el componente.
Los siguientes tipos de datos de Visual Basic no son conformes a CLS:
SByte (tipo de datos)
UInteger (tipo de datos)
ULong (tipo de datos)
UShort (tipo de datos)
De forma predeterminada, este mensaje es una advertencia. Para obtener más información sobre cómo ocultar las
advertencias o cómo tratarlas como errores, vea Configuring Warnings in Visual Basic.
Identificador de error : BC40025
Vea también
Reflexión
Tipo de valor opcional para el parámetro opcional
<parametername > no es conforme a CLS
23/10/2019 • 3 minutes to read • Edit Online
Un procedimiento se marca como <CLSCompliant(True)> , pero declara un parámetro opcional con valor
predeterminado de un tipo no conforme.
Para que un procedimiento sea conforme a la Independencia del lenguaje y componentes independientes del
lenguaje (CLS), solo debe usar tipos conformes a CLS. Esto se aplica a los tipos de los parámetros, el tipo de valor
devuelto y los tipos de todas sus variables locales. También se aplica a los valores predeterminados de parámetros
opcionales.
Los siguientes tipos de datos de Visual Basic no son conformes a CLS:
SByte (tipo de datos)
UInteger (tipo de datos)
ULong (tipo de datos)
UShort (tipo de datos)
Al aplicar el atributo CLSCompliantAttribute a un elemento de programación, establezca el parámetro isCompliant
del atributo como True o False para indicar compatibilidad o incompatibilidad. No hay ningún valor
predeterminado para este parámetro, por lo que debe proporcionar uno.
Si no aplica CLSCompliantAttribute a un elemento, se considera que no es conforme.
De forma predeterminada, este mensaje es una advertencia. Para obtener más información sobre cómo ocultar las
advertencias o cómo tratarlas como errores, vea Configuring Warnings in Visual Basic.
Identificador de error : BC40042
Si trabaja con objetos de automatización o COM, tenga en cuenta que algunos tipos tienen anchos de datos
diferente que en .NET Framework. Por ejemplo, int suele ser de 16 bits en otros entornos. Si se acepta un
entero de 16 bits de esos componentes, declárelo como Short en lugar de Integer en el código
administrado de Visual Basic.
Tipo de parámetro '<parametername >' no es
conforme a CLS
23/10/2019 • 3 minutes to read • Edit Online
Un procedimiento está marcado como <CLSCompliant(True)> pero declara un parámetro con un tipo que está
marcado como <CLSCompliant(False)> , no está marcado o no cumple los requisitos porque es un tipo no conforme.
Para que un procedimiento sea conforme a la Independencia del lenguaje y componentes independientes del
lenguaje (CLS), solo debe usar tipos conformes a CLS. Esto se aplica a los tipos de los parámetros, el tipo de valor
devuelto y los tipos de todas sus variables locales.
Los siguientes tipos de datos de Visual Basic no son conformes a CLS:
SByte (tipo de datos)
UInteger (tipo de datos)
ULong (tipo de datos)
UShort (tipo de datos)
Al aplicar CLSCompliantAttribute a un elemento de programación, establezca el parámetro isCompliant del
atributo en True o False para indicar conformidad o disconformidad. No hay ningún valor predeterminado para
este parámetro, por lo que debe proporcionar uno.
Si no se aplica CLSCompliantAttribute a un elemento, se considera que no es conforme.
De forma predeterminada, este mensaje es una advertencia. Para obtener más información sobre cómo ocultar las
advertencias o cómo tratarlas como errores, vea Configuring Warnings in Visual Basic.
Identificador de error : BC40028
Un elemento de programación está calificado con una cadena de calificación que incluye un parámetro de tipo.
Un parámetro de tipo representa un requisito para un tipo que se va a proporcionar cuando se construya el tipo
genérico. No representa un tipo definido específico. Una cadena de calificación debe incluir solo los elementos que
se definen en tiempo de compilación.
El código siguiente puede generar este error:
Vea también
Referencias a elementos declarados
Generic Types in Visual Basic
Lista de tipos
No se puede crear el ensamblado con nombre seguro
del archivo de clave '<filename >': <error >
23/10/2019 • 2 minutes to read • Edit Online
Vea también
Sn.exe (herramienta de nombre seguro))
No se puede incrustar el archivo de recursos
'<filename > ': mensaje de error <
31/10/2019 • 2 minutes to read • Edit Online
El compilador Visual Basic llama a Assembly Linker (al. exe, también conocido como ALink) para generar un
ensamblado con un manifiesto. El vinculador ha informado de un error al incrustar un archivo de recursos COM+
nativo directamente en el ensamblado.
Identificador de error : BC30143
Vea también
Al. exe
Hable con nosotros
No se puede emitir el ensamblado: <mensaje de
error >
31/10/2019 • 2 minutes to read • Edit Online
El compilador Visual Basic llama a Assembly Linker (al. exe, también conocido como ALink) para generar un
ensamblado con un manifiesto, y el vinculador informa de un error en la fase de emisión de la creación del
ensamblado.
Identificador de error : BC30145
tlbimp <path to COM reference file> /out:<output assembly name> /keyfile:<path to .snk file>
TIP
Utilice comillas dobles si una ruta de acceso o archivo contiene espacios.
6. En Visual Studio, agregue una referencia de ensamblado .NET al archivo que acaba de crear.
Vea también
Al. exe
Sn.exe (Herramienta de nombre seguro)
Cómo: Crear un par de claves pública y privada
Hable con nosotros
No se puede encontrar el archivo necesario
'<nombreDeArchivo > '
31/10/2019 • 2 minutes to read • Edit Online
Vea también
Hable con nosotros
No se pueden obtener los nombres de los puertos
serie a causa de un error interno del sistema
31/10/2019 • 2 minutes to read • Edit Online
Vea también
SerialPortNames
Conceptos básicos del depurador
Hable con nosotros
No se puede vincular al archivo de recursos
'<nombreDeArchivo > ': mensaje de error <
31/10/2019 • 2 minutes to read • Edit Online
El compilador Visual Basic llama a Assembly Linker (al. exe, también conocido como ALink) para generar un
ensamblado con un manifiesto. El vinculador ha informado de un error al vincular a un archivo de recursos COM+
nativo desde el ensamblado.
Identificador de error : BC30144
Vea también
Al. exe
Hable con nosotros
No se puede cargar la información de la clase
'<className > '
31/10/2019 • 2 minutes to read • Edit Online
Vea también
Depurar en Visual Studio
No se puede escribir el resultado en memoria
31/10/2019 • 2 minutes to read • Edit Online
Vea también
Hable con nosotros
No se puede escribir el archivo temporal porque la
ruta de acceso temporal no está disponible
31/10/2019 • 2 minutes to read • Edit Online
Visual Basic no pudo determinar la ruta de acceso donde se almacenan los archivos temporales.
Identificador de error : BC30698
Vea también
Hable con nosotros
No se puede escribir en el archivo de salida
'<nombreDeArchivo > ': error de <
31/10/2019 • 2 minutes to read • Edit Online
Vea también
Hable con nosotros
El tipo subyacente <typename > de Enum no es
conforme a CLS
23/10/2019 • 3 minutes to read • Edit Online
El tipo de datos especificado para esta enumeración no es parte de la independencia del lenguaje y componentes
independientes del lenguaje (CLS). No es un error dentro del componente, ya que .NET Framework y Visual Basic
admiten este tipo de datos. Sin embargo, es posible que otro componente escrito en código estrictamente
conforme a CLS no admite este tipo de datos. Es posible que este componente no pueda interactuar correctamente
con el componente.
Los siguientes tipos de datos de Visual Basic no son conformes a CLS:
SByte (tipo de datos)
UInteger (tipo de datos)
ULong (tipo de datos)
UShort (tipo de datos)
De forma predeterminada, este mensaje es una advertencia. Para obtener más información sobre cómo ocultar las
advertencias o cómo tratarlas como errores, vea Configuring Warnings in Visual Basic.
Identificador de error : BC40032
Vea también
Reflexión (Visual Basic)
Reflexión
El uso de una variable de iteración en una expresión
lambda puede producir resultados inesperados.
23/10/2019 • 2 minutes to read • Edit Online
Uso de la variable de iteración en una expresión lambda puede producir resultados inesperados. En su lugar, cree
una variable local dentro del bucle y asígnele el valor de la variable de iteración.
Esta advertencia aparece cuando se usa una variable de iteración de bucle en una expresión lambda que se declara
dentro del bucle. Por ejemplo, en el ejemplo siguiente hace que aparezca una advertencia.
For i As Integer = 1 To 10
' The warning is given for the use of i.
Dim exampleFunc As Func(Of Integer) = Function() i
Next
Module Module1
Sub Main()
Dim array1 As Func(Of Integer)() = New Func(Of Integer)(4) {}
For i As Integer = 0 To 4
array1(i) = Function() i
Next
End Sub
End Module
El For bucle crea una matriz de las expresiones lambda, cada una de las cuales devuelve el valor de la variable de
iteración del bucle i . Cuando se evalúan las expresiones lambda en el For Each bucle, es probable que vea 0, 1, 2,
3 y 4 muestra, los valores sucesivos de i en el For bucle. En su lugar, verá que el valor final de i muestra cinco
veces:
5
De forma predeterminada, este mensaje es una advertencia. Para más información sobre cómo ocultar las
advertencias o cómo tratarlas como errores, vea Configuring Warnings in Visual Basic.
Identificador de error : BC42324
Module Module1
Sub Main()
Dim array1 As Func(Of Integer)() = New Func(Of Integer)(4) {}
For i As Integer = 0 To 4
Dim j = i
array1(i) = Function() j
Next
End Sub
End Module
Vea también
Expresiones lambda
Valor de tipo '<typename1 >' no se puede convertir a
'<nombredetipo2 >'
23/10/2019 • 2 minutes to read • Edit Online
Valor de tipo '<typename1 >' no se puede convertir a '<nombredetipo2 >'. Discordancia de tipos podría ser
debido a la mezcla de una referencia de archivo con una referencia de proyecto al ensamblado '<assemblyname >'.
Intente reemplazar la referencia de archivo a '<filepath >' en el proyecto '<projectname1 >' con una referencia de
proyecto a '<projectname2 >'.
En una situación donde un proyecto hace una referencia de proyecto y una referencia de archivo, el compilador no
puede garantizar que se puede convertir un tipo a otro.
El pseudocódigo siguiente muestra una situación que puede generar este error.
' ================ Visual Basic project P1 ================
commonObject = P2.getCommonClass()
End Function
End Class
Proyecto P1 hace una referencia de proyecto indirecta a través del proyecto P2 al proyecto P3 y también una
referencia de archivos directas a P3 . La declaración de commonObject usa la referencia de archivo a P3 , mientras
que la llamada a P2.getCommonClass usa la referencia al proyecto P3 .
El problema en esta situación es que la referencia de archivo especifica una ruta de acceso y nombre del archivo de
salida de P3 (generalmente p3.dll tanto), mientras que las referencias de proyecto identifican el proyecto de origen
( P3 ) por el nombre del proyecto. Por este motivo, el compilador no puede garantizar que el tipo P3.commonClass
procede del mismo código fuente a través de las dos referencias diferentes.
Esta situación se produce normalmente cuando las referencias de proyecto y se mezclan las referencias de archivo.
En la ilustración anterior, el problema no ocurriría si P1 realiza una referencia al proyecto directo P3 en lugar de
una referencia de archivo.
Identificador de error : BC30955
Para corregir este error
Cambiar la referencia de archivo a una referencia de proyecto.
Vea también
Conversiones de tipos en Visual Basic
Administrar referencias en un proyecto
Valor de tipo '<typename1 >' no se puede convertir a
'<nombredetipo2 >' (varias referencias de archivo)
23/10/2019 • 2 minutes to read • Edit Online
Valor de tipo '<typename1 >' no se puede convertir a '<nombredetipo2 >'. Discordancia de tipos podría ser
debido a la combinación de una referencia a '<rutadeaccesodearchivo1 >' en el proyecto '<projectname1 >' con
una referencia a '<rutadeaccesodearchivo2 >' en el proyecto '<projectname2 >'. Si ambos ensamblados son
idénticos, intente reemplazar estas referencias para que ambas procedan de la misma ubicación.
En una situación donde un proyecto realiza más de una referencia de archivo a un ensamblado, el compilador no
puede garantizar que se puede convertir un tipo a otro.
Cada referencia de archivo especifica una ruta de acceso y nombre del archivo de salida de un proyecto
(normalmente un archivo DLL). El compilador no puede garantizar que los archivos de salida procedan del mismo
origen, o que representan la misma versión del mismo ensamblado. Por lo tanto, no puede garantizar que los tipos
en las distintas referencias son del mismo tipo, o incluso que uno puede convertirse a otro.
Puede usar una referencia de archivo si sabe que los ensamblados de referencia tienen la misma identidad de
ensamblado. La identidad del ensamblado incluye el nombre, la versión, la clave pública, si existe, y la referencia
cultural del ensamblado. Esta información identifica de forma exclusiva el ensamblado.
Identificador de error : BC30961
Vea también
Conversiones de tipos en Visual Basic
Administrar referencias en un proyecto
Un valor de tipo 'tipo1' no se puede convertir en
'tipo2'
23/10/2019 • 2 minutes to read • Edit Online
No se puede convertir el valor de tipo 'tipo1' a 'tipo2'. Puede usar la propiedad 'Value' para obtener el valor de
cadena del primer elemento de '<Elementoprimario >'.
Se intentó convertir implícitamente un literal XML a un tipo específico. El literal XML no se puede convertir
implícitamente al tipo especificado.
Identificador de error : BC31194
Vea también
Convert
Funciones de conversión de tipos
Literales XML
XML
La variable ' <variablename > ' oculta una variable
en un bloque de inclusión
23/10/2019 • 2 minutes to read • Edit Online
Una variable encerrada en un bloque tiene el mismo nombre que otra variable local.
IDENTIFICADOR de error : BC30616
Dim a, b, x As Integer
If a = b Then
Dim y As Integer = 20 ' Uniquely named block variable.
End If
Una causa común de este error es el uso de Catch e As Exception dentro de un controlador de eventos. En
este caso, asigne un nombre a la variable de bloque Catch ex en lugar de e .
Otro origen común de este error es un intento de obtener acceso a una variable local declarada dentro de un
bloque Try en un bloque Catch independiente. Para corregir esto, declare la variable fuera de la estructura
Try...Catch...Finally .
Vea también
Try...Catch...Finally (instrucción)
Declaración de variables
Variable '<NombreDeVariable >' se utiliza antes de
que se le ha asignado un valor
23/10/2019 • 2 minutes to read • Edit Online
Variable '<NombreDeVariable >' se utiliza antes de que se le ha asignado un valor. Podría producirse una excepción
de referencia nula en tiempo de ejecución.
Una aplicación tiene al menos una ruta de acceso posibles a través de su código que lee una variable antes de
asignar cualquier valor a él.
Si nunca se ha asignado un valor a una variable, contiene el valor predeterminado para su tipo de datos. Para un
tipo de datos de referencia, el valor predeterminado es Nothing. Leer una variable de referencia que tiene un valor
de Nothing puede producir una excepción NullReferenceException en algunas circunstancias.
De forma predeterminada, este mensaje es una advertencia. Para obtener más información sobre cómo ocultar las
advertencias o cómo tratarlas como errores, vea Configuring Warnings in Visual Basic.
Identificador de error : BC42104
Vea también
Dim (instrucción)
Declaración de variables
Solución de problemas de variables
La variable utiliza un tipo de Automation no
compatible con Visual Basic
27/11/2019 • 2 minutes to read • Edit Online
Ha intentado usar una variable definida en una biblioteca de tipos o una biblioteca de objetos que tiene un tipo de
datos no admitido por Visual Basic.
Vea también
Tipos de datos
Las propiedades del eje XML no admiten enlace en
tiempo de ejecución
23/10/2019 • 2 minutes to read • Edit Online
Se ha hecho referencia a una propiedad de eje XML para un objeto sin tipo.
Identificador de error : BC31168
Vea también
Propiedades del eje XML
XML
La excepción del comentario XML debe tener un
atributo 'cref'
23/10/2019 • 2 minutes to read • Edit Online
La etiqueta <exception > proporciona una manera de documentar las excepciones que puede producir un método.
El atributo cref necesario designa el nombre de un miembro, que se comprueba en el generador de
documentación. Si el miembro existe, se traduce al nombre de elemento canónico en el archivo de documentación.
Identificador de error : BC42319
<exception cref="member">description</exception>
Vea también
<exception>
Crear documentación XML
Etiquetas XML para comentarios
No se admiten referencias de entidad XML
23/10/2019 • 2 minutes to read • Edit Online
Una referencia de entidad (por ejemplo, © ) que no está definido en el XML 1.0 specification se incluye como un
valor de un literal XML. Solo & , " , < , > , y ' se admiten referencias de entidad XML en literales XML.
Identificador de error : BC31180
Vea también
Literales XML y la especificación XML 1.0
Literales XML
XML
No se admiten literales XML ni propiedades XML en
código incrustado en ASP.NET
23/10/2019 • 2 minutes to read • Edit Online
No se admiten literales XML ni propiedades XML en código incrustado en ASP.NET. Para usar características XML,
mueva el código al código subyacente.
Un literal XML o la propiedad de eje XML se define dentro del código incrustado ( <%= => ) en un archivo de
ASP.NET.
Identificador de error : BC31200
Vea también
Literales XML
Propiedades del eje XML
XML
URI de espacio de nombres XML
http://www.w3.org/XML/1998/namespace ; se puede
enlazar sólo a 'xmlns'
23/10/2019 • 2 minutes to read • Edit Online
El URI http://www.w3.org/XML/1998/namespace se utiliza en una declaración de espacio de nombres XML. Este URI es
un espacio de nombres reservado y no puede incluirse en una declaración de espacio de nombres XML.
Identificador de error : BC31183
Vea también
Imports (instrucción), espacio de nombres XML
Literales XML
XML
Referencia (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
En esta sección se proporcionan vínculos a información de referencia sobre diversos aspectos de la programación
de Visual Basic.
Esta sección
Referencia del lenguaje Visual Basic
Proporciona información de referencia sobre diversos aspectos del lenguaje Visual Basic.
Compilador de línea de comandos de Visual Basic
Proporciona vínculos a información sobre el compilador de línea de comandos, que proporciona una alternativa a
la compilación de programas desde el IDE de Visual Studio.
Información de referencia de .NET Framework
Proporciona vínculos a información sobre cómo trabajar con la biblioteca de clases de .NET Framework.
Especificación del lenguaje de Visual Basic
Proporciona vínculos a la especificación completa del lenguaje Visual Basic, que contiene información detallada
sobre todos los aspectos del lenguaje.
Secciones relacionadas
Elementos generales de la interfaz de usuario (Visual Studio)
Contiene temas sobre los cuadros de diálogo y las ventanas que se usan en Visual Studio.
Herramientas XML en Visual Studio
Proporciona vínculos a temas sobre diversas herramientas XML disponibles en Visual Studio.
Referencia de automatización y extensibilidad
Proporciona vínculos a temas que describen la automatización y extensibilidad en Visual Studio, tanto para
componentes compartidos como para componentes específicos del lenguaje.
Visual Basic compilador de línea de comandos
05/12/2019 • 2 minutes to read • Edit Online
En esta sección
Compilación desde la línea de comandos
Describe el Visual Basic compilador de línea de comandos, que se proporciona como una alternativa a la
compilación de programas desde el IDE de Visual Studio.
Opciones del compilador de Visual Basic, por orden alfabético
Muestra las opciones del compilador en una tabla alfabética
Opciones del compilador de Visual Basic, por categoría
Presenta las opciones del compilador en grupos funcionales.
Compilar desde la línea de comandos (Visual Basic)
27/11/2019 • 3 minutes to read • Edit Online
Un proyecto de Visual Basic se compone de uno o varios archivos de código fuente independientes. Durante el
proceso conocido como compilación, estos archivos se reúnen en un paquete, un único archivo ejecutable que se
puede ejecutar como una aplicación.
Visual Basic proporciona un compilador de línea de comandos como alternativa a la compilación de programas
desde el entorno de desarrollo integrado (IDE) de Visual Studio. El compilador de línea de comandos está diseñado
para situaciones en las que no necesita el conjunto completo de características en el IDE, por ejemplo, cuando usa o
escribe en equipos con memoria de sistema o espacio de almacenamiento limitados.
Para compilar archivos de código fuente desde el IDE de Visual Studio, elija el comando compilar en el menú
compilar .
TIP
Al compilar archivos de proyecto mediante el IDE de Visual Studio, puede mostrar información sobre el comando de VBC
asociado y sus modificadores en la ventana de salida. Para mostrar esta información, abra el cuadro de diálogo Opciones,
proyectos y soluciones, compilar y ejecutary, a continuación, establezca el nivel de detalle de la salida de la compilación del
proyecto de MSBuild en normal o en un nivel más alto de detalle. Para obtener más información, consulte Cómo: Ver,
guardar y configurar archivos de registro de compilación.
Puede compilar archivos de proyecto (. vbproj) en un símbolo del sistema mediante MSBuild. Para obtener más
información, vea referencia de la línea de comandos y Tutorial: usar MSBuild.
Esta sección
Cómo: invocar el compilador de línea de comandos
Describe cómo invocar el compilador de línea de comandos en el símbolo del sistema de MS-DOS o en un
subdirectorio específico.
Líneas de comandos de compilación de ejemplo
Proporciona una lista de líneas de comandos de ejemplo que puede modificar para su propio uso.
Secciones relacionadas
Compilador de línea de comandos de Visual Basic
Proporciona listas de opciones del compilador organizadas en orden alfabético o por propósito.
\ de compilación condicional
Compilar y limpiar proyectos y soluciones en Visual Studio
Describe cómo organizar lo que se incluirá en compilaciones diferentes, elegir las propiedades del proyecto y
asegurarse de que los proyectos se compilan en el orden correcto.
Cómo: Invocar al compilador de la línea de
comandos (Visual Basic)
27/11/2019 • 5 minutes to read • Edit Online
Puede invocar el compilador de línea de comandos escribiendo el nombre de su archivo ejecutable en la línea de
comandos, también conocido como el símbolo del sistema de MS-DOS. Si compila desde el símbolo del sistema de
Windows predeterminado, debe escribir la ruta de acceso completa al archivo ejecutable. Para invalidar este
comportamiento predeterminado, puede usar el Símbolo del sistema para desarrolladores para Visual Studio o
modificar la variable de entorno PATH. Ambos permiten compilar desde cualquier directorio simplemente
escribiendo el nombre del compilador.
NOTE
Es posible que el equipo muestre nombres o ubicaciones diferentes para algunos de los elementos de la interfaz de usuario
de Visual Studio en las siguientes instrucciones. La edición de Visual Studio que se tenga y la configuración que se utilice
determinan estos elementos. Para obtener más información, vea Personalizar el IDE.
Vea también
Compilador de línea de comandos de Visual Basic
Compilación condicional
Líneas de comandos de compilación de ejemplo
(Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Como alternativa a la compilación de programas Visual Basic desde Visual Studio, puede compilar desde la
línea de comandos para generar archivos ejecutables (. exe) o archivos de biblioteca de vínculos dinámicos (.
dll).
El compilador de línea de comandos de Visual Basic admite un conjunto completo de opciones que
controlan los archivos de entrada y salida, los ensamblados y las opciones de depuración y preprocesador.
Cada opción está disponible en dos formas intercambiables: -option y /option . En esta documentación
solo se muestra el formulario -option .
En la tabla siguiente se enumeran algunas líneas de comandos de ejemplo que puede modificar para su
propio uso.
PA RA USO
Compilar todos los archivos Visual Basic en el directorio vbc -define:DEBUG=1 -optimize -out:File2.exe *.vb
actual, con optimizaciones en y el símbolo de DEBUG
definido, produciendo archivo2. exe
Compilar todos los archivos Visual Basic en el directorio vbc -target:library -out:File2.dll -nowarn -
actual, generando una versión de depuración de archivo2. nologo -debug *.vb
dll sin mostrar el logotipo o las advertencias
Compilar todos los archivos Visual Basic del directorio vbc -target:library -out:Something.dll *.vb
actual en un archivo. dll
TIP
Al compilar un proyecto mediante el IDE de Visual Studio, puede mostrar información sobre el comando de VBC
asociado con sus opciones del compilador en la ventana salida. Para mostrar esta información, abra el cuadro de
diálogo Opciones, proyectos y soluciones, compilar y ejecutary, a continuación, establezca el nivel de detalle de la
salida de la compilación del proyecto de MSBuild en normal o en un nivel más alto de detalle.
Vea también
Compilador de línea de comandos de Visual Basic
Compilación condicional
Visual Basic opciones del compilador por orden
alfabético
15/01/2020 • 8 minutes to read • Edit Online
El compilador de línea de comandos de Visual Basic se proporciona como una alternativa a la compilación de
programas desde el entorno de desarrollo integrado (IDE) de Visual Studio. A continuación se muestra una lista de
las opciones del compilador de la línea de comandos Visual Basic ordenadas alfabéticamente.
Cada opción del compilador está disponible en dos formatos: -option y /option . En la documentación solo se
muestra el formato -option.
O P C IÓ N F IN A L IDA D
Vea también
Opciones del compilador de Visual Basic, por categoría
Administración de propiedades de soluciones y proyectos
@ (Especificar archivo de respuesta, Visual Basic)
27/11/2019 • 3 minutes to read • Edit Online
Especifica un archivo que contiene las opciones del compilador y los archivos de código fuente que se van a
compilar.
Sintaxis
@response_file
Argumentos
response_file
Obligatorio. Archivo que muestra las opciones del compilador o los archivos de código fuente que se van a
compilar. Escriba el nombre de archivo entre comillas ("") si contiene un espacio.
Comentarios
El compilador procesa las opciones del compilador y los archivos de código fuente especificados en un archivo de
respuesta como si hubieran sido especificados en la línea de comandos.
Para especificar más de un archivo de respuesta en una compilación, especifique varias opciones de archivo de
respuesta, como las siguientes.
@file1.rsp @file2.rsp
En un archivo de respuesta, pueden aparecer varias opciones del compilador y archivos de código fuente en una
sola línea. Una única especificación de opción de compilador debe aparecer en una línea (no puede abarcar varias
líneas). Los archivos de respuesta pueden tener comentarios que comienzan por el símbolo # .
Puede combinar las opciones especificadas en la línea de comandos con las opciones especificadas en uno o
varios archivos de respuesta. El compilador procesa las opciones de comando a medida que las encuentra. Por lo
tanto, los argumentos de la línea de comandos pueden reemplazar las opciones enumeradas anteriormente en
archivos de respuesta. Por el contrario, las opciones de un archivo de respuesta invalidan las opciones enumeradas
anteriormente en la línea de comandos o en otros archivos de respuesta.
Visual Basic proporciona el archivo Vbc. RSP, que se encuentra en el mismo directorio que el archivo Vbc. exe. El
archivo Vbc. rsp se incluye de forma predeterminada a menos que se use la opción -noconfig . Para obtener más
información, vea -noconfig.
NOTE
La opción @ no está disponible en el entorno de desarrollo de Visual Studio; solo está disponible al compilar desde la línea
de comandos.
Ejemplo
Las líneas siguientes proceden de un archivo de respuesta de ejemplo.
# build the first output file
-target:exe
-out:MyExe.exe
source1.vb
source2.vb
Ejemplo
En el ejemplo siguiente se muestra cómo usar la opción @ con el archivo de respuesta denominado File1.rsp .
vbc @file1.rsp
Vea también
Compilador de línea de comandos de Visual Basic
-noconfig
Líneas de comandos de compilación de ejemplo
-addmodule
23/10/2019 • 2 minutes to read • Edit Online
Hace que el compilador facilite al proyecto que se está compilando toda la información de tipos presente en los
archivos especificados.
Sintaxis
-addmodule:fileList
Argumentos
fileList
Requerido. Lista delimitada por comas de archivos que contienen metadatos, pero que no contienen manifiestos
de ensamblado. Los nombres de archivo que contienen espacios deben ir entre comillas ("").
Comentarios
Los archivos enumerados por el parámetro fileList se deben crear con la opción -target:module o con otro
equivalente del compilador para -target:module .
Todos los módulos agregados con -addmodule deben estar en el mismo directorio que el archivo de salida en
tiempo de ejecución. Es decir, puede especificar un módulo en cualquier directorio en tiempo de compilación,
pero el módulo debe estar en el directorio de la aplicación en tiempo de ejecución. Si no es así, obtendrá un error
de TypeLoadException.
Si se especifica (implícita o explícitamente) una opciónde destino (Visual Basic) distinta de -target:module con
-addmodule , los archivos que se pasan a -addmodule forman parte del ensamblado del proyecto. Se requiere un
ensamblado para ejecutar un archivo de salida que tiene uno o más archivos agregados con -addmodule .
Use -Reference (Visual Basic) para importar metadatos de un archivo que contiene un ensamblado.
NOTE
La opción -addmodule no está disponible en el entorno de desarrollo de Visual Studio; solo está disponible al compilar
desde la línea de comandos.
Ejemplo
En el código siguiente se crea un módulo.
' t1.vb
' Compile with vbc /target:module t1.vb.
' Outputs t1.netmodule.
' t2.vb
' Compile with vbc /addmodule:t1.netmodule t2.vb.
Option Strict Off
Namespace NetmoduleTest
Module Module1
Sub Main()
Dim x As TestClass
x = New TestClass
x.i = 802
System.Console.WriteLine(x.i)
End Sub
End Module
End Namespace
Vea también
Compilador de línea de comandos de Visual Basic
-Target (Visual Basic)
-Reference (Visual Basic)
Líneas de comandos de compilación de ejemplo
-baseaddress
23/10/2019 • 2 minutes to read • Edit Online
Sintaxis
-baseaddress:address
Argumentos
T ÉRM IN O DEF IN IC IÓ N
Comentarios
La dirección base predeterminada para un archivo DLL se establece mediante el .NET Framework.
Tenga en cuenta que la palabra de orden inferior de esta dirección se redondea. Por ejemplo, si especifica
0x11110001, se redondea a 0x11110000.
Para completar el proceso de firma de un archivo DLL, use la opción –R de la herramienta de nombres seguros
(SN. exe).
Esta opción se omite si el destino no es un archivo DLL.
Vea también
Compilador de línea de comandos de Visual Basic
-Target (Visual Basic)
Líneas de comandos de compilación de ejemplo
SN. exe (herramienta de nombre seguro))
-bugreport
31/01/2020 • 4 minutes to read • Edit Online
Sintaxis
-bugreport:file
Argumentos
T ÉRM IN O DE ESQ UEM A JSO N
Notas
La siguiente información se agrega a file :
Una copia de todos los archivos de código fuente en la compilación.
Una lista de las opciones del compilador utilizadas en la compilación.
Información de versión sobre el compilador, el Common Language Runtime y el sistema operativo.
Resultados del compilador, si los hay.
Una descripción del problema, para el que se le solicita.
Una descripción de cómo cree que el problema debe corregirse, para lo que se le solicita.
Dado que una copia de todos los archivos de código fuente se incluye en file , puede que desee reproducir el
defecto de código (sospechoso) en el programa más corto posible.
IMPORTANT
La opción -bugreport genera un archivo que contiene información potencialmente confidencial. Esto incluye la hora actual,
la versión del compilador, la versión .NET Framework, la versión del sistema operativo, el nombre de usuario, los argumentos
de línea de comandos con los que se ejecutó el compilador, todo el código fuente y el formato binario de cualquier
ensamblado al que se hace referencia. Se puede tener acceso a esta opción si se especifican las opciones de línea de
comandos en el archivo Web. config para una compilación del lado servidor de una aplicación ASP.NET. Para evitarlo,
modifique el archivo Machine. config para que no permita a los usuarios compilar en el servidor.
NOTE
La opción -bugreport no está disponible en el entorno de desarrollo de Visual Studio; solo está disponible cuando se
compila desde la línea de comandos.
Ejemplo
En el ejemplo siguiente se compila T2. VB y se coloca toda la información de informes de errores en el archivo
Problem. txt.
Vea también
Compilador de línea de comandos de Visual Basic
-debug (Visual Basic)
-errorreport
Líneas de comandos de compilación de ejemplo
trustLevel (elemento) para securityPolicy (esquema de configuración de ASP.NET)
-codePage (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Especifica la página de códigos que se va a utilizar para todos los archivos de código fuente en la compilación.
Sintaxis
-codepage:id
Argumentos
T ÉRM IN O DEF IN IC IÓ N
Comentarios
Para compilar el código fuente guardado con una codificación específica, puede usar -codepage para especificar
qué página de códigos debe usarse. La opción -codepage se aplica a todos los archivos de código fuente de la
compilación. Para obtener más información, vea codificación de caracteres en el .NET Framework.
La opción -codepage no es necesaria si los archivos de código fuente se guardaron mediante la página de códigos
ANSI actual, Unicode o UTF-8 con una firma. De forma predeterminada, Visual Studio guarda todos los archivos de
código fuente con la página de códigos ANSI actual, a menos que el usuario especifique otra codificación en el
cuadro de diálogo codificación . Visual Studio usa el cuadro de diálogo codificación para abrir los archivos de
código fuente guardados con una página de códigos diferente.
NOTE
La opción -codepage no está disponible en el entorno de desarrollo de Visual Studio; solo está disponible al compilar desde
la línea de comandos.
Vea también
Compilador de línea de comandos de Visual Basic
-debug (Visual Basic)
10/01/2020 • 2 minutes to read • Edit Online
Hace que el compilador genere información de depuración y la coloque en los archivos de salida.
Sintaxis
-debug[+ | -]
-debug:[full | pdbonly]
Argumentos
T ÉRM IN O DE ESQ UEM A JSO N
Notas
Use esta opción para crear versiones de depuración. Si no especifica -debug , -debug+ o -debug:full , no podrá
depurar el archivo de salida del programa.
De forma predeterminada, no se emite información de depuración ( -debug- ). Para emitir información de
depuración, especifique -debug o -debug+ .
Para obtener información sobre cómo configurar el rendimiento de depuración de una aplicación, consulte
Facilitar la depuración de una imagen.
1. con un proyecto seleccionado en Explorador de soluciones , en el menú proyecto , haga clic en propiedades .
2. Haga clic en la pestaña compilar .
3. Haga clic en Opciones de compilación avanzadas .
4. modifique el valor en el cuadro generar información de depuración .
Ejemplo
En el ejemplo siguiente se coloca información de depuración en el archivo de salida App.exe .
Vea también
Compilador de línea de comandos de Visual Basic
-bugreport
Líneas de comandos de compilación de ejemplo
-define (Visual Basic)
10/01/2020 • 2 minutes to read • Edit Online
Sintaxis
-define:["]symbol[=value][,symbol[=value]]["]
-d:["]symbol[=value][,symbol[=value]]["]
Argumentos
T ÉRM IN O DE ESQ UEM A JSO N
Notas
La opción -define tiene un efecto similar al uso de una directiva de preprocesador de #Const en el archivo de
código fuente, con la excepción de que las constantes definidas con -define son públicas y se aplican a todos los
archivos del proyecto.
Los símbolos creados por esta opción se pueden usar con la directiva #If ... Then ... #Else para compilar archivos
de origen condicionalmente.
-d es la forma abreviada de -define .
Se pueden definir varios símbolos con -define ; use una coma para separar las definiciones de símbolos.
1. tener un proyecto seleccionado en Explorador de soluciones . En el menú Proyecto , haga clic en Propiedades .
2. Haga clic en la pestaña compilar .
3. Haga clic en avanzadas .
4. modifique el valor en el cuadro constantes personalizadas .
Ejemplo
En el siguiente código se definen y usan dos constantes de compilador condicionales.
' Vbc /define:DEBUGMODE=True,TRAPERRORS=False test.vb
Sub mysub()
#If debugmode Then
' Insert debug statements here.
MsgBox("debug mode")
#Else
' Insert default statements here.
#End If
End Sub
Vea también
Compilador de línea de comandos de Visual Basic
#If...Then...#Else (directivas)
#Const (directiva)
Líneas de comandos de compilación de ejemplo
-delaysign
23/10/2019 • 2 minutes to read • Edit Online
Sintaxis
-delaysign[+ | -]
Argumentos
+ | -
Opcional. Use -delaysign- para firmar completamente un ensamblado. Use -delaysign+ si desea colocar la clave
pública en el ensamblado y reservar espacio para el hash firmado. De manera predeterminada, es -delaysign- .
Comentarios
La opción -delaysign no tiene ningún efecto a menos que se use con -keyfile o -keycontainer.
Cuando se solicita un ensamblado totalmente firmado, el compilador genera un valor hash para el archivo que
contiene el manifiesto (metadatos del ensamblado) y firma dicho valor mediante la clave privada. La firma digital
resultante se almacena en el archivo que contiene el manifiesto. Cuando se retrasa la firma de un ensamblado, el
compilador no calcula ni almacena la firma, sino que reserva espacio en el archivo para que la firma se pueda
agregar más tarde.
Por ejemplo, mediante el uso de -delaysign+ , un desarrollador de una organización puede distribuir versiones de
prueba sin firmar de un ensamblado que los evaluadores pueden registrar con la caché global de ensamblados y
usar. Cuando se completa el trabajo en el ensamblado, la persona responsable de la clave privada de la
organización puede firmar completamente el ensamblado. Esta compartimentación protege la clave privada de la
organización contra la divulgación, a la vez que permite que todos los desarrolladores trabajen en los
ensamblados.
Vea crear y utilizar ensamblados con nombre seguro para obtener más información sobre la firma de un
ensamblado.
Para establecer-delaysign en el entorno de desarrollo integrado de Visual Studio
1. Seleccione un proyecto en el Explorador de soluciones . En el menú Proyecto , haga clic en
Propiedades .
2. Haga clic en la pestaña Firma .
3. Establezca el valor en el cuadro retrasar solo firmar .
Vea también
Compilador de línea de comandos de Visual Basic
-keyfile
-keycontainer
Líneas de comandos de compilación de ejemplo
-deterministic
10/01/2020 • 3 minutes to read • Edit Online
Hace que el compilador genere un ensamblado cuya salida byte a byte es idéntica en todas las compilaciones para
las entradas idénticas.
Sintaxis
-deterministic
Notas
De forma predeterminada, la salida del compilador para un conjunto determinado de entradas es única, ya que el
compilador agrega una marca de tiempo y un GUID que se genera a partir de números aleatorios. Use la opción
-deterministic para generar un ensamblado determinista, cuyo contenido binario es idéntico en todas las
compilaciones, siempre y cuando la entrada siga siendo la misma.
El compilador tiene en cuenta las entradas siguientes con el fin de garantizar el determinismo:
La secuencia de parámetros de la línea de comandos.
El contenido del archivo de respuesta .rsp del compilador.
La versión exacta del compilador que se usa y los ensamblados a los que se hace referencia.
La ruta de acceso del directorio actual.
El contenido binario de todos los archivos pasados explícitamente al compilador, ya sea de manera directa o
indirecta, incluidos los siguientes:
Archivos de código fuente
Ensamblados a los que se hace referencia
Módulos a los que se hace referencia
Recursos
Archivo de clave de nombre seguro
Archivos de respuesta @
Analizadores
Conjuntos de reglas
Archivos adicionales que podrían usar los analizadores
La referencia cultural actual (para el idioma en el que se producen los diagnósticos y los mensajes de
excepción).
La codificación predeterminada (o página de códigos actual) si no se especifica la codificación.
La existencia (o la inexistencia) de archivos y su contenido en las rutas de búsqueda del compilador
(especificada, por ejemplo, mediante -lib o -recurse ).
La plataforma CLR en la que se ejecuta el compilador.
El valor de %LIBPATH% , que pueden afectar a la carga de dependencias del analizador.
Cuando los orígenes están disponibles públicamente, se puede usar la compilación determinista para establecer si
un archivo binario se compila a partir de una fuente de confianza. También puede ser útil en un sistema de
compilación continua para determinar si es necesario ejecutar pasos de compilación que dependen de los cambios
realizados en un archivo binario.
Vea también
Compilador de línea de comandos de Visual Basic
Líneas de comandos de compilación de ejemplo
-doc
10/01/2020 • 4 minutes to read • Edit Online
Sintaxis
-doc[+ | -]
-doc:file
Argumentos
T ÉRM IN O DE ESQ UEM A JSO N
Notas
La opción -doc controla si el compilador genera un archivo XML que contiene los comentarios de
documentación. Si usa la sintaxis -doc:file , el parámetro file especifica el nombre del archivo XML. Si
usa -doc o -doc+ , el compilador toma el nombre del archivo XML desde el archivo ejecutable o la
biblioteca que el compilador va a crear. Si usa -doc- o no especifica la opción -doc , el compilador no
crea un archivo XML.
En los archivos de código fuente, los comentarios de documentación pueden preceder a las siguientes
definiciones:
Tipos definidos por el usuario como una clase o una interfaz
Miembros, como un campo, un evento, una propiedad, una función o una subrutina.
Para usar el archivo XML generado con la característica IntelliSense de Visual Studio, deje que el nombre
del archivo XML sea igual que el del ensamblado que quiere admitir. Asegúrese de que el archivo XML se
encuentra en el mismo directorio que el ensamblado, para que cuando se haga referencia al ensamblado
en el proyecto de Visual Studio, también se encuentre el archivo .xml. Los archivos de documentación XML
no son necesarios para que IntelliSense funcione para el código dentro de un proyecto o de los proyectos
a los que el proyecto hace referencia.
A menos que compile con -target:module , el archivo XML contiene las etiquetas <assembly></assembly> .
Estas etiquetas especifican el nombre del archivo que contiene el manifiesto del ensamblado para el
archivo de salida de la compilación.
Vea Etiquetas XML para comentarios para conocer las maneras de generar documentación a partir de
comentarios en el código.
1. tener un proyecto seleccionado en Explorador de soluciones . En el menú Proyecto , haga clic en Propiedades .
2. Haga clic en la pestaña compilar .
3. establezca el valor en el cuadro generar archivo de documentación XML .
Ejemplo
Vea Documentar el código con XML (Visual Basic) para obtener un ejemplo.
Vea también
Compilador de línea de comandos de Visual Basic
Documentar el código con XML
-errorreport
24/10/2019 • 4 minutes to read • Edit Online
Especifica cómo el compilador de Visual Basic debe informar de los errores internos del compilador.
Sintaxis
-errorreport:{ prompt | queue | send | none }
Comentarios
Esta opción proporciona una manera cómoda de notificar un Visual Basic error interno del compilador (ICE) al
equipo de Visual Basic en Microsoft. De forma predeterminada, el compilador no envía información a Microsoft.
Sin embargo, si se produce un error interno del compilador, esta opción le permite notificar el error a Microsoft.
Esa información ayudará a los ingenieros de Microsoft a identificar la causa y puede ayudar a mejorar la próxima
versión de Visual Basic.
La capacidad de un usuario para enviar informes depende de los permisos de directiva de usuario y equipo.
En la tabla siguiente se resume el efecto de la opción -errorreport .
O P C IÓ N C O M P O RTA M IEN TO
El compilador envía datos que incluyen la pila en el momento del error, que normalmente incluye algún código
fuente. Si -errorreport se usa con la opción -bugreport ( , se envía el archivo de código fuente completo.
Esta opción se utiliza mejor con la opción -bugreport ( , ya que permite a los ingenieros de Microsoft reproducir el
error más fácilmente.
NOTE
La opción -errorreport no está disponible en el entorno de desarrollo de Visual Studio; solo está disponible al compilar
desde la línea de comandos.
Ejemplo
El código siguiente intenta compilar T2.vb y, si el compilador encuentra un error interno del compilador, le pedirá
que envíe el informe de errores a Microsoft.
Vea también
Compilador de línea de comandos de Visual Basic
Líneas de comandos de compilación de ejemplo
-bugreport
-filealign
23/10/2019 • 2 minutes to read • Edit Online
Sintaxis
-filealign:number
Argumentos
number
Obligatorio. Valor que especifica la alineación de las secciones del archivo de salida. Los valores válidos son 512,
1024, 2048, 4096 y 8192. Estos valores están en bytes.
Comentarios
Puede usar la opción -filealign para especificar la alineación de las secciones en el archivo de salida. Las
secciones son bloques de memoria contigua en un archivo portable ejecutable (PE) que contiene código o datos. La
opción -filealign le permite compilar la aplicación con una alineación no estándar. la mayoría de los
desarrolladores no necesitan usar esta opción.
Cada sección está alineada en un límite que es un múltiplo del valor -filealign . No hay ningún valor
predeterminado fijo. Si no se especifica -filealign , el compilador elige un valor predeterminado en tiempo de
compilación.
Al especificar el tamaño de la sección, puede cambiar el tamaño del archivo de salida. Modificar el tamaño de la
sección puede ser útil para los programas que se ejecutan en dispositivos más pequeños.
NOTE
La opción -filealign no está disponible en el entorno de desarrollo de Visual Studio; solo está disponible al compilar
desde la línea de comandos.
Vea también
Compilador de línea de comandos de Visual Basic
-help, -? (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Sintaxis
-help
-?
Comentarios
Si incluye esta opción en una compilación, no se crea ningún archivo de salida y no se realiza ninguna
compilación.
NOTE
La opción -help no está disponible en el entorno de desarrollo de Visual Studio; solo está disponible al compilar desde la
línea de comandos.
Ejemplo
En el código siguiente se muestra la ayuda desde la línea de comandos.
vbc -help
Vea también
Compilador de línea de comandos de Visual Basic
Líneas de comandos de compilación de ejemplo
-highentropyva (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Indica si un archivo ejecutable de 64 bits o un archivo ejecutable que está marcado con la opción del compilador -
Platform: AnyCPU admite la selección aleatoria del diseño del espacio de direcciones (ASLR) de alta entropía.
Sintaxis
-highentropyva[+ | -]
Argumentos
+ | -
Opcional. La opción está desactivada de forma predeterminada o si se especifica -highentropyva- . La opción está
activada si se especifica -highentropyva o -highentropyva+ .
Comentarios
Si especifica esta opción, las versiones compatibles del kernel de Windows pueden usar los mayores grados de
entropía cuando el kernel Aleatoriza el diseño del espacio de direcciones de un proceso como parte de ASLR. Si el
kernel usa mayores grados de entropía, se puede asignar un número mayor de direcciones a las regiones de
memoria, como pilas y montones. Como resultado, la ubicación de un área de memoria específica es más difícil de
adivinar.
Cuando la opción está activada, el archivo ejecutable de destino y todos los módulos de los que depende deben ser
capaces de controlar los valores de puntero que son superiores a 4 gigabytes (GB) cuando dichos módulos se
ejecutan como procesos de 64 bits.
Vea también
Compilador de línea de comandos de Visual Basic
Líneas de comandos de compilación de ejemplo
-Imports (Visual Basic)
10/01/2020 • 2 minutes to read • Edit Online
Sintaxis
-imports:namespaceList
Argumentos
T ÉRM IN O DE ESQ UEM A JSO N
Notas
La opción -imports importa cualquier espacio de nombres definido en el conjunto actual de archivos de código
fuente o desde cualquier ensamblado al que se hace referencia.
Los miembros de un espacio de nombres especificado con -imports están disponibles para todos los archivos de
código fuente de la compilación. Use la instrucción Imports (espacio de nombres y tipo de .net) para usar un
espacio de nombres en un solo archivo de código fuente.
1. tener un proyecto seleccionado en Explorador de soluciones . En el menú Proyecto , haga clic en Propiedades .
2. Haga clic en la pestaña referencias .
3. Escriba el nombre del espacio de nombres en el cuadro situado junto al botón Agregar impor tación de usuario .
4. Haga clic en el botón Agregar impor tación de usuario .
Ejemplo
El siguiente código se compila cuando se especifica -imports:system.globalization . Sin él, la compilación correcta
requiere que una instrucción Imports System.Globalization esté incluida al principio del archivo de código fuente,
o que la propiedad esté completa como System.Globalization.CultureInfo.CurrentCulture.Name .
Module Example
Public Sub Main()
Console.WriteLine($"The current culture is {CultureInfo.CurrentCulture.Name}")
End Sub
End Module
Vea también
Compilador de línea de comandos de Visual Basic
Referencias y la instrucción Imports
Líneas de comandos de compilación de ejemplo
-keycontainer
23/10/2019 • 2 minutes to read • Edit Online
Especifica un nombre de contenedor de claves para un par de claves que asigna un nombre seguro al
ensamblado.
Sintaxis
-keycontainer:container
Argumentos
T ÉRM IN O DEF IN IC IÓ N
Comentarios
El compilador crea el componente compartible insertando una clave pública en el manifiesto del ensamblado y
firma el ensamblado final con la clave privada. Para generar un archivo de claves, escriba sn -k file en la línea
de comandos. La opción -i instala el par de claves en un contenedor. Para obtener más información, consulte
SN. exe (herramienta de nombre seguro)).
Si compila con -target:module , el nombre del archivo de clave se mantiene en el módulo y se incorpora en el
ensamblado que se crea al compilar un ensamblado con -AddModule.
También se puede especificar esta opción como un atributo personalizado (AssemblyKeyNameAttribute) en el
código fuente de cualquier módulo del Lenguaje Intermedio de Microsoft (MSIL).
También se puede pasar la información de cifrado al compilador con -keyfile. Use -delaysign para firmar el
ensamblado de forma parcial.
Vea crear y utilizar ensamblados con nombre seguro para obtener más información sobre la firma de un
ensamblado.
NOTE
La opción -keycontainer no está disponible en el entorno de desarrollo de Visual Studio; solo está disponible al compilar
desde la línea de comandos.
Ejemplo
En el código siguiente se compila el archivo de código fuente Input.vb y se especifica un contenedor de claves.
Especifica un archivo que contiene una clave o un par de claves que asigna un nombre seguro al ensamblado.
Sintaxis
-keyfile:file
Argumentos
file
Necesario. Archivo que contiene la clave. Si el nombre de archivo contiene un espacio, escriba el nombre entre
comillas (" ").
Observaciones
El compilador inserta la clave pública en el manifiesto del ensamblado y, a continuación, firma el ensamblado
final con la clave privada. Para generar un archivo de claves, escriba sn -k file en la línea de comandos. Para
obtener más información, vea Sn.exe (Strong Name Tool)).
Si compila -target:module con , el nombre del archivo de claves se mantiene en el módulo y se incorpora al
ensamblado que se crea al compilar un ensamblado con -addmodule.
También puede pasar la información de cifrado al compilador con -keycontainer. Use -delaysign para firmar el
ensamblado de forma parcial.
También puede especificar esta opción comoAssemblyKeyFileAttributeun atributo personalizado ( ) en el código
fuente para cualquier módulo de lenguaje intermedio de Microsoft.
En caso -keyfile de que se especifiquen ambos y -keycontainer (ya sea por opción de línea de comandos o por
atributo personalizado) en la misma compilación, el compilador primero intenta el contenedor de claves. Si lo
consigue, el ensamblado se firma con la información del contenedor de claves. Si el compilador no encuentra el
contenedor de claves, intenta el archivo especificado con -keyfile . Si esto se realiza correctamente, el
ensamblado se firma con la información del archivo de sn -i claves y la información de clave se instala en el
contenedor de claves (similar a ) para que en la siguiente compilación, el contenedor de claves será válido.
Tenga en cuenta que un archivo de clave puede contener solo la clave pública.
Consulte Creación y uso de ensamblados con nombre seguro para obtener más información sobre la firma de un
ensamblado.
NOTE
La -keyfile opción no está disponible en el entorno de desarrollo de Visual Studio; sólo está disponible cuando se
compila desde la línea de comandos.
Ejemplo
El código siguiente compila Input.vb el archivo de código fuente y especifica un archivo de clave.
vbc -keyfile:myfile.sn input.vb
Consulte también
Ensamblados de .NET
Compilador de línea de comandos de Visual Basic
-referencia (Visual Basic)
Líneas de comandos de compilación de ejemplo
-langversion (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Hace que el compilador acepte solo la sintaxis que se incluye en la versión de idioma de Visual Basic especificada.
Sintaxis
-langversion:version
Argumentos
version
Obligatorio. Versión de idioma que se va a usar durante la compilación. Los valores aceptados son 9 , 10 , 11 ,
12 , 14 , 15 , 15.3 , 15.5 , default y latest .
También se puede especificar cualquiera de los números enteros mediante .0 como la versión secundaria, por
ejemplo, 11.0 .
Puede ver la lista de todos los valores posibles si especifica -langversion:? en la línea de comandos.
Comentarios
La opción -langversion especifica qué sintaxis acepta el compilador. Por ejemplo, si especifica que la versión de
lenguaje es 9,0, el compilador genera errores para la sintaxis que solo es válida en la versión 10,0 y posteriores.
Puede usar esta opción cuando desarrolle aplicaciones destinadas a versiones diferentes del .NET Framework. Por
ejemplo, si tiene como destino .NET Framework 3,5, puede usar esta opción para asegurarse de que no usa la
sintaxis de la versión 10,0 del lenguaje.
Solo puede establecer -langversion directamente mediante la línea de comandos. Para más información, vea
Elegir una versión específica de .NET Framework.
Ejemplo
El código siguiente compila sample.vb para Visual Basic 9,0.
Vea también
Compilador de línea de comandos de Visual Basic
Líneas de comandos de compilación de ejemplo
Elegir una versión específica de .NET Framework
-libpath
10/01/2020 • 2 minutes to read • Edit Online
Sintaxis
-libpath:dirList
Argumentos
T ÉRM IN O DE ESQ UEM A JSO N
Notas
La opción -libpath especifica la ubicación de los ensamblados a los que hace referencia la opción -Reference .
El compilador busca referencias a ensamblados que no presentan la ruta completa en el siguiente orden:
1. Directorio de trabajo actual. Es el directorio desde donde se invoca al compilador.
2. El directorio del sistema de Common Language Runtime.
3. Directorios especificados por -libpath .
4. Directorios especificados por la variable de entorno LIB.
La opción -libpath es aditiva; Si se especifica más de una vez, se anexa a los valores anteriores.
Use -reference para especificar una referencia de ensamblado.
1. tener un proyecto seleccionado en Explorador de soluciones . En el menú Proyecto , haga clic en Propiedades .
2. Haga clic en la pestaña referencias .
3. Haga clic en el botón rutas de acceso de referencia ....
4. en el cuadro de diálogo rutas de acceso de referencia , escriba el nombre del directorio en el cuadro carpeta: .
5. Haga clic en Agregar carpeta .
Ejemplo
El código siguiente compila T2.vb para crear un archivo. exe. El compilador busca en el directorio de trabajo, en el
directorio raíz de la unidad C:, y en el directorio New assemblies de la unidad C: para las referencias de
ensamblado.
vbc -libpath:c:\;"c:\New Assemblies" -reference:t2.dll t2.vb
Vea también
Ensamblados de .NET
Compilador de línea de comandos de Visual Basic
Líneas de comandos de compilación de ejemplo
-Link (Visual Basic)
10/01/2020 • 7 minutes to read • Edit Online
Hace que el compilador facilite al proyecto que se está compilando información de tipos COM en los ensamblados
especificados.
Sintaxis
-link:fileList
-l:fileList
Argumentos
T ÉRM IN O DE ESQ UEM A JSO N
Notas
La opción -link permite implementar una aplicación que tiene información de tipo incrustada. La aplicación
puede usar los tipos de un ensamblado en tiempo de ejecución que implementan la información de tipo
incrustada sin necesidad de una referencia al ensamblado en tiempo de ejecución. Si hay varias versiones del
ensamblado en tiempo de ejecución publicadas, la aplicación que contiene la información de tipo incrustada puede
trabajar con las distintas versiones sin tener que volver a compilar. Para obtener un ejemplo, vea Tutorial: Incrustar
los tipos de los ensamblados administrados.
La opción -link resulta de especial utilidad cuando se trabaja con la interoperabilidad COM. Puede incrustar
tipos COM para que la aplicación ya no necesite un ensamblado de interoperabilidad primario (PIA) en el equipo
de destino. La opción -link indica al compilador que incruste la información de tipo COM del ensamblado de
interoperabilidad al que se hace referencia en el código compilado resultante. El tipo COM se identifica mediante
el valor de CLSID (GUID). Como resultado, la aplicación se puede ejecutar en un equipo de destino que tenga
instalados los mismos tipos COM con los mismos valores de CLSID. Las aplicaciones que automatizan Microsoft
Office son un buen ejemplo. Dado que las aplicaciones como Office suelen mantener el mismo valor de CLSID en
las distintas versiones, la aplicación puede usar los tipos COM a los que se hace referencia siempre que .NET
Framework 4 o posterior esté instalado en el equipo de destino y la aplicación emplee métodos, propiedades o
eventos que estén incluidos en los tipos COM a los que se hace referencia.
La opción -link incrusta únicamente interfaces, estructuras y delegados. No se admite la incrustación de clases
COM.
NOTE
Cuando se crea una instancia de un tipo COM incrustado en el código, hay que crear la instancia mediante la interfaz
adecuada. Si se intenta crear una instancia de un tipo COM incrustado mediante la coclase, se produce un error.
Para establecer la opción -link en Visual Studio, agregue una referencia de ensamblado y establezca la
propiedad Embed Interop Types en true . El valor predeterminado de la propiedad Embed Interop Types es false .
Si vincula a un ensamblado COM (ensamblado A) que a su vez hace referencia a otro ensamblado COM
(ensamblado B), también debe vincular al ensamblado B si se cumple alguna de las siguientes condiciones:
Un tipo del ensamblado A hereda de un tipo o implementa una interfaz del ensamblado B.
Se invoca a un campo, una propiedad, un evento o un método que tiene un tipo de parámetro o un tipo de
valor devuelto del ensamblado B.
Use -LIBPATH para especificar el directorio en el que se encuentran una o varias de las referencias de ensamblado.
Al igual que la opción del compilador -Reference , la opción del compilador -link usa el archivo de respuesta
VBC. RSP, que hace referencia a los ensamblados .NET Framework utilizados con frecuencia. Use la opción del
compilador -noconfig si no desea que el compilador use el archivo Vbc. rsp.
La forma abreviada de -link es -l .
' The following code causes an error if ISampleInterface is an embedded interop type.
Dim sample As ISampleInterface(Of SampleType)
Imports System.Collections.Generic
Imports Microsoft.Office.Interop.Excel
Class Utility
' The following code causes an error when called by a client assembly.
Public Function GetRange1() As List(Of Range)
End Function
' The following code is valid for calls from a client assembly.
Public Function GetRange2() As IList(Of Range)
End Function
End Class
En el ejemplo siguiente, el código de cliente puede llamar al método que devuelve la interfaz genérica IList sin
errores.
Module Client
Public Sub Main()
Dim util As New Utility()
Ejemplo
La línea de comandos siguiente compila los ensamblados de referencia y OfficeApp.vb de archivos de origen de
COMData1.dll y COMData2.dll para generar OfficeApp.exe .
Vea también
Compilador de línea de comandos de Visual Basic
Tutorial: Incrustación de los tipos de los ensamblados administrados
-Reference (Visual Basic)
-noconfig
-libpath
Líneas de comandos de compilación de ejemplo
Introducción a la interoperabilidad COM
-linkresource ((Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Sintaxis
-linkresource:filename[,identifier[,public|private]]
-linkres:filename[,identifier[,public|private]]
Argumentos
filename
Obligatorio. Archivo de recursos que se va a vincular al ensamblado. Si el nombre de archivo contiene un espacio,
incluya el nombre entre comillas ("").
identifier
Opcional. Nombre lógico del recurso. Nombre que se usa para cargar el recurso. El valor predeterminado es el
nombre del archivo. Opcionalmente, puede especificar si el archivo es público o privado en el manifiesto del
ensamblado, por ejemplo: -linkres:filename.res,myname.res,public . De forma predeterminada, filename es
público en el ensamblado.
Comentarios
La opción -linkresource no incrusta el archivo de recursos en el archivo de salida; Use la opción -resource para
hacerlo.
La opción -linkresource requiere una de las opciones de -target distintas de -target:module .
Si filename es un archivo de recursos .NET Framework creado, por ejemplo, mediante Resgen. exe (generador de
archivos de recursos) o en el entorno de desarrollo, se puede tener acceso al mismo con miembros del espacio de
nombres System.Resources. (Para obtener más información, vea ResourceManager). Para tener acceso a todos los
demás recursos en tiempo de ejecución, use los métodos que comienzan por GetManifestResource en la clase
Assembly.
El nombre de archivo puede tener cualquier formato de archivo. Por ejemplo, se puede hacer que una DLL nativa
forme parte de un ensamblado para que se pueda instalar en la caché global de ensamblados y sea accesible
desde código administrado del ensamblado.
La forma abreviada de -linkresource es -linkres .
NOTE
La opción -linkresource no está disponible en el entorno de desarrollo de Visual Studio; solo está disponible cuando se
compila desde la línea de comandos.
Ejemplo
En el código siguiente se compilan in.vb y vínculos a rf.resource de archivos de recursos.
Vea también
Compilador de línea de comandos de Visual Basic
-Target (Visual Basic)
-Resource (Visual Basic)
Líneas de comandos de compilación de ejemplo
-main
23/11/2019 • 2 minutes to read • Edit Online
Sintaxis
-main:location
Argumentos
location
Obligatorio. Nombre de la clase o módulo que contiene el Sub Main procedimiento al que se va a llamar cuando
se inicie el programa. Puede tener el formato -Main: module o -Main: Namespace. Module .
Comentarios
Utilice esta opción cuando cree un archivo ejecutable o un programa ejecutable de Windows. Si se omite la opción
-Main , el compilador busca una Sub Main compartida válida en todas las clases y módulos públicos.
Vea el procedimiento Main en Visual Basic para obtener una explicación de las distintas formas del procedimiento
de Main .
Cuando location es una clase que hereda de Form, el compilador proporciona un procedimiento de Main
predeterminado que inicia la aplicación si la clase no tiene Main procedimiento. Esto le permite compilar código
en la línea de comandos que se creó en el entorno de desarrollo.
Ejemplo
En el código siguiente se compilan T2.vb y T3.vb , especificando que el procedimiento Sub Main se encontrará
en la clase Test2 .
Especifica el nombre del ensamblado del que este módulo formará parte.
Sintaxis
-moduleassemblyname:assembly_name
Argumentos
T ÉRM IN O DE ESQ UEM A JSO N
assembly_name Nombre del ensamblado del que formará parte este módulo.
Comentarios
El compilador procesa la opción -moduleassemblyname solo si se ha especificado la opción -target:module . Esto
hace que el compilador cree un módulo. El módulo creado por el compilador solo es válido para el ensamblado
especificado con la opción -moduleassemblyname . Si coloca el módulo en otro ensamblado, se producirán errores en
tiempo de ejecución.
La opción -moduleassemblyname solo es necesaria cuando se cumplen las condiciones siguientes:
Un tipo de datos del módulo necesita acceso a un Friend tipo de un ensamblado al que se hace referencia.
El ensamblado al que se hace referencia ha concedido acceso de ensamblado de confianza al ensamblado
en el que se va a compilar el módulo.
Para obtener más información sobre cómo crear un módulo, vea -target (Visual Basic). Para obtener más
información sobre los ensamblados de confianza, vea ensamblados de confianza.
NOTE
La opción -moduleassemblyname no está disponible en el entorno de desarrollo de Visual Studio; solo está disponible
cuando se compila desde un símbolo del sistema.
Vea también
Compilar un ensamblado de varios archivos
Compilador de línea de comandos de Visual Basic
-Target (Visual Basic)
-main
-Reference (Visual Basic)
-addmodule
Ensamblados de .NET
Líneas de comandos de compilación de ejemplo
Ensamblados de confianza
-netcf
10/01/2020 • 4 minutes to read • Edit Online
Establece el compilador para que tenga como destino el .NET Compact Framework.
Sintaxis
-netcf
Notas
La opción -netcf hace que el compilador de Visual Basic tenga como destino la .NET Compact Framework en
lugar de la .NET Framework completa. La funcionalidad del lenguaje que solo está presente en el .NET Framework
completo está deshabilitada.
La opción -netcf está diseñada para usarse con -sdkpath. Las características de lenguaje deshabilitadas por
-netcf son las mismas características de lenguaje que no están presentes en los archivos de destino de -sdkpath
.
NOTE
La opción -netcf no está disponible en el entorno de desarrollo de Visual Studio; solo está disponible al compilar desde la
línea de comandos. La opción -netcf se establece cuando se carga un proyecto de dispositivo Visual Basic.
Module Module1
Sub Main()
End ' not valid to terminate execution with /netcf
End Sub
End Module
El enlace en tiempo de ejecución, en todos los formularios, está deshabilitado. Se generan errores en
tiempo de compilación cuando se encuentran escenarios de enlace en tiempo de ejecución reconocidos. El
siguiente programa se compila y se ejecuta sin -netcf pero produce un error en tiempo de compilación
con -netcf .
Class LateBoundClass
Sub S1()
End Sub
Module Module1
Sub Main()
Dim o1 As Object
Dim o2 As Object
Dim o3 As Object
Dim IntArr(3) As Integer
o1 = New LateBoundClass
o2 = 1
o3 = IntArr
Los modificadores automático, ANSIy Unicode están deshabilitados. La sintaxis de la instrucción Declare
también se modifica para Declare Sub|Function name Lib "library" [Alias "alias"] [([arglist])] . En el
código siguiente se muestra el efecto de -netcf en una compilación.
El uso de Visual Basic palabras clave 6,0 que se quitaron de Visual Basic genera un error diferente cuando
se usa -netcf . Esto afecta a los mensajes de error de las palabras clave siguientes:
Open
Close
Put
Write
Input
Lock
Unlock
Seek
Width
Name
FreeFile
EOF
Loc
LOF
Line
Ejemplo
El código siguiente compila Myfile.vb con el .NET Compact Framework, con las versiones de mscorlib. dll y
Microsoft. VisualBasic. dll que se encuentran en el directorio de instalación predeterminado de la .NET Compact
Framework en la unidad C. Normalmente, se usaría la versión más reciente de la .NET Compact Framework.
Vea también
Compilador de línea de comandos de Visual Basic
Líneas de comandos de compilación de ejemplo
-sdkpath
-noconfig
23/10/2019 • 2 minutes to read • Edit Online
Especifica que el compilador no debe hacer referencia automáticamente a los ensamblados de .NET Framework
usados normalmente o importar los espacios de nombres System y Microsoft.VisualBasic .
Sintaxis
-noconfig
Comentarios
La opción -noconfig indica al compilador que no compile con el archivo Vbc. RSP, que se encuentra en el mismo
directorio que el archivo Vbc. exe. El archivo Vbc. rsp hace referencia a los ensamblados de .NET Framework
usados comúnmente e importa los espacios de nombres System y Microsoft.VisualBasic . El compilador hace
referencia implícitamente al ensamblado System. dll a menos que se especifique la opción -nostdlib . La opción
-nostdlib indica al compilador que no compile con VBC. rsp ni haga referencia automáticamente al ensamblado
System. dll.
NOTE
Siempre se hace referencia a los ensamblados mscorlib. dll y Microsoft. VisualBasic. dll.
Puede modificar el archivo Vbc. RSP para especificar opciones de compilador adicionales que deben incluirse en
todas las compilaciones de VBC. exe (excepto cuando se especifica la opción -noconfig ). Para obtener más
información, consulte @ (especificar archivo de respuesta).
El compilador procesa las opciones que se pasan al comando vbc en último lugar. Por lo tanto, cualquier opción
de la línea de comandos invalida el valor de la misma opción en el archivo Vbc. rsp.
NOTE
La opción -noconfig no está disponible en el entorno de desarrollo de Visual Studio; solo está disponible al compilar
desde la línea de comandos.
Vea también
-nostdlib (Visual Basic)
Compilador de línea de comandos de Visual Basic
@ (especificar archivo de respuesta)
-Reference (Visual Basic)
-nologo (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Sintaxis
-nologo
Comentarios
Si especifica -nologo , el compilador no mostrará un titular de copyright. De forma predeterminada, -nologo no
está en vigor.
NOTE
La opción -nologo no está disponible en el entorno de desarrollo de Visual Studio; solo está disponible al compilar desde la
línea de comandos.
Ejemplo
En el código siguiente se compila T2.vb y no se muestra un banner de copyright.
Vea también
Compilador de línea de comandos de Visual Basic
Líneas de comandos de compilación de ejemplo
-nostdlib (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Sintaxis
-nostdlib
Comentarios
La opción -nostdlib quita la referencia automática al ensamblado System. dll y evita que el compilador Lea el
archivo Vbc. rsp. El archivo Vbc. RSP, que se encuentra en el mismo directorio que el archivo Vbc. exe, hace
referencia a los ensamblados .NET Framework utilizados habitualmente e importa los espacios de nombres
System y Microsoft.VisualBasic .
NOTE
Siempre se hace referencia a los ensamblados mscorlib. dll y Microsoft. VisualBasic. dll.
NOTE
La opción -nostdlib no está disponible en el entorno de desarrollo de Visual Studio; solo está disponible al compilar desde
la línea de comandos.
Ejemplo
El código siguiente compila T2.vb sin hacer referencia a las bibliotecas estándar. Debe establecer el _MYTYPE
constante de compilación condicional en la cadena "Empty" para quitar el objeto My .
Vea también
-noconfig
Compilador de línea de comandos de Visual Basic
Líneas de comandos de compilación de ejemplo
Personalización de los objetos que están disponibles en My
-nowarn
23/10/2019 • 2 minutes to read • Edit Online
Sintaxis
-nowarn[:numberList]
Argumentos
T ÉRM IN O DEF IN IC IÓ N
Comentarios
La opción -nowarn hace que el compilador no genere advertencias. Para suprimir una advertencia individual,
proporcione el identificador de advertencia a la opción -nowarn que va detrás del signo de dos puntos. Separe
varios números de advertencia con comas.
Solo tiene que especificar la parte numérica del identificador de advertencia. Por ejemplo, si desea suprimir
BC42024, la advertencia para las variables locales no utilizadas, especifique -nowarn:42024 .
Para obtener más información sobre los números de identificador de advertencia, vea configurar advertencias en
Visual Basic.
Ejemplo
El siguiente código compila T2.vb y no muestra ninguna advertencia.
Ejemplo
En el código siguiente se compila T2.vb y no se muestran las advertencias de las variables locales no utilizadas
(42024).
vbc -nowarn:42024 t2.vb
Vea también
Compilador de línea de comandos de Visual Basic
Líneas de comandos de compilación de ejemplo
Configuring Warnings in Visual Basic
-nowin32manifest (Visual Basic)
25/11/2019 • 2 minutes to read • Edit Online
Sintaxis
-nowin32manifest
Comentarios
Cuando se use esta opción, la aplicación estará sujeta a la virtualización en Windows Vista a menos que
proporcione un manifiesto de aplicación en un archivo de recursos Win32 o durante un paso de compilación
posterior. Para más información sobre la virtualización, vea Implementación de ClickOnce en Windows Vista.
Para más información sobre la creación de manifiestos, vea -win32manifest (Visual Basic).
Vea también
Compilador de línea de comandos de Visual Basic
Página de aplicación, Diseñador de proyectos (Visual Basic)
-optimize
23/10/2019 • 2 minutes to read • Edit Online
Sintaxis
-optimize[ + | - ]
Argumentos
T ÉRM IN O DEF IN IC IÓ N
Comentarios
Gracias a las optimizaciones del compilador, el archivo de salida será más pequeño, más rápido y más eficaz. Sin
embargo, dado que las optimizaciones provocan la reorganización del código en el archivo de salida, -optimize+
puede dificultar la depuración.
Todos los módulos generados con -target:module para un ensamblado deben usar la misma configuración
-optimize que el ensamblado. Para obtener más información, vea -target (Visual Basic).
Ejemplo
El código siguiente compila T2.vb y habilita las optimizaciones del compilador.
Vea también
Compilador de línea de comandos de Visual Basic
-debug (Visual Basic)
Líneas de comandos de compilación de ejemplo
-Target (Visual Basic)
-optioncompare
23/10/2019 • 2 minutes to read • Edit Online
Sintaxis
-optioncompare:{binary | text}
Comentarios
Puede especificar -optioncompare de una de estas dos formas: -optioncompare:binary para usar comparaciones
de cadenas binarias y -optioncompare:text para usar comparaciones de cadenas de texto. De forma
predeterminada, el compilador utiliza -optioncompare:binary .
En Microsoft Windows, la página de códigos actual determina el criterio de ordenación binario. Un criterio de
ordenación binario típico es el siguiente:
A < B < E < Z < a < b < e < z < À < Ê < Ø < à < ê < ø
Las comparaciones de cadenas basadas en texto se basan en un criterio de ordenación de texto sin distinción
entre mayúsculas y minúsculas determinado por la configuración regional del sistema. Un criterio de ordenación
de texto típico es el siguiente:
(A = a) < (À = à) < (B=b) < (E=e) < (Ê = ê) < (Z=z) < (Ø = ø)
Ejemplo
El código siguiente compila ProjFile.vb y utiliza comparaciones de cadenas binarias.
Vea también
Compilador de línea de comandos de Visual Basic
-optionexplicit
-optionstrict
-optioninfer
Líneas de comandos de compilación de ejemplo
Option Compare (instrucción)
Valores predeterminados de Visual Basic, Proyectos, Cuadro de diálogo Opciones
-optionexplicit
21/03/2020 • 2 minutes to read • Edit Online
Hace que el compilador notifique errores si las variables no se declaran antes de que se utilicen.
Sintaxis
-optionexplicit[+ | -]
Argumentos
+ | -
Opcional. Especifique -optionexplicit+ para requerir una declaración explícita de variables. La -optionexplicit+
opción es la predeterminada -optionexplicit y es la misma que . La -optionexplicit- opción habilita la
declaración implícita de variables.
Observaciones
Si el archivo de código fuente contiene una -optionexplicit instrucción Option Explicit, la instrucción reemplaza
la configuración del compilador de línea de comandos.
Para establecer -optionexplicit en el IDE de Visual Studio
1. Seleccione un proyecto en el Explorador de soluciones . En el menú Proyecto , haga clic en
Propiedades .
2. Haga clic en la pestaña Compilar .
3. Modifique el valor en el cuadro Option Explicit.
Ejemplo
El código siguiente -optionexplicit- se compila cuando se usa.
Module Module1
Sub Main()
i = 99
System.Console.WriteLine(i)
End Sub
End Module
Consulte también
Compilador de línea de comandos de Visual Basic
-optioncompare
-optionstrict
-optioninfer
Líneas de comandos de compilación de ejemplo
Option Explicit (instrucción)
Valores predeterminados de Visual Basic, Proyectos, Cuadro de diálogo Opciones
-optioninfer
24/10/2019 • 2 minutes to read • Edit Online
Sintaxis
-optioninfer[+ | -]
Argumentos
T ÉRM IN O DE ESQ UEM A JSO N
NOTE
Puede utilizar la opción -noconfig para conservar los valores predeterminados internos del compilador en lugar de los
especificados en vbc.rsp. El valor predeterminado del compilador para esta opción es -optioninfer- .
Comentarios
Si el archivo de código fuente contiene una instrucción Option Infer, la instrucción reemplaza la -optioninfer
configuración del compilador de línea de comandos.
Para Set-optioninfer (en el IDE de Visual Studio
1. Seleccione un proyecto en Explorador de soluciones . En el menú Proyecto , haga clic en Propiedades .
2. En la pestaña compilar , modifique el valor del cuadro Option Infer .
Ejemplo
El siguiente código compila test.vb con la inferencia de tipo de variable local habilitada.
Vea también
Compilador de línea de comandos de Visual Basic
-optioncompare
-optionexplicit
-optionstrict
Líneas de comandos de compilación de ejemplo
Option Infer (instrucción)
Inferencia de tipo de variable local
Valores predeterminados de Visual Basic, Proyectos, Cuadro de diálogo Opciones
Página Compilación, Diseñador de proyectos (Visual Basic)
-noconfig
Compilación desde la línea de comandos
-optionstrict
23/10/2019 • 2 minutes to read • Edit Online
Aplica la semántica estricta de tipos para restringir las conversiones de tipos implícitas.
Sintaxis
-optionstrict[+ | -]
-optionstrict[:custom]
Argumentos
+ | -
Opcional. La opción -optionstrict+ restringe la conversión implícita de tipos. El valor predeterminado para esta
opción es -optionstrict- . La opción -optionstrict+ es la misma que la -optionstrict . Puede usar ambos para
la semántica de tipos permisiva.
custom
Requerido. Advertir cuando no se respete la semántica estricta del lenguaje.
Comentarios
Cuando -optionstrict+ está en vigor, solo se pueden realizar implícitamente conversiones de tipos de
ampliación. Las conversiones de tipos de restricción implícitas, como la asignación de un objeto de tipo Decimal
a un objeto de tipo entero, se muestran como errores.
Para generar advertencias para las conversiones de tipos de restricción implícitas, use -optionstrict:custom .
Use -nowarn:numberlist para omitir advertencias concretas y -warnaserror:numberlist para tratar advertencias
concretas como errores.
Para Set-OptionStrict en el IDE de Visual Studio
1. Seleccione un proyecto en el Explorador de soluciones . En el menú proyecto , haga clic en
propiedades.
2. Haga clic en la pestaña Compilar .
3. Modifique el valor en el cuadro Option Strict .
Para establecer-OptionStrict mediante programación
Consulte Option Strict (instrucción).
Ejemplo
El código siguiente compila Test.vb mediante la semántica estricta de tipos.
Vea también
Compilador de línea de comandos de Visual Basic
-optioncompare
-optionexplicit
-optioninfer
-nowarn
-warnaserror (Visual Basic)
Líneas de comandos de compilación de ejemplo
Option Strict (instrucción)
Valores predeterminados de Visual Basic, Proyectos, Cuadro de diálogo Opciones
-out (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Sintaxis
-out:filename
Argumentos
T ÉRM IN O DEF IN IC IÓ N
Comentarios
Especifique el nombre completo y la extensión del archivo que se va a crear. Si no lo hace, el archivo. exe toma su
nombre del archivo de código fuente que contiene el procedimiento Sub Main y el archivo. dll toma su nombre del
primer archivo de código fuente.
Si especifica un nombre de archivo sin la extensión. exe o. dll, el compilador agrega automáticamente la extensión,
en función del valor especificado para la opción del compilador -target .
1. tener un proyecto seleccionado en Explorador de soluciones . En el menú Proyecto , haga clic en Propiedades .
2. Haga clic en la pestaña aplicación .
3. modifique el valor en el cuadro nombre de ensamblado .
Ejemplo
El código siguiente compila T2.vb y crea T2.exe de archivo de salida.
Vea también
Compilador de línea de comandos de Visual Basic
-Target (Visual Basic)
Líneas de comandos de compilación de ejemplo
-Platform (Visual Basic)
27/11/2019 • 5 minutes to read • Edit Online
Especifica qué versión de la plataforma de Common Language Runtime (CLR) puede ejecutar el archivo de salida.
Sintaxis
-platform:{ x86 | x64 | Itanium | arm | anycpu | anycpu32bitpreferred }
Argumentos
T ÉRM IN O DEF IN IC IÓ N
Comentarios
Use la opción -platform para especificar el tipo de procesador de destino del archivo de salida.
En general, los ensamblados de .NET Framework escritos en Visual Basic se ejecutarán de la misma manera
independientemente de la plataforma. Sin embargo, en algunos casos se comportan de forma diferente en
distintas plataformas. Estos casos comunes son:
Estructuras que contengan miembros cuyo tamaño varía según la plataforma, como cualquier tipo de
puntero.
Aritmética de punteros que incluya tamaños constantes.
Invocación incorrecta de la plataforma o declaraciones COM que utilicen Integer para los controladores
en lugar de IntPtr.
Conversión de IntPtr a Integer .
Uso de invocación de plataforma o interoperabilidad COM con componentes que no existen en todas las
plataformas.
La opción -Platform solucionará algunos problemas si sabe que ha realizado suposiciones sobre la arquitectura
en la que se ejecutará el código. De manera específica:
Si decide que el destino sea una plataforma de 64 bits pero la aplicación se ejecuta en un equipo de 32 bits,
el mensaje de error aparece mucho antes y se centra más bien en el problema que en el error que aparece
sin utilizar este modificador.
Si establece la marca x86 en la opción y posteriormente la aplicación se ejecuta en un equipo de 64 bits, la
aplicación se ejecutará en el subsistema WOW, en lugar de ejecutarse de forma nativa.
En un sistema operativo de Windows de 64 bits:
Los ensamblados compilados con -platform:x86 se ejecutarán en el CLR de 32 bits que se ejecuta en
WOW64.
Los ejecutables compilados con -platform:anycpu se ejecutarán en el CLR de 64 bits.
Un archivo DLL compilado con -platform:anycpu se ejecutará en el mismo CLR que el proceso en el que se
cargó.
Los archivos ejecutables que se compilan con -platform:anycpu32bitpreferred se ejecutarán en el CLR de
32 bits.
Para obtener más información sobre cómo desarrollar una aplicación para que se ejecute en una versión de 64
bits de Windows, vea aplicaciones de 64 bits.
Para establecer-Platform en el IDE de Visual Studio
1. En Explorador de soluciones , elija el proyecto, abra el menú proyecto y, a continuación, haga clic en
propiedades .
2. En la pestaña compilar , Active o desactive la casilla preferir 32 bits, o bien, en la lista CPU de destino ,
elija un valor.
Para obtener más información, vea compilar (página, diseñador de proyectos) (Visual Basic).
Ejemplo
En el ejemplo siguiente se muestra cómo utilizar la opción -platform del compilador.
Vea también
-Target (Visual Basic)
Compilador de línea de comandos de Visual Basic
Líneas de comandos de compilación de ejemplo
-quiet
23/10/2019 • 2 minutes to read • Edit Online
Evita que el compilador muestre código de errores y advertencias relacionados con la sintaxis.
Sintaxis
-quiet
Comentarios
De forma predeterminada, -quiet no está en vigor. Cuando el compilador informa de un error o una advertencia
relacionados con la sintaxis, también genera la línea del código fuente. En el caso de las aplicaciones que analizan
los resultados del compilador, puede ser más conveniente que el compilador solo genere el texto del diagnóstico.
En el ejemplo siguiente, Module1 genera un error que incluye el código fuente cuando se compila sin -quiet .
Module Module1
Sub Main()
x()
End Sub
End Module
Resultado:
C:\projects\vb2.vb(3) : error BC30451: 'x' is not declared. It may be inaccessible due to its protection
level.
x()
~
NOTE
La opción -quiet no está disponible en el entorno de desarrollo de Visual Studio; solo está disponible al compilar desde la
línea de comandos.
Ejemplo
En el código siguiente se compila T2.vb y no se muestra el código para el diagnóstico del compilador relacionado
con la sintaxis:
Compila los archivos de código fuente en todos los directorios secundarios del directorio especificado o del
directorio del proyecto.
Sintaxis
-recurse:[dir\]file
Argumentos
dir
Opcional. El directorio en el que quiere que comience la búsqueda. Si no se especifica, la búsqueda comienza en el
directorio del proyecto.
file
Obligatorio. Los archivos que buscará. Se admiten los caracteres comodín.
Comentarios
Puede usar caracteres comodín en un nombre de archivo para compilar todos los archivos coincidentes en el
directorio del proyecto sin usar -recurse . Si no se especifica ningún nombre de archivo de salida, el compilador
basa el nombre del archivo de salida en el primer archivo de entrada procesado. Normalmente es el primer archivo
de la lista de archivos compilados cuando se ve en orden alfabético. Por esta razón, es mejor especificar un archivo
de salida mediante la opción -out .
NOTE
La opción -recurse no está disponible en el entorno de desarrollo de Visual Studio; solo está disponible al compilar desde
la línea de comandos.
Ejemplo
El comando siguiente compila todos los archivos de Visual Basic en el directorio actual.
vbc *.vb
El comando siguiente compila todos los archivos de Visual Basic en el directorio Test\ABC y en los directorios
situados por debajo de él y, a continuación, genera Test.ABC.dll .
Vea también
Compilador de línea de comandos de Visual Basic
-out (Visual Basic)
Líneas de comandos de compilación de ejemplo
-Reference (Visual Basic)
10/01/2020 • 3 minutes to read • Edit Online
Hace que el compilador haga que la información de tipo de los ensamblados especificados esté disponible para
el proyecto que se está compilando actualmente.
Sintaxis
-reference:fileList
-r:fileList
Argumentos
T ÉRM IN O DE ESQ UEM A JSO N
Notas
Los archivos que importe deben contener metadatos de ensamblado. Solo los tipos públicos son visibles fuera
del ensamblado. La opción -AddModule importa los metadatos de un módulo.
Si hace referencia a un ensamblado (ensamblado A) que a su vez hace referencia a otro ensamblado
(ensamblado B), debe hacer referencia al ensamblado B si:
Un tipo del ensamblado A hereda de un tipo o implementa una interfaz del ensamblado B.
Se invoca a un campo, una propiedad, un evento o un método que tiene un tipo de parámetro o un tipo
de valor devuelto del ensamblado B.
Use -LIBPATH para especificar el directorio en el que se encuentran una o varias de las referencias de
ensamblado.
Para que el compilador reconozca un tipo de un ensamblado (no de un módulo), se debe forzar la resolución
del tipo. Un ejemplo de cómo puede hacerlo es definir una instancia del tipo. Existen otras formas de resolver
nombres de tipos en un ensamblado para el compilador. Por ejemplo, si se hereda de un tipo de un
ensamblado, el compilador hace que el nombre del tipo sea conocido.
De forma predeterminada, se utiliza el archivo de respuesta VBC. RSP, que hace referencia a los ensamblados
.NET Framework utilizados habitualmente. Use -noconfig si no desea que el compilador use VBC. rsp.
La forma abreviada de -reference es -r .
Ejemplo
El comando siguiente compila los ensamblados de referencia y Input.vb del archivo de código fuente desde
Metad1.dll y Metad2.dll para generar Out.exe .
Vea también
Compilador de línea de comandos de Visual Basic
-noconfig
-Target (Visual Basic)
Public
Líneas de comandos de compilación de ejemplo
-refonly (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
La opción -refonly indica que la salida principal de la compilación debe ser un ensamblado de referencia en lugar
de un ensamblado de implementación. El parámetro -refonly deshabilita de forma automática la generación de
archivos PDB, ya que los ensamblados de referencia no pueden ejecutarse.
Cada opción del compilador está disponible en dos formatos: -option y /option . En la documentación solo se
muestra el formato -option.
Sintaxis
-refonly
Comentarios
Visual Basic admite el modificador de -refonly a partir de la versión 15,3.
Los ensamblados de referencia son un tipo especial de ensamblado que contiene solo la cantidad mínima de
metadatos necesarios para representar la superficie de la API pública de la biblioteca. Incluyen declaraciones para
todos los miembros que son significativos al hacer referencia a un ensamblado en las herramientas de
compilación, pero excluyen todas las implementaciones de miembros y las declaraciones de miembros privados
que no tienen ningún impacto observable en su contrato de API. Para obtener más información, consulte
Ensamblados de referencia en la Guía de .NET.
Las opciones -refonly y -refout son mutuamente excluyentes.
Vea también
/refout
Compilador de línea de comandos de Visual Basic
Líneas de comandos de compilación de ejemplo
-refout (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
La opción -refout especifica una ruta de archivo donde el ensamblado de referencia debe mostrarse.
Cada opción del compilador está disponible en dos formatos: -option y /option . En la documentación solo se
muestra el formato -option.
Sintaxis
-refout:filepath
Argumentos
filepath
Ruta de acceso y nombre de archivo del ensamblado de referencia. Por lo general, debe estar en una subcarpeta
del ensamblado principal. La convención recomendada (que se usa por MSBuild) es colocar el ensamblado de
referencia en una subcarpeta "ref/" con relación al ensamblado principal. Todas las carpetas de filepath deben
existir; el compilador no los crea.
Comentarios
Visual Basic admite el modificador de -refout a partir de la versión 15,3.
Los ensamblados de referencia son un tipo especial de ensamblado que contiene solo la cantidad mínima de
metadatos necesarios para representar la superficie de la API pública de la biblioteca. Incluyen declaraciones para
todos los miembros que son significativos al hacer referencia a un ensamblado en las herramientas de
compilación, pero excluyen todas las implementaciones de miembros y las declaraciones de miembros privados
que no tienen ningún impacto observable en su contrato de API. Para obtener más información, consulte
Ensamblados de referencia en la Guía de .NET.
Las opciones -refout y -refonly son mutuamente excluyentes.
Vea también
/refonly
Compilador de línea de comandos de Visual Basic
Líneas de comandos de compilación de ejemplo
-removeintchecks
23/10/2019 • 2 minutes to read • Edit Online
Sintaxis
-removeintchecks[+ | -]
Argumentos
T ÉRM IN O DEF IN IC IÓ N
Ejemplo
En el código siguiente se compila Test.vb y se desactiva la comprobación de errores de desbordamiento de
enteros.
Vea también
Compilador de línea de comandos de Visual Basic
Líneas de comandos de compilación de ejemplo
-Resource (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Sintaxis
-resource:filename[,identifier[,public|private]]
-res:filename[,identifier[,public|private]]
Argumentos
T ÉRM IN O DEF IN IC IÓ N
Comentarios
Utilice -linkresource para vincular un recurso a un ensamblado sin colocar el archivo de recursos en el archivo
de salida.
Si filename es un archivo de recursos .NET Framework creado, por ejemplo, mediante Resgen. exe (generador de
archivos de recursos) o en el entorno de desarrollo, se puede tener acceso a él con miembros del espacio de
nombres System.Resources (vea ResourceManager para obtener más información). Para tener acceso a todos los
demás recursos en tiempo de ejecución, use uno de los métodos siguientes: GetManifestResourceInfo,
GetManifestResourceNameso GetManifestResourceStream.
La forma abreviada de -resource es -res .
Para obtener información sobre cómo establecer -resource en el IDE de Visual Studio, vea administrar recursos
de la aplicación (.net).
Ejemplo
El siguiente código compila In.vb y adjunta Rf.resource de archivos de recursos.
vbc -res:rf.resource in.vb
Vea también
Compilador de línea de comandos de Visual Basic
-win32resource
-linkresource ((Visual Basic)
-Target (Visual Basic)
Líneas de comandos de compilación de ejemplo
-rootnamespace
23/10/2019 • 2 minutes to read • Edit Online
Sintaxis
-rootnamespace:namespace
Argumentos
T ÉRM IN O DEF IN IC IÓ N
Comentarios
Si usa el archivo ejecutable de Visual Studio (devenv. exe) para compilar un proyecto creado en el entorno de
desarrollo integrado de Visual Studio, use -rootnamespace para especificar el valor de la propiedad
RootNamespace. Para obtener más información, vea Modificadores de la línea de comandos de devenv.
Use el Common Language Runtime desensamblador de MSIL ( Ildasm.exe ) para ver los nombres de los espacios
de nombres en el archivo de salida.
Ejemplo
En el código siguiente se compila In.vb y se encierran todas las declaraciones de tipos en el espacio de nombres
mynamespace .
Vea también
Compilador de línea de comandos de Visual Basic
Ildasm.exe (Desensamblador de IL)
Líneas de comandos de compilación de ejemplo
-sdkpath
23/10/2019 • 2 minutes to read • Edit Online
Sintaxis
-sdkpath:path
Argumentos
path
Directorio que contiene las versiones de mscorlib. dll y Microsoft. VisualBasic. dll que se van a usar para la
compilación. Esta ruta de acceso no se comprueba hasta que se carga. Escriba el nombre del directorio entre
comillas ("") si contiene un espacio.
Comentarios
Esta opción indica al compilador de Visual Basic que cargue los archivos mscorlib. dll y Microsoft. VisualBasic. dll
desde una ubicación no predeterminada. La opción -sdkpath se diseñó para usarse con -netcf. El .NET Compact
Framework usa versiones diferentes de estas bibliotecas de compatibilidad para evitar el uso de tipos y
características de lenguaje que no se encuentran en los dispositivos.
NOTE
La opción -sdkpath no está disponible en el entorno de desarrollo de Visual Studio; solo está disponible al compilar desde
la línea de comandos. La opción -sdkpath se establece cuando se carga un proyecto de dispositivo Visual Basic.
Puede especificar que el compilador debe compilar sin una referencia a la biblioteca en tiempo de ejecución de
Visual Basic mediante la opción del compilador -vbruntime . Para obtener más información, vea -vbruntime (.
Ejemplo
El código siguiente compila Myfile.vb con el .NET Compact Framework, con las versiones de mscorlib. dll y
Microsoft. VisualBasic. dll que se encuentran en el directorio de instalación predeterminado de la .NET Compact
Framework en la unidad C. Normalmente, se usaría la versión más reciente de la .NET Compact Framework.
Vea también
Compilador de línea de comandos de Visual Basic
Líneas de comandos de compilación de ejemplo
-netcf
-vbruntime
-Target (Visual Basic)
10/01/2020 • 8 minutes to read • Edit Online
Sintaxis
-target:{exe | library | module | winexe | appcontainerexe | winmdobj}
Notas
En la tabla siguiente se resume el efecto de la opción -target .
O P C IÓ N B EH AVIO R
A menos que especifique -target:module , -target hace que se agregue un manifiesto de ensamblado .NET
Framework a un archivo de salida.
Cada instancia de VBC. exe genera, como máximo, un archivo de salida. Si especifica una opción del
compilador como -out o -target más de una vez, se aplicará la última que procese el compilador. La
información sobre todos los archivos de una compilación se agrega al manifiesto. Todos los archivos de
salida, excepto los creados con -target:module , contienen metadatos de ensamblado en el manifiesto. Use
Ildasm. exe (desensamblador de IL) para ver los metadatos de un archivo de salida.
La forma abreviada de -target es -t .
Para establecer-target en el IDE de Visual Studio
1. Seleccione un proyecto en el Explorador de soluciones . En el menú Proyecto , haga clic en
Propiedades .
2. Haga clic en la pestaña Aplicación .
3. Modifique el valor en el cuadro tipo de aplicación .
Ejemplo
El código siguiente compila in.vb , creando in.dll :
Vea también
Compilador de línea de comandos de Visual Basic
-main
-out (Visual Basic)
-Reference (Visual Basic)
-addmodule
-moduleassemblyname
Ensamblados de .NET
Líneas de comandos de compilación de ejemplo
-subsystemversion (Visual Basic)
04/12/2019 • 3 minutes to read • Edit Online
Especifica la versión mínima del subsistema en la que se puede ejecutar el archivo ejecutable generado, lo que
determina las versiones de Windows en las que se puede ejecutar el archivo ejecutable. Normalmente, esta opción
garantiza que el archivo ejecutable pueda aprovechar las características de seguridad concretas que no están
disponibles en versiones anteriores de Windows.
NOTE
Para especificar el subsistema en sí mismo, use la opción del compilador -target.
Sintaxis
-subsystemversion:major.minor
Parameters
major.minor
La versión mínima requerida del subsistema, expresada en una notación de puntos para las versiones principales y
secundarias. Por ejemplo, puede especificar que una aplicación no se puede ejecutar en un sistema operativo que
sea anterior a Windows 7 si establece el valor de esta opción en 6.01, como se describe en la tabla que aparece
más adelante en este tema. Debe especificar los valores de major y minor como números enteros.
Los ceros a la izquierda en la versión minor no cambian la versión, pero los ceros a la derecha sí. Por ejemplo, 6.1
y 6.01 hacen referencia a la misma versión, pero 6.10 hace referencia a una versión diferente. Se recomienda
expresar la versión secundaria como dos dígitos para evitar confusiones.
Notas
En la tabla siguiente se enumeran las versiones de subsistema habituales de Windows.
Windows XP 5.01
Windows 7 6.01
Windows 8 6.02
Valores predeterminados
El valor predeterminado de la opción del compilador -subsystemversion depende de las condiciones de esta
lista:
El valor predeterminado es 6.02 si se establece cualquier opción del compilador en la siguiente lista:
/target:appcontainerexe
/target:winmdobj
-platform:arm
El valor predeterminado es 6,00 si usa MSBuild, tiene como destino .NET Framework 4.5 y no ha
configurado ninguna de las opciones del compilador que se han especificado anteriormente en esta lista.
El valor predeterminado es 4.00 si no se cumple ninguna de las condiciones anteriores.
Vea también
Compilador de línea de comandos de Visual Basic
Propiedades de MSBuild
-utf8output (Visual Basic)
27/11/2019 • 2 minutes to read • Edit Online
Sintaxis
-utf8output[+ | -]
Argumentos
+ | -
Opcional. El valor predeterminado para esta opción es -utf8output- , lo que significa que la salida del compilador
no utiliza la codificación UTF-8. Especificar -utf8output es lo mismo que especificar -utf8output+ .
Comentarios
En algunas configuraciones internacionales, los resultados del compilador no se pueden mostrar correctamente en
la consola. En tales situaciones, use -utf8output y redirigir la salida del compilador a un archivo.
NOTE
La opción -utf8output no está disponible en el entorno de desarrollo de Visual Studio; solo está disponible al compilar
desde la línea de comandos.
Ejemplo
En el código siguiente se compila In.vb y se indica al compilador que muestre la salida mediante la codificación
UTF-8.
Vea también
Compilador de línea de comandos de Visual Basic
Líneas de comandos de compilación de ejemplo
-vbruntime
23/10/2019 • 5 minutes to read • Edit Online
Especifica que el compilador debe compilar sin una referencia a la biblioteca de tiempo de ejecución de Visual
Basic o con una referencia a una biblioteca de tiempo de ejecución específica.
Sintaxis
-vbruntime:{ - | + | * | path }
Argumentos
-
Compile sin una referencia a la biblioteca en tiempo de ejecución de Visual Basic.
+
Compilar con una referencia a la biblioteca en tiempo de ejecución de Visual Basic predeterminada.
*
Compile sin una referencia a la biblioteca en tiempo de ejecución de Visual Basic e inserte la funcionalidad básica
de la biblioteca en tiempo de ejecución de Visual Basic en el ensamblado.
path
Compilar con una referencia a la biblioteca especificada (DLL).
Comentarios
La opción del compilador -vbruntime le permite especificar que el compilador debe compilar sin una referencia a
la biblioteca en tiempo de ejecución de Visual Basic. Si compila sin una referencia a la biblioteca en tiempo de
ejecución de Visual Basic, se registran errores o advertencias en construcciones de código o de lenguaje que
generan una llamada a una aplicación auxiliar de Visual Basic en tiempo de ejecución. (Una aplicación auxiliar en
tiempo de ejecución de Visual Basic es una función definida en Microsoft. VisualBasic. dll a la que se llama en
tiempo de ejecución para ejecutar una semántica específica del lenguaje).
La opción -vbruntime+ produce el mismo comportamiento que se produce si no se especifica ningún
modificador -vbruntime . Puede usar la opción -vbruntime+ para invalidar los conmutadores -vbruntime
anteriores.
La mayoría de los objetos del tipo My no están disponibles cuando se usan las opciones -vbruntime- o
-vbruntime:path .
Si se compila con la opción -vbruntime* y el código hace referencia a un miembro de la biblioteca en tiempo de
ejecución de Visual Basic que no está incrustada con la funcionalidad básica, el compilador devuelve un error que
indica que el miembro no está disponible.
Ejemplo
En el ejemplo siguiente se muestra cómo usar la opción -vbruntime para compilar con una referencia a una
biblioteca personalizada.
vbc -vbruntime:C:\VBLibraries\CustomVBLibrary.dll
Vea también
Visual Basic Core: nuevo modo de compilación en Visual Studio 2010 SP1
Compilador de línea de comandos de Visual Basic
Líneas de comandos de compilación de ejemplo
-sdkpath
-verbose
23/10/2019 • 2 minutes to read • Edit Online
Sintaxis
-verbose[+ | -]
Argumentos
+ | -
Opcional. Especificar -verbose es igual que especificar -verbose+ , lo que hace que el compilador emita mensajes
detallados. El valor predeterminado para esta opción es -verbose- .
Comentarios
La opción -verbose muestra información sobre el número total de errores emitidos por el compilador, notifica qué
ensamblados está cargando un módulo y muestra los archivos que se están compilando actualmente.
NOTE
La opción -verbose no está disponible en el entorno de desarrollo de Visual Studio; solo está disponible al compilar desde
la línea de comandos.
Ejemplo
En el código siguiente se compila In.vb y se indica al compilador que muestre información de estado detallada.
Vea también
Compilador de línea de comandos de Visual Basic
Líneas de comandos de compilación de ejemplo
-warnaserror (Visual Basic)
27/11/2019 • 4 minutes to read • Edit Online
Causa que el compilador trate como un error la primera ocurrencia de una advertencia.
Sintaxis
-warnaserror[+ | -][:numberList]
Argumentos
T ÉRM IN O DEF IN IC IÓ N
Comentarios
La opción -warnaserror trata todas las advertencias como errores. Todos los mensajes que, por norma general,
deberían notificarse como advertencias, en su lugar se registran como errores. El compilador notifica como
advertencias las ocurrencias posteriores de la misma advertencia.
De forma predeterminada, se aplica -warnaserror- , que da lugar a que las advertencias tengan solo carácter
informativo. La opción -warnaserror , que es la misma que -warnaserror+ , causa que las advertencias se traten
como errores.
Si desea que solo algunas advertencias específicas se traten como errores, puede especificar una lista separada
por comas de números de advertencias que se deben tratar como errores.
NOTE
La opción -warnaserror no controla cómo se muestran las advertencias. Use la opción -nowarn para deshabilitar las
advertencias.
1. tener un proyecto seleccionado en Explorador de soluciones . En el menú Proyecto , haga clic en Propiedades .
2. Haga clic en la pestaña compilar .
3. Asegúrese de que la casilla deshabilitar todas las adver tencias esté desactivada.
4. Active la casilla tratar todas las adver tencias como errores .
PA RA ESTA B L EC ER - WA RN A SERRO R A F IN DE T RATA R A DVERT EN C IA S ESP EC ÍF IC A S C O M O ERRO RES EN EL IDE DE VISUA L
ST UDIO
1. tener un proyecto seleccionado en Explorador de soluciones . En el menú Proyecto , haga clic en Propiedades .
2. Haga clic en la pestaña compilar .
3. Asegúrese de que la casilla deshabilitar todas las adver tencias esté desactivada.
4. Asegúrese de que la casilla tratar todas las adver tencias como errores esté desactivada.
5. Seleccione error en la columna notificación adyacente a la advertencia que se debe tratar como un error.
Ejemplo
El siguiente código compila In.vb y ordena al compilador que muestre un error para la primera ocurrencia de
cada advertencia que encuentra.
Ejemplo
El siguiente código compila T2.vb y trata como un error solo la advertencia para las variables locales no utilizadas
(42024).
Vea también
Compilador de línea de comandos de Visual Basic
Líneas de comandos de compilación de ejemplo
Configuring Warnings in Visual Basic
-win32icon
23/10/2019 • 2 minutes to read • Edit Online
Inserta un archivo. ico en el archivo de salida. Este archivo. ico representa el archivo de salida en el Explorador de
archivos .
Sintaxis
-win32icon:filename
Argumentos
T ÉRM IN O DEF IN IC IÓ N
Comentarios
Puede crear un archivo. ico con el compilador de recursos de Microsoft Windows (RC). El compilador de recursos
se invoca al compilar un programa visual C++ ; se crea un archivo. ICO a partir del archivo. rc. Las opciones
-win32icon y -win32resource son mutuamente excluyentes.
Vea -linkresource ((Visual Basic) para hacer referencia a un archivo de recursos .NET Framework, o -Resource
(Visual Basic) para adjuntar un archivo de recursos de .NET Framework. Vea -Win32Resource para importar un
archivo. res.
Ejemplo
El código siguiente compila In.vb y adjunta un archivo. ico, Rf.ico .
Vea también
Compilador de línea de comandos de Visual Basic
Líneas de comandos de compilación de ejemplo
-win32manifest (Visual Basic)
27/11/2019 • 4 minutes to read • Edit Online
Identifica un archivo de manifiesto de la aplicación Win32 definido por el usuario que se va a insertar en un
archivo ejecutable portable (PE) del proyecto.
Sintaxis
-win32manifest: fileName
Argumentos
T ÉRM IN O DEF IN IC IÓ N
Comentarios
De forma predeterminada, el compilador Visual Basic inserta un manifiesto de aplicación que especifica un nivel
de ejecución solicitado de AsInvoker. Crea el manifiesto en la misma carpeta en la que se compila el archivo
ejecutable, normalmente la carpeta bin\Debug o bin\Release cuando se usa Visual Studio. Si desea proporcionar
un manifiesto personalizado, por ejemplo, para especificar un nivel de ejecución solicitado de highestAvailable o
requireAdministrator, use esta opción para especificar el nombre del archivo.
NOTE
Esta opción y la opción -Win32Resource son mutuamente excluyentes. Si intenta usar ambas opciones en la misma línea de
comandos, obtendrá un error de compilación.
Una aplicación sin manifiesto de aplicación que especifique un nivel de ejecución solicitado estará sujeta a
virtualización de archivos y Registro conforme a la característica Control de cuentas de usuario de Windows Vista.
Para más información sobre la virtualización, vea Implementación de ClickOnce en Windows Vista.
La aplicación estará sujeta a la virtualización si se cumple alguna de las siguientes condiciones:
1. Use la opción -nowin32manifest y no proporcione un manifiesto en un paso de compilación posterior o
como parte de un archivo de recursos de Windows (. res) mediante la opción -win32resource .
2. Se proporciona un manifiesto personalizado que no especifica un nivel de ejecución solicitado.
Visual Studio crea un archivo de manifiesto predeterminado y lo almacena en los directorios de depuración y
versión junto con el archivo ejecutable. Para ver o editar el archivo app. manifest predeterminado, haga clic en Ver
configuración de UAC en la pestaña aplicación del diseñador de proyectos. Para obtener más información,
consulta Application Page, Project Designer (Visual Basic).
Puede proporcionar el manifiesto de aplicación como un paso personalizado posterior a la compilación o como
parte de un archivo de recursos de Win32 mediante la opción -nowin32manifest . Use esa misma opción si quiere
que la aplicación esté sujeta a virtualización de archivos y Registro en Windows Vista. Esto impedirá que el
compilador cree e inserte un manifiesto predeterminado en el archivo PE.
Ejemplo
En el ejemplo siguiente se muestra el manifiesto predeterminado que el compilador Visual Basic inserta en un PE.
NOTE
El compilador inserta un nombre de aplicación estándar, la aplicación en el XML de manifiesto. Se trata de una solución
alternativa para permitir que las aplicaciones se ejecuten en Windows Server 2003 Service Pack 3.
Vea también
Compilador de línea de comandos de Visual Basic
-nowin32manifest (Visual Basic)
-win32resource
23/10/2019 • 2 minutes to read • Edit Online
Sintaxis
-win32resource:filename
Argumentos
filename
Nombre del archivo de recursos que se va a agregar al archivo de salida. Escriba el nombre de archivo entre
comillas ("") si contiene un espacio.
Comentarios
Puede crear un archivo de recursos de Win32 con el compilador de recursos de Microsoft Windows (RC).
Un recurso de Win32 puede contener información de versión o de mapa de bits (icono) que ayuda a identificar la
aplicación en el Explorador de archivos . Si no especifica -win32resource , el compilador genera información de
versión basada en la versión del ensamblado. Las opciones -win32resource y -win32icon son mutuamente
excluyentes.
Vea -linkresource ((Visual Basic) para hacer referencia a un archivo de recursos .NET Framework, o -Resource
(Visual Basic) para adjuntar un archivo de recursos de .NET Framework.
NOTE
La opción -win32resource no está disponible en el entorno de desarrollo de Visual Studio; solo está disponible al compilar
desde la línea de comandos.
Ejemplo
El código siguiente compila In.vb y adjunta un archivo de recursos de Win32, Rf.res :
Vea también
Compilador de línea de comandos de Visual Basic
Líneas de comandos de compilación de ejemplo
Visual Basic opciones del compilador por categoría
27/11/2019 • 8 minutes to read • Edit Online
El compilador de línea de comandos de Visual Basic se proporciona como una alternativa a la compilación de
programas desde el entorno de desarrollo integrado (IDE) de Visual Studio. A continuación se muestra una lista de
las opciones del compilador de línea de comandos de Visual Basic ordenadas por categoría funcional.
Cada opción del compilador está disponible en dos formatos: -option y /option . En la documentación solo se
muestra el formato -option.
Optimización
O P C IÓ N P RO P Ó SITO
archivos de salida
O P C IÓ N P RO P Ó SITO
Ensamblados .NET
O P C IÓ N P RO P Ó SITO
Depuración/comprobación de errores
O P C IÓ N P RO P Ó SITO
Ayuda
O P C IÓ N P RO P Ó SITO
Idioma
O P C IÓ N P RO P Ó SITO
Preprocesador
O P C IÓ N P RO P Ó SITO
Recursos
O P C IÓ N P RO P Ó SITO
Varios
O P C IÓ N P RO P Ó SITO
Vea también
Opciones del compilador de Visual Basic, por orden alfabético
Administración de propiedades de soluciones y proyectos
Información de referencia de .NET Framework (Visual
Basic)
27/11/2019 • 2 minutes to read • Edit Online
En este tema se proporcionan vínculos a información sobre cómo trabajar con la biblioteca de clases de .NET
Framework.
Secciones relacionadas
Introducción
Proporciona información general completa de .NET Framework y vínculos a recursos adicionales.
Información general de la biblioteca de clases
Presenta las clases, las interfaces y los tipos de valor que ayudan a acelerar y optimizar el proceso de desarrollo y
proporcionan acceso a la funcionalidad del sistema.
Guía de desarrollo
Proporciona una guía para todas las áreas y tareas tecnológicas clave para el desarrollo de aplicaciones, incluida la
creación, configuración, depuración, protección e implementación de la aplicación. En este tema también se
proporciona información sobre programación dinámica, interoperabilidad, extensibilidad, administración de
memoria y subprocesamiento.
Herramientas
Describe las herramientas que puede usar para desarrollar, configurar e implementar aplicaciones mediante el uso
de tecnologías de .NET Framework.
Explorador de API de .NET
Proporciona ejemplos de código y de sintaxis, así como información relacionada para cada clase de los espacios de
nombres .NET Framework.
Especificación del lenguaje Visual Basic
08/01/2020 • 2 minutes to read • Edit Online
La especificación del lenguaje Visual Basic es el origen de autoridad para obtener respuestas a todas las preguntas
sobre la gramática y la sintaxis de Visual Basic. Contiene información detallada sobre el lenguaje, incluidos
muchos puntos que no se describen en la documentación de referencia de Visual Basic.
La especificación está disponible en el Centro de descarga de Microsoft.
Este sitio contiene la especificación de Visual Basic 11. Se crea a partir de los archivos Markdown del repositorio
de GitHub dotnet/vblang.
Los problemas de la especificación deben crearse en el repositorio dotnet/vblang. O bien, si está interesado en
corregir los errores que encuentre, puede enviar una solicitud de incorporación de cambios al mismo repositorio.
Vea también
Referencia del lenguaje Visual Basic
S IG U IE N TE
2 minutes to read
Tutoriales del lenguaje Visual Basic
18/03/2020 • 5 minutes to read • Edit Online
Los tutoriales proporcionan instrucciones paso a paso para escenarios comunes, lo que hace que un buen lugar
para empezar a conocer el producto o una característica en particular.
Escribir un programa asincrónico
Muestra cómo crear una solución asincrónica mediante el uso de Async y Await.
Declarar y generar eventos
Muestra cómo se declaran y generan eventos en Visual Basic.
Controlar eventos
Muestra cómo controlar eventos mediante la palabra clave WithEvents estándar o las nuevas palabras clave
AddHandler / RemoveHandler .