You are on page 1of 218

ISAE UNIVERSIDAD

FACULTAD DE CIENCIAS TECNOLGICAS TCNICO EN INFORMTICA PROGAMACON DE COMPUTADORAS 1

VISUAL BASIC 2008

JAIME REYES GONZALES

PROF. MAIKO TOLEDO

15/9/2011

INDICE

INTRODUCON

CONTENIDO

RECOMENDACIONES

INFOGRAFA

GLOSARIO/ANEXOS

INTRODUCON

EN ESTE TRABAJO ENCONTRAS DOCUMENTACIN IMPORTANTE PARA EL INICIO DEL MUNDO DE LA PROGRAMACIN, SE PUEDE DECIR LO MAS RELEVANTE PERO IMPORTANTE SOBRE USO DEL VISUAL BASIC ,DE IGUAL FORMA TE SERVIRA DE REFERENCIA CONSULTAS DEL USO DE LAS PALABRAS RESERVADAS ENTRE OTRAS PUNTOS IMPORTANTES SOBRE EL TEMA.

CONTENIDO

1)

Palabras Reservadas del Visual Basic 2008

1.1 PalabrasNo Reservadas 1.2 Nuevas caractersticas

2)

Ciclos Anidados

3)

Ciclos Repetitivos

For Repeat Case While

1.1 Palabras clave de Visual Basic


Las palabras clave siguientes estn reservadas, lo que significa que no se pueden utilizar como nombres para los elementos de programacin, como son las variables o los procedimientos. AddHandler AndAlso Byte Catch CDate CInt Const CSng CULng Declare DirectCast Else Enum Exit Friend Global If Inherits IsNot Long Module MyClass Next NotOverridable Operator OrElse ParamArray Protected ReDim Return Shadows Static Structure Throw TryCast UInteger When WithEvents #Else *= \= AddressOf As ByVal CBool CDec Class Continue CStr CUShort Default Do ElseIf Erase False Function GoSub Implements Integer Let Loop MustInherit Namespace Not Object Option Overloads Partial Public REM SByte Shared Step Sub To TypeOf ULong While WriteOnly #ElseIf & / ^ Alias Boolean Call CByte CDbl CLng CSByte CType Date Delegate Double End Error Finally Get GoTo Imports Interface Lib Me MustOverride Narrowing Nothing Of Optional Overridable Private RaiseEvent RemoveHandler Select Short Stop SyncLock True Variant UShort Widening Xor #End &= /= ^= And ByRef Case CChar Char CObj CShort CUInt Decimal Dim Each EndIf Event For GetType Handles In Is Like Mod MyBase New NotInheritable On Or Overrides Property ReadOnly Resume Set Single String Then Try Wend Using With #Const #If * \ +

1.3 Las palabras clave siguientes 1.4 no estn reservadas 1.1 Palabras clave no reservadas
Las palabras clave siguientes no estn reservadas, lo que significa que se pueden utilizar como nombres para los elementos de programacin. Sin embargo, no es recomendable utilizarlas, puesto que pueden complicar la lectura del cdigo y provocar errores casi imperceptibles y difciles de encontrar.

Agregado155 Binary159 Equals163 Group Join167 Join171 Order By175 Strict179 Unicode183 #Region187

Ansi156 Compare160 Explicit164 Into168 Key (Visual Basic)172 Preserve176 Take180 Until184

Assembly157 Custom161 From165 IsFalse169 Mid173 Skip177 Take While181 Dnde185

Auto158 Distinct162 Agrupar por166 IsTrue170 Off174 Skip While178 Text182 #ExternalSource186

Visual Basic 2008 introduce nuevas caractersticas

Visual Basic 2008 introduce nuevas caractersticas de lenguaje, como la inferencia de tipos locales, inicializadores de objetos, tipos annimos y mtodos de extensin. Estas caractersticas sirven de apoyo a una nueva caracterstica importante, Language-Integrated Query (LINQ), pero tambin son tiles por separado, sobre las palabras clave siguientes:

From Where Select Order By Join

Take Distinct Skip Group By

Ciclos Anidados
Un ciclo anidado nos permite tener dos o ms ciclos uno adentro de otro; un ciclo anidado no tiene una estructura nueva, sino que consiste en poner un ciclo dentro de otro. Incluso podemos combinarlos. En Visual Basic, las estructuras de control pueden anidarse en tantos niveles como se desee Los ciclos anidados son extremadamente tiles en la programacin y algunos de sus usos principales son: Bucles anidados Se pueden anidar bucles For colocando un bucle dentro de otro. Sin embargo, cada bucle debe tener una variable counter nica. Tambin puede anidar distintos tipos de estructuras de control unos dentro de otros. Para obtener ms informacin, vea Estructuras de control anidadas (Visual Basic). Si una instruccin Next de un nivel de anidamiento externo se encuentra antes de la instruccin Next de un nivel interno, el compilador genera un error. Sin embargo, el compilador slo puede detectar este error superpuesto si se especifica counter en cada instruccin Next. Salida de Dibujar

Simular series complejas Realizar operaciones con matrices Realizar operaciones con conjuntos Manipular arreglos y matrices (arreglos multidimensionales)

Ciclos Repetitivos
Los ciclos repetitivos es una secuencia de instrucciones un nmero determinado de veces se denominan Bucles y se denomina Iteracin al hecho de repetir la ejecucin de una secuencia de acciones. Entre las estructuras repetitivas se encuentran: Repetir (repeat) Para (for) Case Mientras (while)

Ciclo Para (for )


Es una estructura de control en la que se puede indicar el nmero mximo de iteraciones. Est disponible en casi todos los lenguajes de programacin imperativos,el inicio del ciclo Para, que ser sucedido por alguna variable numrica que llevarael control del ciclo.

El Ciclo Repetir (Repeat)

Se usa para los menu que vamos a hacer en nuestros programas....Antes utilizabamos un if... Pero no era recomendable.. . El Ciclo Repeat Consta de Un: REPEAT ,, y un until REPEAT(REPETIR);.. UNTIL (Significa repetir hasta) En el UNTIL debemos expresar hasta cuando queremos que se repita.. como en el la tarea que el until sea = a 5 que 5 significa terminar el programa....

Case

Lo necesario para un repeat...es el Case... que significa ... Para tal condicion Hacer como esta visto en el ejemplo qe dice "Case opcion OF" El case va a hacer la tarea deseada en cuanto al numero que ingresemos.. Dentro del CASE Ingresaremos... 1:, 2: etc, Eso significa.. lo que van a hacer cuando ingrese el numero.... Sin dar mas vuelta ... Es como que hacemos programas dentro del programa si se dan cuenta... Siempre... SE pone dentro del NUmero un Begin y un END.Y entre medio de los dos..Pondran lo qe tenga que haer. Importante... Dentro del case se puede meter FOR IF , While y demas. Visual Basic proporciona la estructura Select Case como alternativa a If...Then...Else para ejecutar selectivamente un bloque de sentencias entre varios bloques. La sentencia Select Case ofrece posibilidades similares a la instruccin If...Then...Else, pero hace que el cdigo sea ms legible cuando hay varias opciones. La estructura Select Case funciona con una nica expresin de prueba que se evala una vez solamente, al principio de la estructura. Visual Basic compara el resultado de esta expresin con los valores de cada Case de la estructura. Si hay una coincidencia, ejecuta el bloque de sentencias asociado a ese Case:

Selec Case expresin_prueba [Case lista_expresiones1 [bloque de sentencias 1]] [Case lista_expresiones2 [bloque de sentencias 2]]

RECOMENDACIONES

EL USO DE ESTA HERRAMIENTA EL VISUAL BASIC ,SE RECOMIENDA PRACTICAR , LEER TUTORIALES BUSCAR INTERNET , ES UNA BUENA FUENTE DE INFORMACION PODEMOS CONSULTAR Y BUSCAR ELEMENTOS BASICOS , PARA PRINCIPIANTES ,ENCONTRAR PROGRAMAS PEQUEOS Y PONERLOS EN PRACTICA , PARTICIPAR EN FOROS ES UNA BUENA ALTERNATIVA PARA ADQUIRIR MAS EXPERIENCIA DE IGUAL FORMA CONSULTAR CON OTROS PROGRAMADORES YA AVANSADOS CON ESTO NOS AYUDARA A BUEN USO DEL PROGRAMA Y SACARLE EL MEJOR PROBECHO POSIBLE, LA PRACTICA Y LAS GANAS DE QUERER PROGRAMAR ,ES LO MAS IMPORTANTE QUE PARA SER UN BUEN PROGRAMADOR.

Glosario/anexos

Ejemplo de Anidamiento

Public Sub sumRows(ByVal a(,) As Double, ByRef r() As Double) Dim i, j As Integer For i = 0 To UBound(a, 1) r(i) = 0 For j = 0 To UBound(a, 2) If a(i, j) > 0 Then r(i) = r(i) + a(i, j) End If Next j Next i End Sub
En el ejemplo anterior, la primera instruccin Next cierra el bucle For interno y la ltima instruccin Next cierra el bucle For externo.

Ejemplos de para y repetir


REPETIR:
repetir hasta que fin repetir El intrprete ejecutar y a continuacin evaluar . De resultar falsa, el intrprete vuelve al principio de y repite el mismo proceso. se ejecutar al menos una vez. Ejemplo:
Cdigo:
declarar variable entera suma Suma=0 declarar variable entera Entrada repetir imprime "Introduce un nmero" lee Entrada Suma=Suma+Entrada hasta que Suma>100 imprime "La suma de todas las entradas sobrepasa a 100"

Ejecucion del Programa: EFECUCION 1 REPETIR PIDE NUMERO: 99#INGRESAMOS UN NUMERO ENTERO suma=0+99#GUARDA EN SUMA EL VALOR 99 HASTA QUE SUMA>100 #no se cumple entonces entra de nuevo al ciclo EJECUCION 2 Repetir PIDE NUMERO 1 SUMA=99+1#ahora suma es 100 hasta que suma >100 #como 100 no es mayor a 100 sino es igual entonces inicia de nuevo el ciclo EJECUCION 3 REPETIR PIDE NUMERO 1 SUMA=100+1# SE INGRESA EL VALOR NUEVO + EL VALOR ANTERIOR HASTA QUE SUMA > 100 # SI SE CUMPLE Y FIN DE CICLO SE IMPRIME MENSAJE La suma de todas las entradas sobrepasa a 100

Ciclo Mientra Wihle


Cdigo:
mientras (condicin) hacer <bloque de instrucciones> fin_mientras

EJEMPLO 1. Dado un nmero natural n se desea calcular la suma de los nmeros naturales desde 1 hasta n. PROCEDIMIENTOS: Objetos Conocidos un nmero natural. Objetos Desconocidos Un nmero natural. Condiciones El nmero buscado es la suma de los naturales empezando en cero hasta el nmero dado. ESPECIFICACIN: Entradas n Enteros, (n es el nmero dado). Salidas suma Enteros, (suma es la suma de los primeros n nmeros naturales). Condiciones DISEO: Primera Iteracin: 1. Leer el nmero 2. Recorrer los nmeros desde el cero hasta el nmero dado e irlos sumando. 3. escribir la suma CODIGO:
Spoiler : Cdigo:
inicio declarar variable entera n /* se define la variable para el nmero */ declarar variable entera suma /* se define la variable para la suma */ declarar variable entera entera /* se define la variable para recorrer los nmeros entre 0 y n */ escribir "Ingrese el nmero: " leer n /* lee el primer nmero */ suma =0/* inicia la suma en cero */ i =0 /* empieza la variable que recorre los nmeros en 0 */ mientras (i <=n) hacer suma= suma + i /* en cada iteracin suma el nmero i */ i = i + 1 /* incrementa la variable en 1 para tomar el siguiente nmero en la prxima iteracin */ fin_mientras escribir "La suma es: ", suma fin

CASE

Por ejemplo, suponga que agrega otro comando al men Edicin en el ejemplo If...Then...Else. Podra agregar otra clusula ElseIf o podra escribir la funcin con Select Case:Private Sub mnuCut_Click (Index As Integer) Select Case Index Case 0 ` Comando Cortar CopyActiveControl ` Llama a procedimientos generales ClearActiveControl Case 1 ` Comando copiar. CopyActiveControl Case 2 ` Comando borrar. ClearActiveControl Case 3 ` Comando Pegar. PasteActiveControl Case Else frmFind.Show ` Muestra el cuadro de ` dilogo Buscar. End Select End Sub

AddHandler (Instruccin)
Asocia un evento a un controlador de eventos en tiempo de ejecucin. AddHandler event, AddressOf eventhandler Partes Event Nombre del evento que se va a controlar. Eventhandler Nombre del procedimiento que controlar el evento. Descripcin Las instrucciones AddHandler y RemoveHandler permiten iniciar y detener el controlador del evento en cualquier momento de la ejecucin del programa. La firma del procedimiento eventhandler debe coincidir con la firma del evento event. La palabra clave Handles y la instruccin AddHandler permiten especificar que ciertos procedimientos controlen eventos determinados, pero hay diferencias entre ambos. La instruccinAddHandler conecta los procedimientos a los eventos en tiempo de ejecucin. Utilice la palabra clave Handles al definir un procedimiento para especificar que controla un evento determinado. Ejemplo: Sub TestEvents() Dim Obj AsNew 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() EndSub Sub EventHandler() ' Handle the event. MsgBox("EventHandler caught event.") EndSub PublicClass Class1 ' Declare an event. PublicEvent Ev_Event() Sub CauseSomeEvent() ' Raise an event. RaiseEvent Ev_Event() EndSub EndClass

AddressOf (Operador)
Crea una instancia de delegado del procedimiento que hace referencia al procedimiento especfico. AddHandler event, AddressOf eventhandler Partes event Nombre del evento que se va a controlar. eventhandler Nombre del procedimiento que controlar el evento. Descripcin: Las instrucciones AddHandler y RemoveHandler permiten iniciar y detener el controlador del evento en cualquier momento de la ejecucin del programa. La firma del procedimiento eventhandler debe coincidir con la firma del evento event. La palabra clave Handles y la instruccin AddHandler permiten especificar que ciertos procedimientos controlen eventos determinados, pero hay diferencias entre ambos. La instruccin AddHandler conecta los procedimientos a los eventos en tiempo de ejecucin. Utilice la palabra clave Handles al definir un procedimiento para especificar que controla un evento determinado. En los eventos personalizados, la instruccin AddHandler invoca al descriptor de acceso AddHandler del evento. Ejemplo: Sub TestEvents() Dim Obj AsNew 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() EndSub Sub EventHandler() ' Handle the event. MsgBox("EventHandler caught event.") EndSub PublicClass Class1 ' Declare an event. PublicEvent Ev_Event() Sub CauseSomeEvent() ' Raise an event. RaiseEvent Ev_Event() EndSub EndClass ...

Alias Indica que un procedimiento externo tiene un nombre diferente en su archivo DLL. La palabra clave Alias se puede utilizar en este contexto: Declare (Instruccin) And Realiza una conjuncin lgica entre dos expresiones Boolean o una conjuncin bit a bit entre dos expresiones numricas. result = expression1 And expression2 Partes: result Obligatorio. Cualquier expresin numrica o de tipo Boolean. Para la comparacin booleana, result es la conjuncin lgica de dos valores Boolean. Para las operaciones bit a bit,result es un valor numrico que representa la conjuncin bit a bit de dos modelos de bits numricos. expression1 Obligatorio. Cualquier expresin numrica o de tipo Boolean. expression2 Obligatorio. Cualquier expresin numrica o de tipo Boolean. Descripcin: Para la comparacin booleana, result es True si y slo si expression1 y expression2 se evalan como True. La tabla siguiente ilustra cmo se determina el argumento result. Si expression1 es: True True False False Y expression2 es True False True False El valor de result es True False False False

Aplicado a valores numricos, el operador And realiza una comparacin bit a bit de los bits ubicados de manera idntica en dos expresiones numricas y establece el bit correspondiente enresult de acuerdo con la siguiente tabla: Si el bit de expression1 es... Y el bit de expression2 es... El bit de result es...

1 1 0 0 Tipos de datos

1 0 1 0

1 0 0 0

Si los operandos constan de una expresin Boolean y una expresin numrica, Visual Basic convierte la expresin Boolean a un valor numrico (1 para True y 0 para False), y realiza una operacin bit a bit. Para una comparacin booleana, el tipo de datos del resultado es Boolean. Para una comparacin bit a bit, el tipo de datos del resultado es un tipo numrico 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 operador. Ejemplo 1: Dim a AsInteger = 10 Dim b AsInteger = 8 Dim c AsInteger = 6 Dim firstCheck, secondCheck AsBoolean firstCheck = a > b And b > c secondCheck = b > a And b > c Ejemplo 2: Dim a AsInteger = 10 Dim b AsInteger = 8 Dim c AsInteger = 6 Dim firstPattern, secondPattern, thirdPattern AsInteger firstPattern = (a And b) secondPattern = (a And c) thirdPattern = (b And c) AndAlso (Operador) Realiza una conjuncin lgica "cortocircuitada" en dos expresiones. result = expression1 AndAlso expression2

Partes: result Obligatoria. Cualquier expresin de tipo Boolean. El resultado ser el resultado Boolean de comparar ambas expresiones.

expression1 Obligatoria. Cualquier expresin de tipo Boolean. expression2 Obligatoria. Cualquier expresin de tipo Boolean. Descripcin Se dice que una operacin lgica se encuentra cortocircuitada si el cdigo compilado puede omitir la evaluacin de una expresin en funcin del resultado de otra. Si el resultado de la primera expresin evaluada determina el resultado final de la operacin, no es necesario evaluar la segunda expresin, ya que no cambiar el resultado final. La evaluacin cortocircuitada puede mejorar el rendimiento si la expresin omitida es compleja o si implica llamadas de procedimiento. Si ambas expresiones se evalan como True, result es True. En la tabla siguiente se ilustra cmo se determina el argumento result. Si expression1 es: True True False Y expression2 es True False (no se evala) El valor de result es: True False False

Una utilidad del operador AndAlso es probar la existencia de una instancia de objeto antes de intentar tener acceso a uno de sus miembros. En la siguiente lnea se muestra cmo hacerlo: If newObject AndAlso newObject.initFinished Then El acceso a la propiedad initFinished en la lnea de cdigo anterior podra producir una excepcin NullReferenceException si la variable newObject no tiene una instancia de objeto asignada. Sin embargo, el operador AndAlso hace que el compilador omita el acceso a initFinished si newObject es Nothing, porque Nothing se evala como False. Tipos de datos El operador AndAlso slo se define para Boolean (Tipo de datos, Visual Basic). Visual Basic convierte cada operando segn sea necesario a Boolean y lleva a cabo toda la operacin enBoolean. Si asigna el resultado a un tipo numrico, Visual Basic lo convierte de Boolean a ese tipo. Esto podra generar un comportamiento inesperado. Por ejemplo, 5 AndAlso 12 da como resultado 1 cuando se convierte a Integer. Sobrecarga Los operadores And (Operador, Visual Basic) e IsFalse (Operador) se pueden sobrecargar, lo que significa que una clase o estructura puede definir de nuevo su comportamiento cuando un operando pertenece al tipo de dicha clase o estructura. La sobrecarga de los operadores And y IsFalse afecta el comportamiento del operador AndAlso. Si el cdigo utiliza AndAlso en una clase o estructura que sobrecarga And y IsFalse, asegrese de conocer su comportamiento redefinido. Para obtener ms informacin.

Ejemplo: PublicFunction findValue(ByVal arr() AsDouble, _ ByVal searchValue AsDouble) AsDouble Dim i AsInteger = 0 While i <= UBound(arr) AndAlso arr(i) <> searchValue ' If i is greater than UBound(arr), searchValue is not checked. i += 1 EndWhile If i > UBound(arr) Then i = -1 Return i EndFunction As Introduce una clusula As, que identifica un tipo de datos en una instruccin de declaracin o una lista de restricciones en un parmetro de tipo genrico. Descripcin: La palabra clave As se puede utilizar en estos contextos: Class (Instruccin) Const (Instruccin) Declare (Instruccin) Delegate (Instruccin) Dim (Instruccin) Enum (Instruccin) Event (Instruccin) For...Next (Instrucciones) For Each...Next (Instrucciones) Function (Instruccin) Interface (Instruccin) Operator (Instruccin) Property (Instruccin) Structure (Instruccin) Sub (Instruccin) Try...Catch...Finally (Instrucciones) Boolean Contiene valores que pueden ser slo True o False. Las palabras clave True y False corresponden a los dos estados de las variables Boolean. Utilice el tipo de datos Boolean para contener valores de dos estados como verdadero/falso, s/no o activado/desactivado. El valor predeterminado de Boolean es False.

Conversiones de tipo

Cuando Visual Basic convierte los valores de tipos de datos numricos en Boolean, 0 pasa a ser False y todos los otros valores, True. Cuando Visual Basic convierte los valores Boolean en tipos numricos, False pasa a ser 0 y True, -1. Al convertir entre valores Boolean y tipos de datos numricos, recuerde que los mtodos de conversin de .NET Framework no siempre producen los mismos resultados que las palabras clave de conversin de Visual Basic. Esto se debe a que la conversin de Visual Basic conserva un comportamiento compatible con versiones anteriores. Para obtener ms informacin, vea Solucionar problemas de tipos de datos. Sugerencias de programacin Nmeros negativos.Boolean no es un tipo numrico y no puede representar un valor negativo. En cualquier caso, no debera utilizar Boolean para contener valores numricos. Caracteres de tipo.Boolean no tiene ningn carcter de tipo de literal o de tipo de identificador. Tipo de Framework. El tipo correspondiente en .NET Framework es la estructura System.Boolean. Ejemplo: Dim runningVB As Boolean ' Check to see if program is running on Visual Basic engine. If scriptEngine = "VB" Then runningVB = True End If ByRef Indica que un argumento se pasa de tal forma que el procedimiento al que se ha llamado puede cambiar el valor de una variable subyacente al argumento en el cdigo que realiza la llamada. Descripcin: El modificador ByRef se puede utilizar en estos contextos: Declare (Instruccin) Function (Instruccin) Sub (Instruccin) Byte Contiene enteros de 8 bits sin signo (1 bytes) que se sitan en el intervalo entre 0 y 255. Utilice el tipo de datos Byte para contener datos binarios. El valor predeterminado de Byte es 0.

Sugerencias de programacin

Nmeros negativos. Dado que Byte es un tipo sin signo, no puede representar un nmero negativo. Si utiliza el operador menos (-) unario en una expresin que produce un resultado del tipo Byte, Visual Basic convierte primero la expresin a Short. Conversiones de formato. Cuando Visual Basic lee o escribe archivos o cuando llama a archivos DLL, mtodos y propiedades, puede convertir automticamente entre los formatos de datos. Los datos binarios almacenados en variables Byte y matrices se conservan durante estas conversiones de formato. No debera utilizar una variable String para datos binarios, ya que su contenido puede daarse durante la conversin entre los formatos ANSI y Unicode. Ampliacin. El tipo de datos Byte se ampla a Short, UShort, Integer y UInteger, Long, ULong, Decimal, Single y Double. Esto significa que se puede convertir Byte en cualquiera de estos tipos sin encontrar un error System.OverflowException. Caracteres de tipo.Byte no tiene ningn carcter de tipo de literal o de tipo de identificador. Tipo en Framework. El tipo correspondiente en .NET Framework es la estructura System.Byte. ByVal Indica que un argumento se pasa de tal forma que el procedimiento o la propiedad a la que se ha llamado no puede cambiar el valor de una variable subyacente al argumento en el cdigo que realiza la llamada. Descripcin: El modificador ByVal se puede utilizar en estos contextos: Declare (Instruccin) Instruccin Function (Visual Basic) Operator (Instruccin) Property (Instruccin) Instruccin Sub (Visual Basic) Call Transfiere el control a un procedimiento Function, a un procedimiento Sub o a un procedimiento de la biblioteca de vnculos dinmicos (DLL). [ Call ] procedureName [ (argumentList) ] Partes procedureName Obligatorio. Nombre del procedimiento al que se llama. argumentList

Opcional. Lista de variables o expresiones que representan los argumentos que se pasan al procedimiento cuando se le llama. Los argumentos mltiples se separan por comas. Si se incluye argumentList, debe encerrarlo entre parntesis.

Descripcin: Normalmente utiliza la instruccin Call para llamar a un procedimiento que no devuelve un valor. Si el procedimiento devuelve un valor, la instruccin Call lo descarta. No se exige que utilice la instruccin Call al llamar a un procedimiento. Sin embargo, mejora la legibilidad del cdigo. Ejemplo: En este ejemplo se muestra cmo utilizar la instruccin Call para transferir el control a un procedimiento Sub, a una funcin intrnseca y a un procedimiento de biblioteca de vnculos dinmicos (DLL). ' (1) Call a Sub procedure. Call printToDebugWindow("Hello World") ... ' The above statement passes control to the following Sub procedure. Sub printToDebugWindow(ByVal anyString AsString) Debug.WriteLine(anyString) EndSub

' (2) Call a Visual Basic run-time function (Shell), discard the return value. Call Shell("C:\WINNT\system32\calc.exe", AppWinStyle.NormalFocus) ' The preceding path is for Windows 2000; ' The Windows XP path is C:\Windows\system32\calc.exe.

' (3) Call a Microsoft Windows DLL procedure. The Declare statement ' must be Private in a class, not in a module. PrivateDeclareSub MessageBeep Lib"User32" (ByVal N AsInteger) Sub callBeepDll() Call MessageBeep(-1) EndSub

Case
Define un valor o un conjunto de valores con el que se prueba el valor de una expresin. La palabra clave Case se puede utilizar en este contexto: Select...Case (Instruccin) Instruccin Try...Catch...Finally

Esta instruccin proporciona una manera de controlar algunos o todos los errores posibles que pueden ocurrir en un bloque de cdigo determinado mientras se ejecuta el cdigo. Partes: tryStatements Opcional. Instrucciones en las que puede ocurrir un error. Puede ser una instruccin compuesta. Catch Opcional. Se permite utilizar varios bloques Catch. Si tiene lugar una excepcin mientras se procesa el bloque Try, cada instruccin Catch se examina en orden textual para determinar si controla la excepcin; el parmetro exception representa la excepcin que se ha producido. exception Opcional. Cualquier nombre de variable. El valor inicial de exception es el valor del error producido. Se utiliza con Catch para especificar la captura del error. Si se omite, la instruccinCatch detecta cualquier excepcin. type Opcional. Especifica el tipo de filtro de clase. Si el valor de exception es del tipo especificado en type o de un tipo derivado, el identificador queda enlazado al objeto de excepcin. When Opcional. Una instruccin Catch con una clusula When slo detecta las excepciones cuando expression se evala como True. Una clusula When slo se aplica despus de comprobar el tipo de la excepcin y expression puede hacer referencia al identificador que representa la excepcin. expression Opcional. Debe ser convertible implcitamente a Boolean. Cualquier expresin que describe un filtro genrico. Se utiliza normalmente para filtrar por nmero de error. Se utiliza con la palabra clave When para especificar las circunstancias bajo las que se captura el error. catchStatements Opcional. Instrucciones para controlar los errores que se producen en el bloque Try. Puede ser una instruccin compuesta. Exit Try Opcional. Palabra clave que interrumpe la ejecucin de la estructura Try...Catch...Finally. La ejecucin se reanuda con el cdigo que sigue inmediatamente a la instruccin End Try. Se ejecutar la instruccin Finally todava. No se permite en bloques Finally.

Finally Opcional. Siempre se ejecuta un bloque Finally cuando la ejecucin sale de cualquier parte de la instruccin Try. finallyStatements Opcional. Instrucciones que se ejecutan despus de las dems operaciones de procesamiento de error. End Try Finaliza la estructura Try...Catch...Finally. Descripcin: Las variables locales de un bloque Try no se encuentran disponibles en un bloque Catch porque se trata de bloques independientes. Si se desea utilizar una variable en ms de un bloque, se debe declarar la variable fuera de la estructura Try...Catch...Finally. El bloque Try contiene cdigo donde puede producirse un error, mientras que el bloque Catch contiene el cdigo para controlar cualquier error que tenga lugar. Si se produce un error en el bloque Try, el control del programa pasa a la instruccin Catch apropiada para su procesamiento. El argumento exception es una instancia de la clase Exception o una clase que se deriva de la clase Exception. La instancia de la clase Exception corresponde al error que se produjo en el bloque Try. La instancia contiene informacin acerca del error, como el nmero de error y el mensaje. Si una instruccin Catch no especifica un argumento exception, detectar cualquier tipo de excepcin del sistema o de la aplicacin. Esta variacin debe utilizarse siempre como el ltimo bloque Catch en la estructura Try...Catch...Finally, despus de detectar todas las excepciones especficas anticipadas. El flujo de control nunca puede alcanzar un bloque Catch situado detrs de Catch sin un argumento exception. En situaciones de confianza parcial, como una aplicacin alojada en un recurso compartido de red, Try...Catch...Finally no detectar las excepciones de seguridad que se produzcan antes de invocar al mtodo que contiene la llamada. El ejemplo siguiente, si se coloca en un recurso compartido de servidor y se ejecuta desde el mismo, producir el error: "Sub System.Security.SecurityException: Error de solicitud". Ejemplo: PrivateSub Button1_Click(ByVal sender As System.Object, ByVal e As _ System.EventArgs) Handles Button1.Click Try Process.Start("http://www.microsoft.com") Catch ex As Exception MsgBox("Can't load Web page"& vbCrLf & ex.Message) EndTry EndSub ..

CBol Estas funciones se compilan en lnea, es decir, el cdigo de conversin forma parte del cdigo que evala la expresin. A veces no se produce una llamada a un procedimiento para realizar la conversin, lo que mejora el rendimiento. Cada funcin convierte una expresin a un tipo de datos especfico. 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 Obligatoria. Cualquier expresin del tipo de datos de origen. l nombre de funcin determina el tipo de datos del valor devuelto, como se muestra en la tabla siguiente. Nombre de la funcin CBool CByte CChar Tipo de datos devuelto Boolean (Tipo de datos, Visual Basic) Byte (Tipo de datos, Visual Basic) Char (Tipo de datos, Visual Basic) Date (Tipo de datos, Visual Basic) Double (Tipo de datos, Visual Basic) Intervalo de valores del argumento expression

Cualquier expresin numrica, Char o String vlida. 0 a 255 (sin signo); las partes fraccionarias se redondean.
1

Cualquier expresin Char o String vlida; slo se convierte el primer carcter de String; el valor puede estar comprendido entre 0 y 65535 (sin signo). Cualquier representacin vlida de fecha y hora. de -1,79769313486231570E+308 a -4,94065645841246544E324 para valores negativos; de 4,94065645841246544E-324 a 1,79769313486231570E+308 para valores positivos.

CDate CDbl

CDec

Decimal (Tipo de datos, Visual Basic)

+/-79.228.162.514.264.337.593.543.950.335 para nmeros a partir de cero, es decir, nmeros sin decimales. Para nmeros con 28 posiciones decimales, el intervalo es +/7,9228162514264337593543950335. El menor nmero posible distinto de cero es 0,0000000000000000000000000001 (+/1E-28).

CInt CLng CObj CSByte CShort CSng CStr

Integer (Tipo de datos, Visual Basic) Long (Tipo de datos, Visual Basic) Object (Tipo de datos)

de -2.147.483.648 a 2.147.483.647; las partes fraccionarias se 1 redondean. de -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807; 1 las partes fraccionarias se redondean. Cualquier expresin vlida.
1

SByte (Tipo de datos, de -128 a 127; las partes fraccionarias se redondean. Visual Basic) Short (Tipo de datos, Visual Basic)

de -32.768 a 32.767; las partes fraccionarias se redondean.

String (Tipo de datos, De -3,402823E+38 a 1,401298E-45 para valores negativos; Visual Basic) de 1,401298E-45 a 3,402823E+38 para valores positivos. String (Tipo de datos, Los valores devueltos para CStr dependen del Visual Basic) argumento expression. Vea Valores devueltos para la funcin CStr. UInteger (Tipo de datos) ULong (Tipo de datos, Visual Basic) UShort (Tipo de datos, Visual Basic) de 0 a 4.294.967.295 (sin signo); las partes fraccionarias se 1 redondean. de 0 a 18.446.744.073.709.551.615 (sin signo); las partes 1 fraccionarias se redondean. de 0 a 65.535 (sin signo); las partes fraccionarias se 1 redondean.

CUInt CULng CUShort

Las partes fraccionarias pueden estar sujetas a un tipo especial de redondeo denominado redondeo bancario. Vea "Comentarios" para obtener ms informacin.

Descripcin Por regla general, debe utilizar preferentemente las funciones de conversin de tipos de Visual Basic que los mtodos de .NET Framework, como ToString(), en la clase Convert o en una clase o estructura individual de tipos. Las funciones de Visual Basic se han diseado para que interacten de forma ptima con el cdigo de Visual Basic; adems hacen que el cdigo fuente sea ms corto y fcil de leer. Asimismo, los mtodos de conversin de .NET Framework no siempre producen los

mismos resultados que las funciones de Visual Basic, por ejemplo cuando se convierte de Boolean a Integer. Para obtener ms informacin, vea Solucionar problemas de tipos de datos. Comportamiento Conversin. En general, puede utilizar las funciones de conversin de tipos de datos para convertir el resultado de una operacin a un tipo de datos concreto en vez de al tipo de datos predeterminado. Por ejemplo, utilice CDec para forzar la ejecucin de operaciones con aritmtica decimal en los casos en los que se hara con precisin simple, doble precisin o aritmtica de enteros. Conversiones incorrectas. Si el argumento expression transferido a la funcin est fuera del intervalo de valores del tipo de datos al que se va a convertir, se inicia una excepcinOverflowException. Partes fraccionarias. Cuando un valor no integral se convierte a un tipo integral, las funciones de conversin de enteros (CByte, CInt, CLng, CSByte, CShort, CUInt, CULng y CUShort) eliminan la parte fraccionaria y redondean el valor al entero ms prximo. Si la parte fraccionaria es exactamente 0,5, las funciones de conversin de enteros lo rodean al entero par ms prximo. Por ejemplo, 0,5 se redondea a 0, y 1,5 y 2,5 se redondean a 2. En ocasiones, esto se denomina redondeo bancario, y su finalidad es compensar el margen de error que se pudiera acumular al sumar muchos nmeros de este tipo. CInt y CLng difieren de Int, Fix (Funciones, Visual Basic), que, en lugar de redondear, trunca la parte fraccionaria de un nmero. Adems, Fix e Int siempre devuelven un valor del mismo tipo de datos que reciben. Conversiones de fecha y hora. Utilice IsDate (Funcin, Visual Basic) para determinar si un valor se puede convertir a una fecha y hora. CDate reconoce literales de fecha y de hora, pero no valores numricos. Para convertir un valor Date de Visual Basic 6.0 en un valor Date de Visual Basic 2005, puede utilizar el mtodoSystem.DateTime.FromOADate(System.Double). Valores de fecha u hora neutrales. El tipo de datos Date (Tipo de datos, Visual Basic) contiene siempre informacin de fecha y hora. Para la conversin de tipos, Visual Basic considera 1/1/0001 (1 de enero del ao 1) un valor neutral de fecha y 00:00:00 (medianoche) un valor neutral de hora. Si se convierte un valor Date a una cadena, CStr no incluye valores neutrales en la cadena resultante. Por ejemplo, si se convierte #January 1, 0001 9:30:00# en una cadena, el resultado sera "9:30:00 a.m.", ya que la informacin de fecha se omite. No obstante, la informacin de fecha sigue estando presente en el valor Date original y se puede recuperar mediante funciones como DatePart (Funcin, Visual Basic). Distincin de referencias culturales. Las funciones de conversin de tipos que implican cadenas realizan las conversiones en funcin de la configuracin de la referencia cultural actual de la aplicacin. Por ejemplo, CDate reconoce formatos de fecha de acuerdo con la configuracin regional del sistema. Debe suministrar el da, mes y ao en el orden correcto para la configuracin regional; de no hacerlo as, es posible que la fecha no se interprete de forma correcta. No se puede reconocer un formato de fecha largo si contiene la cadena del da de la semana, por ejemplo Mircoles. Si necesita convertir una representacin de cadena de un valor en un formato diferente al especificado por la configuracin regional, no puede utilizar las funciones de conversin de tipos de Visual Basic. Para ello, utilice los mtodos ToString(IFormatProvider) y Parse(String, IFormatProvider) de ese tipo de valor.

Por ejemplo, utiliceSystem.Double.Parse(System.String,System.IFormatProvider) cuando convierte una cadena a un valor de tipo Double y utilice System.Double.ToString(System.IFormatProvider) cuando convierta un valor de tipo Double en una cadena. CType (Funcin) La funcin CType toma un segundo argumento, typename, y convierte expression en typename, donde typename puede ser cualquier tipo de datos, estructura, clase o interfaz para la que exista una conversin vlida. Para una comparacin de CType con otras palabras clave de conversin de tipos, vea DirectCast y TryCast. Ejemplo de la funcin CBool En este ejemplo se utiliza la funcin CBool para convertir expresiones en valores Boolean. Si una expresin se evala en un valor distinto de cero, CBool devuelve True; en caso contrario, devuelve False. Dim a, b, c AsInteger Dim check AsBoolean 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 la funcin CByte En este ejemplo se utiliza la funcin CByte para convertir expresiones en Byte. Dim aDouble AsDouble Dim aByte AsByte aDouble = 125.5678 ' The following line of code sets aByte to 126. aByte = CByte(aDouble)

Ejemplo de la funcin CChar En el ejemplo siguiente se utiliza la funcin CChar para convertir el primer carcter de una expresin String en un tipo Char. Dim aString AsString Dim aChar AsChar ' CChar converts only the first character of the string. aString = "BCD" ' The following line of code sets aChar to "B". aChar = CChar(aString)

El argumento de entrada para CChar debe pertenecer al tipo de datos Char o String. No puede utilizar CChar para convertir un nmero en un carcter, porque CChar no acepta un tipo de datos numricos. En el ejemplo siguiente se obtiene un nmero que representa un punto de cdigo (cdigo de carcter) y se convierte al carcter correspondiente. En el ejemplo se utilizaInputBox (Funcin, Visual Basic) para obtener la cadena de dgitos, CInt para convertir la cadena en el tipo Integer y ChrW para convertir el nmero en el tipo Char. Dim someDigits AsString Dim codePoint AsInteger Dim thisChar AsChar someDigits = InputBox("Enter code point of character:") codePoint = CInt(someDigits) ' The following line of code sets thisChar to the Char value of codePoint. thisChar = ChrW(codePoint)

Ejemplo de la funcin CDate En este ejemplo se utiliza la funcin CDate para convertir cadenas en valores Date. En general, no se recomienda especificar las fechas y horas como cadenas en el cdigo, tal y como se puede ver en este ejemplo. Utilice literales de fecha y hora, por ejemplo #Feb 12, 1969# y #4:45:233 p.m.#. Dim aDateString, aTimeString AsString Dim aDate, aTime AsDate aDateString = "February 12, 1969" aTimeString = "4:35:47 PM" ' The following line of code sets aDate to a Date value. aDate = CDate(aDateString) ' The following line of code sets aTime to Date value. aTime = CDate(aTimeString)

Ejemplo de la funcin CDbl Dim aDec AsDecimal Dim aDbl AsDouble ' The following line of code uses the literal type character D to make aDec a De cimal. aDec = 234.456784D ' The following line of code sets aDbl to 1.9225456288E+1. aDbl = CDbl(aDec * 8.2D * 0.01D)

Ejemplo de la funcin CDec En el siguiente ejemplo se utiliza la funcin CDec para convertir un valor numrico en Decimal. Dim aDouble AsDouble Dim aDecimal AsDecimal aDouble = 10000000.0587 ' The following line of code sets aDecimal to 10000000.0587.

aDecimal = CDec(aDouble)

Ejemplo de la funcin CInt En este ejemplo se utiliza la funcin CInt para convertir un valor a Integer. Dim aDbl AsDouble Dim anInt AsInteger aDbl = 2345.5678 ' The following line of code sets anInt to 2346. anInt = CInt(aDbl)

Ejemplo de la funcin CLng En el ejemplo siguiente se utiliza la funcin CLng para convertir valores a Long. Dim aDbl1, aDbl2 AsDouble Dim aLng1, aLng2 AsLong aDbl1 = 25427.45 aDbl2 = 25427.55 ' The following line of code sets aLng1 to 25427. aLng1 = CLng(aDbl1) ' The following line of code sets aLng2 to 25428. aLng2 = CLng(aDbl2)

Ejemplo de la funcin CObj En el siguiente ejemplo se utiliza la funcin CObj para convertir un valor numrico en Object. La variable Object en s contiene slo un puntero de cuatro bytes, que seala al valor Doubleque tiene asignado. Dim aDouble AsDouble Dim anObject AsObject aDouble = 2.7182818284 ' The following line of code sets anObject to a pointer to aDouble. anObject = CObj(aDouble)

Ejemplo de CSByte En el siguiente ejemplo se utiliza la funcin CSByte para convertir un valor numrico en SByte. Dim aDouble AsDouble Dim anSByte AsSByte aDouble = 39.501 ' The following line of code sets anSByte to 40. anSByte = CSByte(aDouble)

Ejemplo de la funcin CShort En el siguiente ejemplo se utiliza la funcin CShort para convertir un valor numrico en Short. Dim aByte AsByte Dim aShort AsShort aByte = 100 ' The following line of code sets aShort to 100. aShort = CShort(aByte)

Ejemplo de la funcin CSng En el ejemplo siguiente se utiliza la funcin CSng para convertir valores a Single. Dim aDouble1, aDouble2 AsDouble Dim aSingle1, aSingle2 AsSingle aDouble1 = 75.3421105 aDouble2 = 75.3421567 ' The following line of code sets aSingle1 to 75.34211. aSingle1 = CSng(aDouble1) ' The following line of code sets aSingle2 to 75.34216. aSingle2 = CSng(aDouble2)

Ejemplo de la funcin CStr En el siguiente ejemplo se utiliza la funcin CStr para convertir un valor numrico en String. Dim aDouble AsDouble Dim aString AsString aDouble = 437.324 ' The following line of code sets aString to "437.324". aString = CStr(aDouble)

En el ejemplo siguiente se utiliza la funcin CStr para convertir valores Date en valores String. Dim aDate AsDate Dim aString AsString ' The following line of code generates a COMPILER ERROR because of invalid forma t. ' aDate = #February 12, 1969 00:00:00# ' Date literals must be in the format #m/d/yyyy# or they are invalid. ' The following line of code sets the time component of aDate to midnight. aDate = #2/12/1969# ' The following conversion suppresses the neutral time value of 00:00:00. ' The following line of code sets aString to "2/12/1969". aString = CStr(aDate) ' The following line of code sets the time component of aDate to one second past midnight. aDate = #2/12/1969 12:00:01 AM# ' The time component becomes part of the converted value.

' The following line of code sets aString to "2/12/1969 12:00:01 AM". aString = CStr(aDate)

CStr siempre representa un valor Date en el formato corto estndar de la configuracin regional actual, por ejemplo, "15/6/2003 4:35:47 p.m.". Sin embargo, CStr suprime los valores neutrales 1/1/0001 para la fecha y 00:00:00 para la hora. Para obtener informacin detallada sobre los valores devueltos por CStr, vea Valores devueltos para la funcin CStr. Ejemplo de CUInt En el siguiente ejemplo se utiliza la funcin CUInt para convertir un valor numrico en UInteger. Dim aDouble AsDouble Dim aUInteger AsUInteger aDouble = 39.501 ' The following line of code sets aUInteger to 40. aUInteger = CUInt(aDouble)

Ejemplo de CULng En el siguiente ejemplo se utiliza la funcin CULng para convertir un valor numrico en ULong. Dim aDouble AsDouble Dim aULong AsULong aDouble = 39.501 ' The following line of code sets aULong to 40. aULong = CULng(aDouble)

Ejemplo de CUShort En el siguiente ejemplo se utiliza la funcin CUShort para convertir un valor numrico en UShort. Dim aDouble AsDouble Dim aUShort AsUShort aDouble = 39.501 ' The following line of code sets aUShort to 40. aUShort = CUShort(aDouble)

Date (Tipo de datos, Visual Basic)


Contiene valores IEEE de 64 bits (8 bytes) que representan fechas comprendidas entre el 1 de ene ro del ao 0001 y el 31 de diciembre de 9999, y horas comprendidas entre las 0:00:00 (medianoch e) y las 11:59:59. Cada incremento representa 100 nanosegundos de tiempo transcurrido desde el comienzo del 1 de enero del ao 1 del calendario gregoriano. El valor mximo representa 100 nano segundos antes del comienzo del 1 de enero del ao 10000.

Descripcin Utilice el tipo de datos Date para albergar valores de fecha, valores de tiempo o valores de fecha y hora. El valor predeterminado de Date es 0:00:00 (medianoche) del 1 de enero de 0001.

Requisitos de formato Debe incluir un literal Date dentro de los signos de nmero (# #). Debe especificar el valor de fecha en el formato M/d/yyyy, por ejemplo #5/31/1993#. Este requisito es independiente de la configuraci n regional y de la configuracin de formato de fecha y hora del equipo. El motivo de esta restriccin es que el significado del cdigo nunca debe cambiar en funcin de la c onfiguracin regional en que se ejecuta la aplicacin. Suponga que asigna un literal Date de #3/4/1 998# para representar 4 de marzo de 1998. En una configuracin regional que utilice el formato m m/dd/yyyy, 3/4/1998 se compila como desee. Pero suponga que implementa la aplicacin en varios pases. En una configuracin regional que utilice el formato dd/mm/yyyy, el literal incluido en el cd igo se compilar como Abril 3, 1998. En una configuracin local que utilice el formato yyyy/mm/dd, el literal podra no ser vlido (Abril 1998, 0003) y generar un error de compilacin. Soluciones Para convertir un literal de tipo Date al formato de la configuracin regional o a un formato personalizado, proporcione el literal a la funcin Format (Funcin) especificando Formatos de fecha y hora predefinidos (Funcin Format) o Formatos de fecha y hora definidos por el usuario (Funcin Format). En el siguiente ejemplo se muestra esta operacin. MsgBox("The formatted date is " & Format(#5/31/1993#, "dddd, d MMM yyyy")) Si lo desea, puede utilizar tambin 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 Mayo 31, 1993 a las 12:14 del medioda. Dim dateInMay As New System.DateTime(1993, 5, 31, 12, 14, 0) Formato de hora Puede especificar el valor de hora con un 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 ni los segundos, debe especificar a.m. o p.m. Valores predeterminados de fecha y hora Si no se incluye una fecha en un literal de fecha/hora, Visual Basic establece la parte de fecha del valor en Enero 1, 0001.Si no se incluye una hora en un literal de fecha y hora, Visual Basic establece la parte de hora del valor en el inicio del da, es decir, medianoche (0:00:00). Conversiones de tipo Si convierte un valor Date al tipo String, Visual Basic representa la fecha en funcin del formato corto de fecha especificado por la configuracin regional en tiempo de ejecucin, y representa la hora de acuerdo con el formato de hora (12 o 24 horas) especificado por la configuracin regional en tiempo de ejecucin.

Sugerencias de programacin Consideraciones de interoperabilidad. Si est interactuando con componentes que no se han escrito para .NET Framework, por ejemplo objetos de automatizacin u objetos 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 transferir un argumento de fecha y hora a un componente de este tipo, declrelo como Double en lugar de Date en el nuevo cdigo de Visual Basic, y utilice los mtodos de conversinSystem.DateTime.FromOADate(System.Double) y System.DateTime.ToOADate. Caracteres de tipo.Date no tiene caracteres de tipo de literal ni caracteres de tipo de identificador. Sin embargo, el compilador trata los literales incluidos entre caracteres de signo de nmero (# #) como Date. Tipo de marco de trabajo. El tipo correspondiente en .NET Framework es la estructura System.DateTime. Ejemplo Una variable o constante del tipo de datos Date contiene tanto la fecha como la hora. Esto se ilustra en el siguiente ejemplo: Dim someDateAndTime As Date = #8/13/2002 12:14 PM#

Decimal (Tipo de datos, Visual Basic)


Contiene valores de 128 bits con signo (16 bytes) que representan nmeros enteros de 96 bits (12 bytes) que se ajustan a una potencia variable de 10. El factor de ajuste especifica el nmero de dg itos a la derecha del separador decimal; comprendidos entre 0 y 28. Con un ajuste de 0 (sin decim ales), el valor ms grande posible es +/-79,228,162,514,264,337,593,543,950,335 (+/-7.922816251 4264337593543950335E+28). Con 28 posiciones decimales, el valor ms grande es +/-7.9228162 514264337593543950335 y el valor ms pequeo distinto de cero es +/-0.00000000000000000000 00000001 (+/-1E-28). Descripcin: El tipo de datos Decimal proporciona el nmero mximo de dgitos significativos para un nmero. Admite hasta 29 dgitos significativos y puede representar valores que superan 7.9228 x 10^28. Es especialmente cmodo para clculos, por ejemplo, financieros, que requieren un gran nmero de dgitos pero no puede tolerar errores del redondeo. El valor predeterminado de Decimal es 0. Sugerencias de programacin Precisin.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 ajuste de entero que especifica qu parte del valor es una fraccin decimal. Debido a esto, los nmeros Decimal tienen una representacin ms precisa en la memoria que los tipos de punto flotante (Single y Double). Rendimiento. El tipo de datos Decimal es el ms lento de todos los tipos numricos. Debe considerar la importancia de la precisin frente al rendimiento antes de elegir un tipo de datos.

Ampliacin. El tipo de datos Decimal se ampla a Single o Double. Esto significa que se puede convertir Decimal a cualquiera de estos tipos sin encontrar un errorSystem.OverflowException. Ceros finales. Visual Basic no almacena los ceros finales en un literal Decimal. Sin embargo, una variable Decimal conserva cualquier cero final adquirido de forma computacional. Esto se ilustra en el siguiente ejemplo: Dim d1, d2, d3, d4 As Decimal d1 = 2.375D d2 = 1.625D d3 = d1 + d2 d4 = 4.000D MsgBox("d1 = " & CStr(d1) & ", d2 = " & CStr(d2) _ & ", d3 = " & CStr(d3) & ", d4 = " & CStr(d4)) El resultado de MsgBox en el ejemplo anterior es el siguiente: d1 = 2.375, d2 = 1.625, d3 = 4.000, d4 = 4 Caracteres de tipo. Al agregar el carcter de tipo de literal D a un literal, el tipo de datos se convierte en un tipo de datos Decimal. Si se agrega el carcter de tipo de identificador @a cualquier identificador, se convierte su tipo de datos al tipo Decimal. Tipo de Framework. El tipo correspondiente en .NET Framework es la estructura System.Decimal. Intervalo Podra necesitar utilizar el carcter de tipo D para asignar un valor grande a una variable o constante Decimal. Esto se ilustra en el siguiente ejemplo: Dim bigDec1 As Decimal = 9223372036854775807 Dim bigDec2 As Decimal = 9223372036854775808 Dim bigDec3 As Decimal = 9223372036854775808D ' No overflow. ' Overflow. ' No overflow.

El compilador interpreta un literal como Long a menos que le siga un carcter de tipo de literal. La declaracin para bigDec1 no genera un desbordamiento porque su valor est dentro del intervalo para Long. Sin embargo, el valor para bigDec2 es demasiado grande para Long, por lo que el compilador genera un error. El carcter de tipo de literal D resuelve el problema para bigDec3 obligando al compilador a que interprete el literal como Decimal.

Declare (Instruccin)
Declara una referencia a un procedimiento implementado en un archivo externo. [ <attributelist> ] [ accessmodifier ] [ Declare [ charsetmodifier ] [ Sub ] name [ Alias "aliasname" ] [ ([ parameterlist ' -or[ <attributelist> ] [ accessmodifier ] [ Declare [ charsetmodifier ] [ Function ] [ Alias "aliasname" ] [ ([ parameterlist Shadows ] [ Overloads ] _ Lib "libname" _ ]) ] Shadows ] [ Overloads ] _ name Lib "libname" _ ]) ] [ As returntype ]

Partes: attributelist Opcional. Vea Lista de atributos. accessmodifier Opcional. Puede ser una de las siguientes: Public Protected Friend Private Protected Friend Shadows Opcional. Ver Shadows. charsetmodifier Opcional. Especifica informacin sobre el juego de caracteres y la bsqueda de archivos. Puede ser una de las siguientes: Ansi (predeterminado) Unicode (Visual Basic) Auto Sub Opcional, pero debe aparecer Sub o Function. Indica que el procedimiento externo no devuelve ningn valor. Function Opcional, pero debe aparecer Sub o Function. Indica que el procedimiento externo devuelve un valor. name Obligatorio. Nombre de esta referencia externa. Para obtener ms informacin, vea Nombres de elementos declarados. Lib Obligatorio. Introduce una clusula Lib, que especifica el archivo que contiene el procedimiento que se declara. libname

Obligatorio. Nombre del archivo que contiene el procedimiento declarado. Alias Opcional. Indica que el procedimiento que se declara no se puede identificar dentro de su archivo mediante el nombre especificado en name. Su identificacin se especifica enaliasname. aliasname Es obligatorio si se utiliza la palabra clave Alias. Cadena que identifica el procedimiento en una de estas dos maneras: Nombre del punto de entrada del procedimiento dentro de su archivo, entre comillas ("") O bien, Signo de nmero (#) seguido de un entero que especifica el nmero ordinal del punto de entrada del procedimiento en su archivo parameterlist Es obligatorio si el procedimiento toma parmetros. Ver Lista de parmetros. returntype Es obligatorio si se especifica Function y Option Strict tiene el valor On. Tipo de datos del valor devuelto por el procedimiento. A veces es necesario llamar a un procedimiento definido en un archivo (como un archivo DLL o un recurso de cdigo) fuera del proyecto. Cuando se hace esto, el compilador de Visual Basic no tiene acceso a la informacin necesaria para llamar correctamente al procedimiento, por ejemplo dnde est ubicado el procedimiento, cmo se identifica, la secuencia de llamada y el tipo de valor devuelto, y el juego de caracteres de cadena que utiliza. La instruccin Declare crea una referencia a un procedimiento externo y proporciona esta informacin necesaria. Declare slo se puede utilizar en el nivel de mdulo. Esto significa que el contexto de declaracin de una referencia externa debe ser una clase, estructura o mdulo, y no puede ser un archivo de cdigo fuente, espacio de nombres, interfaz, procedimiento o bloque. Para obtener ms informacin, vea Contextos de declaracin y niveles de acceso predeterminados. Las referencias externas tienen como valor predeterminado el acceso Public (Visual Basic). Los niveles de acceso se pueden ajustar con los modificadores de acceso.

Reglas
Atributos. Los atributos se pueden aplicar a una referencia externa. Cualquier atributo que se aplique slo tiene efecto en su proyecto, no en el archivo externo.

Modificadores. Los procedimientos externos son implcitamente Shared (Visual Basic). No se puede utilizar la palabra clave Shared al declarar una referencia externa y no se puede modificar su estado compartido. Un procedimiento externo no puede participar en operaciones de reemplazar, implementar miembros de interfaz o controlar eventos. En consecuencia, no se pueden utilizar las palabras clave Overrides, Overridable, NotOverridable, MustOverride, Implements o Handles en una instruccin Declare. Nombre del procedimiento externo. No hay que asignar a esta referencia externa (en name) el mismo nombre que tiene el nombre del punto de entrada del procedimiento en su archivo externo (aliasname). Se puede utilizar una clusula Alias para especificar el nombre del punto de entrada. Esto puede ser til si el procedimiento externo tiene el mismo nombre que un modificador reservado de Visual Basic o una variable, procedimiento o cualquier otro elemento de programacin del mismo mbito.

Nota En la mayora de los archivos DLL, los nombres de punto de entrada distinguen entre maysculas y minsculas. Nmero de procedimiento externo. Alternativamente, se puede utilizar una clusula Alias para especificar el nmero ordinal del punto de entrada dentro de la tabla de exportacin del archivo externo. Para ello, comience aliasname con un signo de nmero (#). Esto puede ser til si un carcter del nombre de procedimiento externo no se permite en Visual Basic o si el archivo externo exporta el procedimiento sin un nombre. Reglas de tipos de datos Tipos de datos de parmetros. Si Option Strict tiene el valor On, se debe especificar el tipo de datos de cada parmetro en parameterlist. ste puede ser cualquier tipo de datos o el nombre de una enumeracin, estructura, clase o interfaz. En parameterlist, se utiliza una clusula As para especificar el tipo de datos del argumento que se va a pasar a cada parmetro. Nota Si el procedimiento externo no se ha escrito para .NET Framework, debe tener cuidado de que los tipos de datos se correspondan. Por ejemplo, si se declara una referencia externa a un procedimiento de Visual Basic 6.0 con un parmetro Integer (16 bits en Visual Basic 6.0), el argumento correspondiente debe identificarse como Short en la instruccin Declare, puesto que es un tipo entero de 16 bits en Visual Basic. Igualmente, en Visual Basic 6.0 Long tiene un ancho de datos diferente y Date se implementa de manera diferente. Tipo de datos devuelto. Si el procedimiento externo es de tipo Function y Option Strict tiene el valor On, hay que especificar el tipo de datos del valor devuelto al cdigo de llamada. ste puede ser cualquier tipo de datos o el nombre de una enumeracin, estructura, clase o interfaz.

Nota El compilador de Visual Basic no comprueba si los tipos de datos son compatibles con los del procedimiento externo. Si hay una desigualdad, Common Language Runtime genera una excepcin MarshalDirectiveException en tiempo de ejecucin. Tipos de datos predeterminados. Si Option Strict tiene el valor Off y no se especifica el tipo de datos de un parmetro en parameterlist, el compilador de Visual Basic convierte el argumento correspondiente en Object (Tipo de datos). Igualmente, si no se especifica returntype, el compilador asume que el tipo de datos devuelto es Object. Nota Como se trata de un procedimiento externo que podra haberse escrito en una plataforma diferente, es peligroso asumir cul ser el tipo de datos o permitir que tomen los valores predeterminados. Es mucho ms seguro especificar el tipo de datos de cada parmetro y del valor devuelto, si se devuelve alguno. De este modo mejora la legibilidad del cdigo. Comportamiento mbito. Una referencia externa est en mbito a lo largo de toda su clase, estructura o mdulo. Perodo de duracin. Una referencia externa tiene el mismo perodo de duracin que la clase, estructura o mdulo en las que se declara. Llamar a un procedimiento externo. Se puede llamar a un procedimiento externo de la misma manera que se llama a un procedimiento Function o Sub si se utiliza en una expresin cuando devuelve un valor o si se especifica en una instruccin Instruccin Call (Visual Basic) cuando no devuelve un valor. Pasa los argumentos al procedimiento externo exactamente como especifica parameterlist en la instruccin Declare. No tenga en cuenta cmo se declararon originalmente los parmetros en el archivo externo. Igualmente, si se devuelve un valor, utilcelo exactamente como especifica returntype en la instruccin Declare. Juegos de caracteres. En charsetmodifier se puede especificar cmo Visual Basic debe calcular referencias a cadenas cuando se llama al procedimiento externo. El modificador Ansiindica a Visual Basic que calcule las referencias a todas las cadenas como valores ANSI y el modificador Unicode le indica que calcule las referencias a todas las cadenas como valores Unicode. El modificador Auto indica a Visual Basic que calcule las referencias a las cadenas segn las reglas de .NET Framework basadas en el parmetro name de la referencia externa o en el parmetro aliasname si se ha especificado. El valor predeterminado es Ansi. charsetmodifier tambin especifica cmo Visual Basic debe buscar el procedimiento externo en su archivo externo. Ansi y Unicode indican a Visual Basic que busque sin modificar el nombre durante la bsqueda. Auto indica a Visual Basic que debe determinar el juego de caracteres base de la plataforma en tiempo de ejecucin y, posiblemente, modificar el nombre del procedimiento externo, de la manera siguiente: En una plataforma ANSI, como Windows 95, Windows 98 o Windows Millennium Edition, busque primero el procedimiento externo sin modificar el nombre. Si no se encuentra, anexe "A" al final del nombre del procedimiento externo y bsquelo de nuevo.

En una plataforma Unicode, como Windows NT, Windows 2000 o Windows XP, busque primero el procedimiento externo sin modificar el nombre. Si no se encuentra, anexe "W" al final del nombre del procedimiento externo y bsquelo de nuevo. Mecanismo. Visual Basic utiliza el mecanismo de invocacin de plataforma (PInvoke) de .NET Framework para resolver los procedimientos externos y tener acceso a ellos. La instruccinDeclare y la clase DllImportAttribute utilizan automticamente este mecanismo y no es necesario tener conocimientos de PInvoke. Para obtener ms informacin, vea Tutorial: Llamar a las API de Windows. Ejemplo En el ejemplo siguiente se declara una referencia externa a un procedimiento Function que devuelve el nombre de usuario actual. A continuacin se llama al procedimiento externoGetUserNameA como parte del procedimiento getUser. DeclareFunction getUserName Lib"advapi32.dll"Alias"GetUserNameA" _ (ByVal lpBuffer AsString, ByRef nSize AsInteger) AsInteger Sub getUser() Dim buffer AsString = NewString(CChar(" "), 25) Dim retVal AsInteger = getUserName(buffer, 25) Dim userName AsString = Strings.Left(buffer, InStr(buffer, Chr(0)) - 1) MsgBox(userName) EndSub El atributo DllImportAttribute proporciona otro modo de utilizar funciones en cdigo no administrado. En el ejemplo siguiente se declara una funcin importada sin utilizar una instruccinDeclare. ' Add an Imports statement at the top of the class, structure, or ' module that uses the DllImport attribute. Imports System.Runtime.InteropServices <DllImportAttribute("kernel32.dll", EntryPoint:="MoveFileW", _ SetLastError:=True, CharSet:=CharSet.Unicode, _ ExactSpelling:=True, _ CallingConvention:=CallingConvention.StdCall)> _ PublicSharedFunction moveFile(ByVal src AsString, _ ByVal dst AsString) AsBoolean ' 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. EndFunction Default Identifica una propiedad como la propiedad predeterminada de su clase, estructura o interfaz. Descripcin: Una clase, estructura o interfaz puede designar slo una de sus propiedades como propiedad predeterminada, siempre que esa propiedad acepte al menos un parmetro. Si el cdigo hace

referencia a una clase o estructura sin especificar un miembro, Visual Basic resuelve esta referencia como propiedad predeterminada. Las propiedades predeterminadas pueden producir una pequea reduccin en los caracteres del cdigo fuente pero pueden dificultar la lectura del cdigo. Si el cdigo de llamada no est familiarizado con su clase o estructura, cuando hace referencia al nombre de stas, no puede estar seguro de si esta referencia tiene acceso a la clase o estructura en s, o a una propiedad predeterminada. Esto puede conducir a errores del compilador o a ligeros errores lgicos en tiempo de ejecucin. Puede reducir levemente las posibilidades de errores de propiedades predeterminadas utilizando siempre Option Strict (Instruccin) para establecer la comprobacin de tipos del compilador en On.

Si est pensando en utilizar una clase o estructura en el cdigo, debe determinar si tiene una propiedad predeterminada, y si es as, cmo se llama. Debido a estas desventajas, debera considerar no definir propiedades predeterminadas. Para una mejor lectura del cdigo, debera considerar asimismo hacer siempre una referencia explcita a todas las propiedades, incluso a las propiedades predeterminadas. El modificador Default se puede utilizar en este contexto: Property (Instruccin) Delegate (Instruccin) Se utiliza para declarar un delegado. Un delegado es un tipo de referencia que se establece para un mtodo Shared de un tipo o para un mtodo de instancia de un objeto. Se puede utilizar cualquier procedimiento con tipos de parmetros de coincidencia y tipos devueltos para crear una instancia de esta clase delegada. Se puede llamar al procedimiento por medio de la instancia de delegado. [ <attrlist> ] [ accessmodifier ] _ [ Shadows ] Delegate [ Sub | Function ] name [( Of typeparamlist )] [([ paramete rlist ])] [ As type ] Partes: attrlist Opcional. Lista de atributos que se aplican a este delegado. Los atributos mltiples se separan por comas. Debe incluir la lista Lista de atributos entre corchetes angulares ("<" y ">"). accessmodifier Opcional. Especifica qu cdigo puede tener acceso al delegado. Puede ser una de las siguientes:

Public Cualquier cdigo que puede tener acceso al elemento que declara el delegado. Protected Slo el cdigo de la clase del delegado o de una clase derivada. Friend Slo el cdigo incluido en el mismo ensamblado. Private Slo el cdigo incluido en el elemento que declara el delegado. Puede especificar Protected Friend para permitir el acceso desde el cdigo incluido en la clase del delegado, en una clase derivada o en el mismo ensamblado. Shadows Opcional. Indica que este delegado vuelve a declarar y ocultar un elemento de programacin con el mismo nombre, o un conjunto de elementos sobrecargados, en una clase base. Puede hacer que cualquier tipo de elemento declarado prevalezca sobre cualquier otro tipo. Un elemento sombreado no est disponible desde la clase derivada que lo sombrea, a menos que el elemento que produce el sombreado no est accesible. Por ejemplo, si un elemento Private sombrea un elemento de clase base, el cdigo que no tiene el permiso para obtener acceso al elemento Private obtiene acceso al elemento de clase base. Sub Opcional, pero debe aparecer Sub o Function. Declara este procedimiento como un procedimiento Sub delegado que no devuelve ningn valor. Function Opcional, pero debe aparecer Sub o Function. Declara este procedimiento como un procedimiento Function delegado que devuelve un valor. name Obligatorio. Nombre del tipo delegado. Sigue las convenciones de nomenclatura estndar de las variables. typeparamlist Opcional. Lista de parmetros de tipo de este delegado. Los parmetros de tipo estn separados por comas. Debe incluir la lista Lista de tipos entre parntesis y anteponer la palabra clave Of. parameterlist Opcional. Lista de parmetros que se transfieren al procedimiento cuando se llama. Debe incluir la lista Lista de parmetros entre parntesis. type Obligatorio si se especifica un procedimiento Function. Tipo de datos del valor devuelto. Descripcin

La instruccin Delegate define los tipos de parmetros y el tipo de valor devuelto de una clase de delegado. Se puede utilizar cualquier procedimiento con tipos de parmetros de coincidencia y tipo de valor devuelto para crear una instancia de esta clase delegada. Se puede llamar al procedimiento mediante la instancia de delegado, llamando al mtodo Invoke del delegado. Los delegados se pueden declarar en el nivel de espacio de nombres, mdulo, clase o estructura, pero no en un procedimiento. Cada clase delegada define un constructor al cual se pasa la especificacin de un mtodo de objeto. Un argumento para un constructor delegado debe ser una expresin con el siguiente formato: AddressOf [expression.]methodname El tipo de tiempo de compilacin de expression debe ser el nombre de una clase o interfaz que contenga un mtodo del nombre especificado cuya firma coincida con la firma de la clase delegada. methodname puede ser un mtodo compartido o un mtodo de instancia. Aunque se cree un delegado para el mtodo predeterminado de la clase, methodname no es opcional. Ejemplo: En el ejemplo siguiente se utiliza la instruccin Delegate para declarar un delegado que opere con dos nmeros y devuelva un nmero. El mtodo DelegateTest toma una instancia de un delegado de este tipo y la utiliza para ordenar los nmeros en pares. DelegateFunction MathOperator( _ ByVal x AsDouble, _ ByVal y AsDouble _ ) AsDouble Function AddNumbers( _ ByVal x AsDouble, _ ByVal y AsDouble _ ) AsDouble Return x + y EndFunction Function SubtractNumbers( _ ByVal x AsDouble, _ ByVal y AsDouble _ ) AsDouble Return x - y EndFunction Sub DelegateTest( _ ByVal x AsDouble, _ ByVal op As MathOperator, _ ByVal y AsDouble _ ) Dim ret AsDouble ret = op.Invoke(x, y) ' Call the method. MsgBox(ret) EndSub

ProtectedSub Test() DelegateTest(5, AddressOf AddNumbers, 3) DelegateTest(9, AddressOf SubtractNumbers, 3) EndSub Instruccin Dim (Visual Basic) Declara y asigna espacio para almacenar una o ms variables. [ <attributelist> ] [ accessmodifier ] [[ Shared ] [ Shadows ] | [ Static ]] [ R eadOnly ] Dim [ WithEvents ] variablelist Partes: attributelist Opcional. Ver Lista de atributos. accessmodifier Opcional. Puede ser una de las siguientes: Public Protected Friend Private Protected Friend Ver Niveles de acceso en Visual Basic. Shared Opcional. Ver Shared. Shadows Opcional. Ver Shadows. Static Opcional. Ver Static. ReadOnly Opcional. Ver ReadOnly. WithEvents Opcional. Especifica que stas son variables de objeto que hacen referencia a instancias de una clase que puede provocar eventos. Ver WithEvents.

variablelist Obligatorio. Lista de variables que se declara en esta instruccin. variable [ , variable ... ] Cada variable tiene la sintaxis y las partes siguientes: variablename[ ( [ boundslist ] ) ] [ As [ New ] datatype ] [ = initializer ] Parte Descripcin

variablename Obligatorio. Nombre de la variable. Ver Nombres de elementos declarados. boundslist New datatype initializer Opcional. Lista de lmites de cada dimensin de una variable de matriz. Opcional. Crea una nueva instancia de la clase cuando se ejecuta la instruccin Dim. Obligatorio si Option Strict es On. Tipo de datos de la variable. Opcional si no se especifica New. Expresin que se evala y se asigna a la variable cuando se crea.

Descripcin Se deben declarar todas las variables que se utilizan en un programa para indicar al compilador de Visual Basic el tipo de datos de la variable y otra informacin, por ejemplo qu cdigo puede tener acceso a la misma. En el ejemplo siguiente se declara una variable que contiene un valor Integer. Dim numberOfStudents As Integer Slo se puede utilizar Dim en el nivel de mdulo o procedimiento. Esto significa que el contexto de declaracin de una variable tiene que ser una clase, estructura, mdulo, procedimiento o bloque, y no puede ser un archivo de cdigo fuente, espacio de nombres o interfaz. Para obtener ms informacin, vea Contextos de declaracin y niveles de acceso predeterminados. Si Option Explicit es On (el valor predeterminado), el compilador requiere una declaracin para cada variable que se utiliza. Si se activa Option Explicit Off, las variables no declaradas tienen de forma predeterminada el tipo de datos Object (Tipo de datos), que podra no ser lo que se desea. Puede especificar el tipo de datos de cada variable en la instruccin Dim. Tambin puede especificar un valor inicial. Si no lo hace, Visual Basic utiliza la configuracin predeterminada. Para obtener ms informacin, vea "Reglas de tipos de datos" y "Valores predeterminados" en la seccin "Informacin detallada" de esta pgina de Ayuda. En el ejemplo siguiente se declara e inicializa una variable String. Dim summary As String = "Summary of results"

Puede especificar qu cdigo puede tener acceso a una variable proporcionandoaccessmodifier en la instruccin Dim. Para obtener ms informacin, vea "Modificadores" y "Nivel de acceso" en la seccin "Informacin detallada" de esta pgina de Ayuda. Puede declarar una variable para contener una matriz, que puede almacenar varios valores. Para obtener ms informacin, vea "Reglas de matrices" en la seccin "Informacin detallada" de esta pgina de Ayuda. Para obtener ms informacin sobre matrices, vea Matrices en Visual Basic. En el ejemplo siguiente se declara una variable de matriz Integer. Dim days() As Integer En general, debera colocar todas las instrucciones Dim al principio de la regin del cdigo donde utiliza las variables. Para obtener ms informacin, vea "Solucin de problemas" en la seccin "Informacin detallada" de esta pgina de Ayuda. Informacin detallada En esta seccin se tratan detalladamente las reas siguientes: Declaracin Tipos de datos Matrices Comportamiento Solucin de problemas Reglas de declaracin Contexto de declaracin. Una variable declarada en el nivel de mdulo, fuera de cualquier procedimiento, es una variable miembro o un campo; es miembro de la clase, estructura, mdulo o interfaz que la declara. Una variable declarada en el nivel de procedimiento es una variable local; es local al procedimiento o bloque que la declara. Atributos. Slo se pueden aplicar atributos a las variables miembro, no a las variables locales. Un atributo proporciona informacin a los metadatos del ensamblado, que no son significativos para el almacenamiento temporal como las variables locales. Uso implcito de Dim. Si se especifica uno de los modificadores Public, Protected, Friend, Protected Friend, Private, Shared, Shadows, Static, ReadOnly o WithEvents, se puede omitir opcionalmente la palabra clave Dim. Public maximumAllowed As Double Protected Friend currentUserName As String Private salary As Decimal Static runningTotal As Integer En el nivel de mdulo, no se puede utilizar el modificador Static para declarar variables miembro. En el nivel de procedimiento, no se puede utilizar Shared, Shadows, ReadOnly,WithEvents ni un modificador de acceso para declarar variables locales.

Variables WithEvents. Slo se puede especificar WithEvents en variables miembro, no en variables locales dentro de un procedimiento. Si especifica WithEvents, el tipo de datos de las variables debe ser un tipo de clase concreto que no sea Object. No se puede declarar una matriz con WithEvents. Para obtener ms informacin sobre eventos, vea Eventos y controladores de eventos. Varias variables. Se pueden declarar varias variables en la misma instruccin de declaracin si se especifica la parte variablename para cada uno y se sigue cada nombre de matriz con parntesis. Las variables mltiples se separan con comas. Dim lastTime, nextTime, allTimes() As Date Reglas de tipos de datos Tipos de datos. La instruccin Dim puede declarar el tipo de datos de una variable. Se puede especificar cualquier tipo de datos o el nombre de una enumeracin, estructura, clase o interfaz. Dim finished As Boolean Dim monitorBox As System.Windows.Forms.Form Tipo predeterminado. Si no se especifica datatype, la variable toma el tipo de datos de initializer. Si datatype o initializer no estn presentes, el tipo de datos utiliza Object (Tipo de datos) de manera predeterminada. Si se especifica datatype e initializer, el tipo de datos de initializer debe ser convertible a datatype. Tipos diferentes. Se pueden especificar tipos de datos diferentes para variables diferentes utilizando una clusula As independiente para cada variable declarada. Opcionalmente, es posible declarar varias variables que sean del mismo tipo utilizando una clusula As comn. Todas las variables toman el tipo de datos especificado en la primera clusula As que se encuentre despus de su parte variablename correspondiente. Dim a, b, c As Single, x, y As Double, i As Integer ' a, b, and c are all Single; x and y are both Double Inicializacin. La instruccin Dim puede inicializar el contenido de las variables seleccionadas en variablelist. En un tipo de valor, initializer se utiliza para proporcionar una expresin que se va a asignar a la variable. La expresin se debe evaluar como una constante que se puede calcular en tiempo de compilacin. Dim quantity As Integer = 10 Dim message As String = "Just started" En un tipo de referencia, la palabra clave New se utiliza para crear una nueva instancia de la clase o estructura especificada por datatype. Si utiliza New, no utilice una expresininitializer. En su lugar, si necesario, proporcione argumentos al constructor de la clase a partir de la que est creando la variable. Dim bottomLabel As New System.Windows.Forms.Label Si declara ms de una variable con la misma clusula As, no puede proporcionar un initializer para ese grupo de variables

Reglas de matrices Variables de matriz. Para especificar que una variable en variablelist es una matriz, siga inmediatamente su variablename con parntesis. Si la matriz tiene ms de una dimensin, debe incluir comas entre los parntesis para indicar el nmero de dimensiones. Dim oneDimension(), twoDimensions(,), threeDimensions(,,) As Byte Una matriz puede tener de 1 a 32 dimensiones. Lmites de matrices. Se puede especificar el lmite inferior y superior de cada dimensin. Para ello, incluya boundslist dentro de los parntesis. En cada dimensin, boundslistespecifica el lmite superior y, opcionalmente, el lmite inferior. El lmite inferior siempre es cero, tanto si se especifica como si no. Cada ndice puede variar de cero hasta el valor de su lmite superior. Las dos instrucciones siguientes son equivalentes. Cada instruccin declara una matriz de 21 elementos Integer. Cuando se tiene acceso a la matriz, el ndice puede variar de 0 a 20. Dim totals(20) As Integer Dim totals(0 To 20) As Integer La instruccin siguiente declara una matriz bidimensional de tipo Double. La matriz tiene 4 filas (3 + 1) de 6 columnas (5 + 1) cada una. Dim matrix2(3, 5) As Double Observe que el lmite superior representa el valor ms alto posible del ndice, no la longitud de la dimensin, que es el lmite superior ms uno. Lmites de matrices en blanco. Todos los lmites de una declaracin de matriz se pueden dejar en blanco. Si se hace esto, la matriz tiene el nmero de dimensiones especificado pero no se inicializa, de modo que tiene un valor de Nothing hasta que se inicialicen al menos algunos de sus elementos. La instruccin Dim debe especificar los lmites para todas las dimensiones o para ninguna de ellas. Dim messages() As String Matrices vacas. Es posible utilizar 1 para declarar el lmite superior de una dimensin de matriz. Esto significa que la matriz est vaca, pero no es Nothing, una distincin que requieren algunas funciones del Common Language Runtime. No obstante, el cdigo de Visual Basic no permite un acceso correcto a dicha matriz. Si se intenta el acceso, se produce un error IndexOutOfRangeException durante la ejecucin. Para obtener ms informacin, vea Cmo: Crear una matriz sin elementos. Inicializacin de matrices. Los valores de una matriz se pueden inicializar rodeando los valores de inicializacin con llaves ({}). Dim longArray() As Long = {0, 1, 2, 3}

En las matrices multidimensionales, la inicializacin de cada dimensin independiente se escribe entre llaves dentro de la dimensin exterior. Los elementos se especifican en orden de importancia de filas. Dim twoDimensions(,) As Integer = {{0, 1, 2}, {10, 11, 12}} Comportamiento Valores predeterminados. Si no se especifica initializer en una variable, Visual Basic la inicializa con el valor predeterminado del tipo de datos. En la tabla siguiente se muestran los valores de inicializacin predeterminados. Tipo de datos Todos los tipos numricos (incluso Byte y SByte) Char Todas las referencias de tipo (incluidas Object, String y todas las matrices). Boolean Date Valor predeterminado 0 Binario 0 Nothing False 12:00 a.m. del 1 de enero del ao 1 (01/01/0001 12:00:00 a.m.)

Cada elemento de una estructura se inicializa como si fuera una variable independiente. Si se declara la longitud de una matriz pero no se inicializan sus elementos, stos se inicializan como si fueran una variable independiente. Nivel de acceso. Las variables locales (dentro de un procedimiento) tienen un valor predeterminado de acceso pblico y no se puede utilizar ningn modificador de acceso en ellas. Las variables miembro de clase y mdulo (fuera de cualquier procedimiento) tienen como valor predeterminado el acceso privado y las variables miembro de estructura tienen como valor predeterminado el acceso pblico. Sus niveles de acceso se pueden ajustar con los modificadores de acceso. mbito. Las variables locales slo estn en mbito dentro de su procedimiento o bloque. Las variables miembro estn en mbito a lo largo de su clase, estructura o mdulo. Calificacin. El cdigo externo a una clase, estructura o mdulo debe calificar el nombre de una variable miembro con el nombre de esa clase, estructura o mdulo. El cdigo externo a un procedimiento o bloque no puede hacer referencia a ninguna variable local dentro de ese procedimiento o bloque. Perodo de duracin. Una variable local Static tiene un perodo de duracin ms largo que el del procedimiento en el que se declara. Los lmites de la duracin de la variable dependen de dnde se declare el procedimiento y si est o no Shared. Declaracin de procedimiento En un mdulo La variable se inicializa La primera vez que se llama al procedimiento La variable deja de existir Cuando el programa finaliza la ejecucin

En una clase o estructura,Shared

La primera vez que se llama al procedimiento en una instancia especfica o en la propia clase o estructura La primera vez que se llama al procedimiento en una instancia especfica

Cuando el programa finaliza la ejecucin

En una clase o estructura, noShared

Cuando la instancia se libera para la recoleccin de elementos no utilizados

Solucin de problemas Orden de ejecucin. La instruccin Dim no es propiamente una instruccin ejecutable. Sin embargo, si inicializa una o ms variables, las inicializaciones se tratan como instrucciones de asignacin. Esto significa que el valor de una variable atraviesa los pasos siguientes: 1. En la primera entrada en el elemento de cdigo que declara la variable, Visual Basic la inicializa con el valor predeterminado para su tipo de datos. 2. Cuando la ejecucin llega a la instruccin Dim de la variable, Visual Basic la inicializa con el valor proporcionado en la instruccin Dim. 3. Cada vez que la ejecucin vuelve a la instruccin Dim de la variable, Visual Basic la establece una vez ms en el valor proporcionado en la instruccin Dim. Esto tiene las implicaciones siguientes cuando se utiliza una instruccin Dim para inicializar una variable: Si se utiliza la variable antes de ejecutar la instruccin Dim, su valor es el predeterminado para el tipo de datos, no el valor proporcionado en la instruccin Dim. Si la ejecucin nunca llega a la instruccin Dim, la variable nunca se inicializa con el valor proporcionado en la instruccin Dim. Si se cambia el valor pero despus se vuelve a la instruccin Dim, el valor modificado se reemplaza por el proporcionado en la instruccin Dim. Si todas las instrucciones Dim se colocan al principio de la regin de cdigo en la que aparecen, por ejemplo un mdulo o procedimiento, el cdigo las inicializa tal como se deseaba. Ejemplos: En el ejemplo siguiente se declaran variables utilizando la instruccin Dim con distintas opciones. ' The following statement declares and initializes a Long variable. Dim startingAmount AsLong = 500 ' The following statement declares a variable that refers to a Button ' object, creates a new Button object, and assigns it to the variable. Dim switchButton AsNew System.Windows.Forms.Button ' The following statement declares a variable that can only be ' accessed by code in the same class, structure, or module. Private homeTelephone AsString = ""

' The following statement declares a local variable that always retains ' its value, even after its procedure returns to the calling code. Static totalSales AsDouble ' The following statement declares a variable that refers to an array. Dim highTemperature(31) AsInteger ' The following statement declares and initializes an array variable ' that holds 4 Boolean check values. Dim checkValues() AsBoolean = {False, False, True, False} .................................................................................................

DirectCast Introduce una operacin de conversin de tipos basada en la herencia o la implementacin. Descripcin DirectCast no utiliza rutinas auxiliares para conversin de Visual Basic en tiempo de ejecucin, por lo que puede proporcionar un mejor rendimiento que CType para convertir al tipos de datos Object y desde l. Se utiliza la palabra clave DirectCast de la misma manera que se utiliza la palabra clave CType (Funcin) y TryCast. Se proporciona una expresin como primer argumento y un tipo para convertir como segundo argumento. DirectCast requiere una relacin de herencia o de implementacin entre los tipos de datos de los dos argumentos. Esto significa que un tipo debe heredar de otro o implementar otro. Errores y problemas DirectCast genera un error del compilador si detecta que no existe ninguna relacin herencia o de implementacin. No obstante, la falta de errores del compilador no garantiza una conversin correcta. Si se restringe la conversin deseada, se podra producir un error en tiempo de ejecucin. Si es as, el tiempo de ejecucin produce un error InvalidCastException. Palabras clave para conversiones A continuacin se muestra una comparacin de las palabras clave de conversin de tipos. Palabra clave CType (Funcin) DirectCast Tipos de datos Relacin de argumento Error en tiempo de ejecucin

Produce InvalidCastException Cualquier tipo La conversin de ampliacin o de de datos restriccin se debe definir entre los dos tipos de datos Cualquier tipo Un tipo debe heredar de otro tipo o Produce InvalidCastException de datos implementarlo

TryCast

Slo tipos de referencia

Un tipo debe heredar de otro tipo o Devuelve Nothing (Visual implementarlo Basic)

Ejemplo El ejemplo siguiente muestra dos usos de DirectCast, uno con un resultado satisfactorio en tiempo de ejecucin y otro que no lo tiene. Dim q AsObject = 2.37 Dim i AsInteger = CType(q, Integer) ' The following conversion fails at run time Dim j AsInteger = DirectCast(q, Integer) Dim f AsNew 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 ejecucin de q es Double. CType tiene un resultado satisfactorio porque Double se puede convertir en Integer. No obstante, el primerDirectCast no tiene un resultado satisfactorio porque el tipo en tiempo de ejecucin de Double no tiene relacin de herencia con Integer, aunque existe una conversin. El segundoDirectCast tiene un resultado satisfactorio porque convierte del tipo Form al tipo Control del que Form hereda. Instruccin Do...Loop (Visual Basic) Repite un bloque de instrucciones mientras una condicin Boolean sea True o hasta que la condicin se convierta en True. Do { While | Until } condition [ statements ] [ Exit Do ] [ statements ] Loop -orDo [ statements ] [ Exit Do ] [ statements ] Loop { While | Until } condition

Partes While Obligatorio si se utiliza Until. Repite el bucle hasta que condition sea False. Until

Obligatorio a menos que se utilice While. Repite el bucle hasta que condition sea True. condition Opcional. Expresin Boolean. Si condition es Nothing, Visual Basic la trata como False. statements Opcional. Una o ms instrucciones que se repiten mientras o hasta que condition sea True. Exit Do Opcional. Transfiere el control fuera del bucle Do. Loop Obligatorio. Termina la definicin del bucle Do. Descripcin Utilice una estructura Do...Loop cuando desee repetir un conjunto de instrucciones un nmero indefinido de veces, hasta que se satisfaga una condicin. Si desea repetir las instrucciones un nmero fijo de veces, la Instruccin For...Next es normalmente una opcin mejor. La estructura Do...Loop proporciona mayor flexibilidad que laInstruccin While...End While (Visual Basic) porque permite elegir si se debe finalizar el bucle cuando condition deja de ser Trueo cuando es True por primera vez. Tambin le permite probar condition al principio o al final del bucle. Reglas Naturaleza de la condicin. Generalmente, la condicin es el resultado de comparar dos valores, pero tambin puede ser cualquier expresin que da como resultado un valor deBoolean (Tipo de datos, Visual Basic) (True o False). Esto incluye los valores de otros tipos de datos, como los numricos, que han sido convertidos a valores de tipo Boolean. Probar la condicin. Slo puede probar condition una vez, al principio o al final del bucle. Puede usar While o Until para especificar condition, pero no ambas. Nmero de iteraciones. Si prueba condition al principio del bucle (en la instruccin Do), puede que el bucle no se ejecute ni siquiera una vez. Si prueba al final del bucle (en la instruccin Loop), el bucle siempre se ejecuta al menos una vez. Anidar bucles. Los bucles Do se pueden anidar colocando un bucle dentro de otro. Tambin puede anidar distintos tipos de estructuras de control dentro de otras. Para obtener ms informacin, vea Estructuras de control anidadas. Transferir el control fuera del bucle. La Instruccin Exit (Visual Basic) transfiere el control inmediatamente a la instruccin que sigue a la instruccin Loop. Puede desear salir de un bucle si detecta una condicin que hace que sea innecesario o no se pueda continuar la iteracin, como puede ser un valor errneo o una solicitud de finalizacin. Puede colocar cualquier cantidad de instrucciones Exit Do en cualquier punto del bucle Do. Exit Do suele utilizarse despus de evaluar alguna condicin, por ejemplo en una estructuraIf...Then...Else. Bucles sin fin

Un uso de Exit Do consiste en comprobar una condicin que podra ocasionar un bucle sin fin; es decir, un bucle que pudiera ejecutarse un nmero extremadamente elevado, o incluso infinito, de veces. Si detecta este tipo de situacin, puede utilizar Exit Do para interrumpir el bucle. De lo contrario, el bucle sigue ejecutndose. En el siguiente ejemplo se asigna a number un valor que podra hacer que el bucle se ejecutara ms de 2 ^ 31 veces. La instruccin If comprueba si se produce esta situacin y, si es as, sale de ella, impidiendo la entrada en un bucle sin fin. Sub exitDoExample() Dim counter AsInteger = 0 Dim number AsInteger = 8 DoUntil number = 10 If number <= 0 ThenExitDo number -= 1 counter += 1 Loop MsgBox("The loop ran "& counter &" times.") EndSub Nota Para detener un bucle sin fin, presione ESC o CTRL+INTER.

Ejemplo El ejemplo siguiente ilustra las estructuras Do...Loop anidadas, as como el uso de While y Until, y la comprobacin al principio (instruccin Do) y al final (instruccin Loop) del bucle. Dim check AsBoolean = True Dim counter AsInteger = 0 Do DoWhile counter < 20 counter += 1 If counter = 10 Then check = False ExitDo EndIf Loop LoopUntil check = False EndSub

En el ejemplo anterior, la estructura Do...Loop interior se ejecuta 10 veces, establece el valor del indicador en False y sale de forma prematura utilizando la instruccin Exit Do. El bucle externo sale inmediatamente al comprobar el valor del indicador.

Double (Tipo de datos, Visual Basic) Contiene nmeros IEEE de punto flotante de doble precisin de 64 bits (8 bytes) con valores de 1,79769313486231570E+308 a 4,94065645841246544E-324 para nmeros negativos y de 4,94065645841246544E-324 a 1,79769313486231570E+308 para nmeros positivos. Los nmeros de doble precisin almacenan aproximaciones de nmeros reales. Descripcin El tipo de datos Double proporciona las magnitudes ms grandes y ms pequeas posibles para un nmero. El valor predeterminado de Double es 0. Sugerencias de programacin Precisin. Cuando trabaje con nmeros de punto flotante, tenga presente que no siempre tienen una representacin precisa en memoria. Esto podra provocar unos resultados inesperados en ciertas operaciones, como comparacin de valor y el operador Mod. Para obtener ms informacin, vea Solucionar problemas de tipos de datos. Ceros finales. Los tipos de datos de punto flotante no tienen ninguna representacin interna de caracteres 0 finales. Por ejemplo, no distinguen entre 4,2000 y 4,2. Por consiguiente, los caracteres 0 finales no aparecen al mostrar o imprimir valores de punto flotante. Caracteres de tipo. Al agregar el carcter de tipo de literal R a un literal, el tipo de datos se convierte en un tipo de datos Double. Si se agrega el carcter de tipo de identificador # a cualquier identificador, se convierte su tipo de datos al tipo Double. Tipo de Framework. El tipo correspondiente en .NET Framework es la estructura System.Double. ........... Each Especifica la variable de bucle que se va a utilizar en un bucle For Each. Descripcin La palabra clave Each se utiliza en este contexto: For Each...Next (Instruccin) Else (Visual Basic) Presenta un grupo de instrucciones que se ejecutarn o compilarn si no se ha ejecutado ningn otro grupo condicional de instrucciones. Descripcin La palabra clave Else se puede utilizar en estos contextos:

If...Then...Else (Instruccin) Select...Case (Instruccin) #If...Then...#Else (Directiva) ElseIf (Visual Basic) Incluye una condicin que se prueba si la prueba condicional anterior ha fallado. Descripcin La palabra clave ElseIf se puede utilizar en estos contextos: If...Then...Else (Instruccin) #If...Then...#Else (Directiva) End (Instruccin) Finaliza la ejecucin inmediatamente. Comentarios Puede colocar la instruccin End en cualquier lugar de un procedimiento para forzar que se detenga la ejecucin de toda la aplicacin. End cierra los archivos abiertos mediante una instruccin Open y borra todas las variables de la aplicacin. La aplicacin se cierra en cuanto no detecte otros programas que mantengan referencias a sus objetos y no haya cdigo en ejecucin. Nota La instruccin End detiene repentinamente la ejecucin de cdigo, sin invocar el mtodo Dispose o Finalize, o ningn otro cdigo de Visual Basic. Se invalidan las referencias de objetos mantenidas por otros programas. Si una instruccin End se encuentra dentro de un bloque Try o Catch, el control no pasa al bloque Finally correspondiente. La instruccin Stop suspende la ejecucin, pero a diferencia de End no cierra ningn archivo ni borra variables, a menos que se encuentre en un archivo ejecutable compilado (.exe). Dado que End finaliza su aplicacin sin tener en cuenta los recursos que podran estar abiertos, debera intentar cerrar limpiamente antes de utilizarlo. Por ejemplo, si su aplicacin tiene formularios abiertos, debera cerrarlos antes de que el control llegue a la instruccin End. Debera utilizar End moderadamente, y slo cuando sea necesario detener la ejecucin inmediatamente. Las formas normales de terminar un procedimiento (Instruccin Return (Visual Basic) yInstruccin Exit (Visual Basic)) no slo cierran el procedimiento limpiamente, sino que tambin dan al cdigo que lo llam la oportunidad de cerrarse limpiamente. Por ejemplo, una aplicacin de consola puede sencillamente volver (Return) del procedimiento Main. Nota de seguridad La instruccin End llama al mtodo Exit de la clase Environment en el espacio de nombres System. Exit requiere que tenga permiso UnmanagedCode. De lo contrario, se genera un

errorSecurityException. Cuando va seguido por una palabra clave adicional, End (Visual Basic) indica el final de la definicin del procedimiento o bloque correspondientes. Por ejemplo, End Function finaliza la definicin de un procedimiento Function. Ejemplo El ejemplo siguiente utiliza la instruccin End para terminar la ejecucin del cdigo 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 EndIf EndSub Instruccin Enum (Visual Basic) Declara una enumeracin y define los valores de sus miembros. [ <attribute list> ] [ access modifier ] Enum enumeration name [ As data type ] member list End Enum [ Shadows ]

Partes attribute list Opcional. Lista de atributos que se aplican a esta enumeracin. Debe incluir la Lista de atributos entre corchetes angulares ("<" y ">"). access modifier Opcional. Especifica qu cdigo puede tener acceso a esta enumeracin. Puede ser una de las siguientes: Public Protected Friend Private Puede especificar ProtectedFriend para permitir el acceso desde el cdigo dentro de la clase de la enumeracin o desde el mismo ensamblado.

Shadows Opcional. Especifica que esta enumeracin vuelve a declarar y ocultar un elemento de programacin denominado de forma idntica, o un conjunto de elementos sobrecargados, en una clase base. Slo puede especificar Shadows en la propia enumeracin y no en ninguno de sus miembros. enumeration name Requerido. Nombre de la enumeracin. Para obtener ms informacin sobre qu nombres son vlidos, vea Nombres de elementos declarados. data type Requerido si OptionStrict es On. Tipos de datos de la enumeracin y de todos sus miembros. member list Requerido. Lista de constantes de miembros que se declara en esta instruccin. Varios miembros aparecen en lneas de cdigo fuente individuales. Cada member tiene la sintaxis y las partes siguientes: [<attribute list>] member name [ = initializer ] Parte member name initializer Description Requerido. Nombre de este miembro. Opcional. Expresin que se evala en tiempo de compilacin y se asigna a este miembro.

EndEnum Termina el bloque Enum. Descripcin Si tiene un conjunto de valores inalterables que se relacionan lgicamente entre s, puede definirlos juntos en una enumeracin. Esto proporciona nombres descriptivos para la enumeracin y sus miembros que son ms fciles de recordar que sus valores. Puede utilizar los miembros de la enumeracin en muchos lugares de su cdigo. Mejora asimismo la legibilidad de su cdigo porque todos los valores relacionados utilizan el mismo nombre de enumeracin. Slo se puede utilizar Enum en el nivel de espacio de nombres o de mdulo. Esto significa que el contexto de la declaracin de una enumeracin debe ser un archivo de cdigo fuente, espacio

de nombres, clase, estructura, mdulo o interfaz, y no un procedimiento. Para obtener ms informacin, vea Contextos de declaracin y niveles de acceso predeterminados. La instruccin Enum puede declarar el tipo de datos de una enumeracin. Cada miembro toma el tipo de datos de la enumeracin. Puede especificar Byte, Integer, Long, SByte, Short,UInteger, ULong o UShort. Si no especifica un initializer para un miembro, Visual Basic lo inicializa a cero (si es el primer member de una member list) o a un valor superior en uno al del member inmediatamente anterior. Las enumeraciones de clases, estructuras, mdulos y miembros de interfaz tienen como valor predeterminado el acceso pblico. Puede ajustar sus niveles de acceso con los modificadores de acceso. Las enumeraciones de miembros de espacio de nombres tienen como valor predeterminado el acceso de amigo. Puede ajustar sus niveles de acceso a pblico, pero no a privado o protegido. Para obtener ms informacin, vea las reglas incluidas en Niveles de acceso en Visual Basic. Contexto de la declaracin. Una enumeracin declarada en el nivel de mdulo, fuera de cualquier procedimiento, es una enumeracin de miembros; se trata de un miembro de la clase, estructura, mdulo o interfaz que la declara. Una enumeracin declarada en el nivel de espacio de nombres, fuera de cualquier clase, estructura, mdulo o interfaz, es un miembro slo del espacio de nombres en el que aparece. Atributos. Puede aplicar los atributos a una enumeracin en conjunto, pero no a sus miembros individualmente. Un atributo proporciona informacin a los metadatos del ensamblado. Modificadores. De forma predeterminada, todas las enumeraciones son tipos y sus campos, constantes. Por consiguiente no se pueden utilizar las palabras clave Shared, Static yReadOnly al declarar una enumeracin o sus miembros. Reglas de tipos de datos Tipo predeterminado. Si no especifica data type para la enumeracin, cada miembro toma el tipo de datos de initializer. Si se especifica data type e initializer, el tipo de datos deinitializer debe ser convertible a data type. Si ni data type ni initializer estn presentes, el tipo de datos utiliza Integer de manera predeterminada. Inicializacin. La instruccin Enum puede inicializar el contenido de los miembros seleccionados en member list. Utilice initializer para proporcionar una expresin que se va a asignar al miembro. La expresin proporcionada en initializer puede ser cualquier combinacin de literal, otras constantes ya definidas, y miembros de la enumeracin ya definidos, incluso un miembro anterior de esta enumeracin. Puede utilizar operadores aritmticos y lgicos para combinar estos elementos. No puede utilizar variables ni funciones en initializer. No obstante, pueden utilizarse palabras clave de conversin como CByte y CShort. Tambin puede utilizar AscW si lo llama con un argumento constante String o Char, puesto que puede evaluarse en tiempo de compilacin. Comportamiento

Nivel de acceso. Todos los miembros de la enumeracin tienen acceso pblico y no pueden utilizar ningn modificador de acceso. Sin embargo, si la propia enumeracin tiene un nivel de acceso ms restringido, tiene prioridad el nivel de acceso a la enumeracin especificado. mbito. Se puede tener acceso a las enumeraciones de miembros desde cualquier lugar dentro de su clase, estructura, mdulo o interfaz. Las enumeraciones de miembros de espacio de nombres son accesibles desde cualquier cdigo dentro de ese espacio de nombres. Calificacin. El cdigo fuera de una clase, estructura o mdulo debe calificar el nombre de una enumeracin de miembros con el nombre de esa clase, estructura o mdulo. Valores no vlidos.Si el valor de un miembro rebasa el intervalo permitido para el tipo de datos subyacente o si se inicializa un miembro al valor mximo permitido por dicho tipo, el compilador notifica un error. Las variables de enumeracin son variables declaradas para ser del tipo Enum. Declarar una variable de este modo le ayudar a controlar los valores que le asigne. Sin embargo, todava puede asignar un valor que no sea un miembro de la enumeracin, siempre que su tipo de datos pueda convertirse en el tipo de datos de la enumeracin. Esto es til cuando la enumeracin es un campo de indicador y se asigna una combinacin de indicadores a la variable de enumeracin. El ejemplo siguiente muestra una asignacin de varios indicadores a una variable de enumeracin. Enum filePermissions create = 1 read = 2 write = 4 delete = 8 EndEnum Dim file1Perm As filePermissions file1Perm = filePermissions.create Or filePermissions.read

Deben calificarse todas las referencias a un miembro de enumeracin, ya sea con el nombre de una variable de enumeracin o con el nombre de la propia enumeracin. Por ejemplo, en el ejemplo anterior, puede hacer referencia al primer miembro como filePermissions.create, pero no como create. Ejemplo El ejemplo siguiente utiliza la instruccin Enum para definir un conjunto relacionado de valores constantes con nombre. En este caso, los valores son colores que se pueden elegir a fin de disear formularios de entrada de datos para una base de datos. PublicEnum InterfaceColors MistyRose = &HE1E4FF& SlateGray = &H908070& DodgerBlue = &HFF901E& DeepSkyBlue = &HFFBF00& SpringGreen = &H7FFF00& ForestGreen = &H228B22& Goldenrod = &H20A5DA& Firebrick = &H2222B2& EndEnum

El ejemplo siguiente muestra valores que incluyen nmeros positivos y negativos. Enum SecurityLevel IllegalEntry = -1 MinimumSecurity = 0 MaximumSecurity = 1 EndEnum Instruccin Erase (Visual Basic) Se utiliza para liberar variables de matriz y desasignar la memoria utilizada para sus elementos. Erase arraylist Partes arraylist Obligatorio. Lista de variables de matriz que se van a borrar. Las variables mltiples se separan con comas. Descripcin La instruccin Erase slo puede aparecer en el nivel de procedimiento. Esto significa que se pueden liberar matrices dentro de un procedimiento, pero no en el nivel de clase o mdulo. La instruccin Erase es equivalente a asignar Nothing a cada variable de matriz. Ejemplo En el ejemplo siguiente se utiliza la instruccin Erase para borrar dos matrices y liberar su memoria (1000 y 100 elementos de almacenamiento, respectivamente). La instruccin ReDimdespus asigna una instancia de matriz nueva a la matriz de tres dimensiones. Dim threeDimArray(9, 9, 9), twoDimArray(9, 9) AsInteger Erase threeDimArray, twoDimArray ReDim threeDimArray(4, 4, 9) Error (Instruccin) Simula un error generado. Error errornumber Partes errornumber

Obligatorio. Puede ser cualquier nmero de error vlido. Comentarios La instruccin Error se incluye a efectos de compatibilidad con versiones anteriores. En el nuevo cdigo, especialmente al crear objetos, utilice el mtodo Raise del objeto Err para generar errores en tiempo de ejecucin. Si errornumber est definido, la instruccin Error realiza una llamada al controlador del error despus de haber asignado a las propiedades del objeto Err los siguientes valores predeterminados: Propiedad Number Source Description Valor Valor especificado como argumento de la instruccin Error. Puede ser cualquier nmero de error vlido. Nombre del proyecto de Visual Basic actual. Expresin de tipo String (cadena) correspondiente al valor devuelto por la funcin Error para el argumento Number especificado, si existe esa cadena. Si la cadena no existe,Description contiene una cadena de longitud cero (""). El nombre completo con unidad, ruta de acceso y nombre de archivo del archivo de Ayuda de Visual Basic. El id. de contexto apropiado del archivo de Ayuda de Visual Basic para el error correspondiente a la propiedad Number.

HelpFile HelpContext

LastDLLError Cero. Si no existe un controlador de errores, o si no hay ninguno habilitado, se crea y se muestra un mensaje de error a partir de las propiedades del objeto Err. Nota Algunas aplicaciones host de Visual Basic no pueden crear objetos. Consulte la documentacin de la aplicacin host para determinar si puede crear clases y objetos.

Ejemplo En este ejemplo se utiliza la instruccin Error para generar el error nmero 11. On Error Resume Next ' Defer error handling. Error 11 ' Simulate the "Division by zero" error. Event (Instruccin) Declara un evento definido por el usuario.

[ [ [ ' [ [ [ '

<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 Partes Parte attrlist Descripcin Opcional. Lista de atributos que se aplican a este evento. Los atributos mltiples se separan por comas. Debe incluir la lista Lista de atributos entre corchetes angulares ("<" y ">"). Opcional. Especifica qu cdigo puede tener acceso al evento. Puede ser una de las siguientes: Public cualquier cdigo que puede tener acceso al elemento que lo declara puede tener acceso a l. Protected slo el cdigo que est dentro de su clase o de una clase derivada puede tener acceso a l. Friend slo el cdigo que est dentro del mismo ensamblado puede tener acceso a l. Private slo el cdigo que est dentro del elemento que lo declara puede tener acceso a l. Puede especificar Protected Friend para permitir el acceso desde el cdigo incluido en la clase del evento, en una clase derivada o en el mismo ensamblado. Shared Shadows Opcional. Especifica que este evento no est asociado a una instancia especfica de una clase o una estructura. Opcional. Indica que este evento vuelve a declarar y ocultar un elemento de programacin con el mismo nombre, o un conjunto de elementos sobrecargados, en una clase base. Puede hacer que cualquier tipo de

accessmodifier

elemento declarado prevalezca sobre cualquier otro tipo. Un elemento sombreado no est disponible desde la clase derivada que lo sombrea, a menos que el elemento que produce el sombreado no est accesible. Por ejemplo, si un elemento Private sombrea un elemento de clase base, el cdigo que no tiene el permiso para obtener acceso al elemento Private obtiene acceso al elemento de clase base. eventname parameterlist Implements implementslist Obligatorio. Nombre del evento. Sigue las convenciones de nomenclatura estndar de las variables. Opcional. Lista de variables locales que representan los parmetros de este evento. Debe incluir la lista Lista de parmetros entre parntesis. Opcional. Indica que este evento implementa un evento de una interfaz. Requerido si se suministra Implements. Lista de procedimientos Sub que se estn implementando. Los diversos procedimientos se separan con comas: implementedprocedure [ , implementedprocedure ... ] Cada implementedprocedure tiene la sintaxis y las partes siguientes: interface.definedname Parte interface Descripcin Obligatorio. Nombre de una interfaz que est implementando la clase contenedora o la estructura de este procedimiento.

definedname Obligatorio. Nombre por el que est definido el procedimiento en interface. No es necesario que su valor sea igual al de name, el nombre que est utilizando este procedimiento para implementar el procedimiento definido. Custom delegatename AddHandler Obligatorio. Los eventos declarados como Custom deben definir descriptores de acceso AddHandler, RemoveHandler y RaiseEvent personalizados. Opcional. El nombre de un delegado que especifica la firma del controlador de eventos. Obligatorio. Declara un descriptor de acceso AddHandler, que especifica las instrucciones que se deben ejecutar cuando se agrega un controlador de eventos, bien explcitamente usando la instruccin AddHandler o implcitamente utilizando la clusula Handles.

End AddHandler Obligatorio. Termina el bloque AddHandler. value RemoveHandler Obligatorio. Nombre de parmetro. Obligatorio. Declara un descriptor de acceso RemoveHandler, que especifica las instrucciones que se deben ejecutar cuando se quita un controlador de

eventos utilizando la instruccin RemoveHandler. End RemoveHandler RaiseEvent Obligatorio. Termina el bloque RemoveHandler. Obligatorio. Declara un descriptor de acceso RaiseEvent, que especifica las instrucciones que se deben ejecutar cuando se produce el evento utilizando la instruccinRaiseEvent. Normalmente, invoca una lista de delegados mantenida por los descriptores de acceso AddHandler y RemoveHandler. Obligatorio. Termina el bloque RaiseEvent.

End RaiseEvent

delegatesignature Obligatorio. Lista de parmetros que hace coincidir los parmetros requeridos por el delegado delegatename. Debe incluir la lista Lista de parmetros entre parntesis. statements End Event Opcional. Instrucciones que contienen los cuerpos de los mtodos AddHandler, RemoveHandler y RaiseEvent. Obligatorio. Termina el bloque Event.

Descripcin Una vez declarado el evento, utilice la instruccin RaiseEvent para provocar el evento. Un evento tpico podra declararse y activarse como se muestra en los siguientes fragmentos de cdigo: PublicClass EventSource ' Declare an event. PublicEvent LogonCompleted(ByVal UserName AsString) Sub CauseEvent() ' Raise an event on successful logon. RaiseEvent LogonCompleted("AustinSteele") EndSub EndClass Nota Los argumentos de eventos se pueden declarar como los argumentos de procedimientos, con las siguientes excepciones: los eventos no pueden tener argumentos con nombre, argumentos ParamArray ni argumentos Optional. Los eventos no tienen valores devueltos. Para controlar un evento, debe asociarlo a una subrutina del controlador de eventos utilizando la instruccin Handles o AddHandler. Las firmas de la subrutina y del evento deben coincidir. Para controlar un evento compartido, debe utilizar la instruccin AddHandler. Slo puede utilizar Event en el nivel de mdulo. Esto significa que el contexto de declaracin de un evento debe ser una clase, estructura, mdulo o interfaz, y no un archivo de cdigo fuente, un espacio de nombres o un bloque. Para obtener ms informacin, vea Contextos de declaracin y niveles de acceso predeterminados. En la mayora de las circunstancias, puede utilizar la primera sintaxis de la seccin Sintaxis de este tema para declarar los eventos. Sin embargo, algunos escenarios requieren que tenga mayor control sobre el comportamiento detallado del evento. La ltima sintaxis de la seccin Sintaxis de

este tema, que utiliza la palabra clave Custom, proporciona ese control permitindole definir eventos personalizados. En un evento personalizado, debe especificar exactamente lo que ocurre cuando el cdigo agrega o quita un controlador de eventos a o del evento, o cuando el cdigo produce el evento. Para obtener ejemplos, vea Cmo: Declarar eventos que evitan que se pierda memoria y Cmo: Declarar eventos que evitan bloqueos. Ejemplo El ejemplo siguiente utiliza eventos para hacer una cuenta atrs de 10 a 0 segundos. El cdigo ilustra varios de los mtodos, propiedades e instrucciones relacionados con eventos, incluida la instruccin RaiseEvent. La clase que produce un evento es el origen de evento, y los mtodos que procesan el evento son los controladores de eventos. Un origen de evento puede tener mltiples controladores para los eventos que genera. Cuando una clase produce el evento, ese evento se genera en cada clase que ha elegido para controlar eventos para esa instancia del objeto. El ejemplo tambin utiliza un formulario (Form1) con un botn (Button1) y un cuadro de texto (TextBox1). Al hacer clic en el botn, el primer cuadro de texto muestra una cuenta atrs de 10 a 0 segundos. Cuando ha transcurrido todo el tiempo (10 segundos), el primer cuadro de texto muestra la palabra "Done" (terminado). El cdigo para Form1 especifica los estados inicial y terminal del formulario. Tambin contiene el cdigo que se ejecuta cuando se producen eventos. Para utilizar este ejemplo, abra un nuevo proyecto de formularios Windows Forms. A continuacin, agregue al formulario principal, llamado Form1, un botn denominado Button1 y un cuadro de texto con el nombre TextBox1. A continuacin, haga clic con el botn secundario del mouse en el formulario y haga clic en Ver cdigo para abrir el editor de cdigo. Agregue una variable WithEvents a la seccin de declaraciones de la clase Form1: PrivateWithEvents mText As TimerState

Agregue el cdigo siguiente al cdigo de Form1. Sustituya los procedimientos que estn duplicados, como Form_Load o Button_Click. PrivateSub Form1_Load(ByVal sender AsObject, _ ByVal e As System.EventArgs) _ HandlesMyBase.Load Button1.Text = "Start" mText = New TimerState EndSub PrivateSub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles Button1.Click mText.StartCountdown(10.0, 0.1) EndSub PrivateSub mText_ChangeText() Handles mText.Finished TextBox1.Text = "Done" EndSub

PrivateSub mText_UpdateTime(ByVal Countdown AsDouble) _ Handles mText.UpdateTime TextBox1.Text = Format(Countdown, "##0.0") ' Use DoEvents to allow the display to refresh. My.Application.DoEvents() EndSub Class TimerState PublicEvent UpdateTime(ByVal Countdown AsDouble) PublicEvent Finished() PublicSub StartCountdown(ByVal Duration AsDouble, _ ByVal Increment AsDouble) Dim Start AsDouble = DateAndTime.Timer Dim ElapsedTime AsDouble = 0 Dim SoFar AsDouble = 0 DoWhile ElapsedTime < Duration If ElapsedTime > SoFar + Increment Then SoFar += Increment RaiseEvent UpdateTime(Duration - SoFar) EndIf ElapsedTime = DateAndTime.Timer - Start Loop RaiseEvent Finished() EndSub EndClass

Presione F5 para ejecutar el ejemplo anterior y haga clic en el botn etiquetado como Start (Iniciar). El primer cuadro de texto empieza la cuenta atrs de los segundos. Cuando ha transcurrido todo el tiempo (10 segundos), el primer cuadro de texto muestra la palabra "Done" (terminado). Nota El mtodo My.Application.DoEvents no procesa los eventos exactamente de la misma manera que como lo hace el formulario. Para permitir al formulario controlar directamente los eventos, puede utilizar el subprocesamiento mltiple. Para obtener ms informacin, vea Subprocesamiento mltiple en Visual Basic. Instruccin Exit (Visual Basic) Sale de un procedimiento o bloque y transfiere el control inmediatamente a la instruccin que sigue a la llamada al procedimiento o a la definicin del bloque. Exit { Do | For | Function | Property | Select | Sub | Try | While } Partes

Do

Sale inmediatamente del bucle Do en el que aparece. La ejecucin contina con la instruccin que sigue a la instruccin Loop. Exit Do slo se puede utilizar dentro de un bucle Do. Cuando se utiliza dentro de bucles Do anidados, Exit Do sale del bucle ms profundo y transfiere el control al siguiente nivel de anidamiento. For Sale inmediatamente del bucle For en el que aparece. La ejecucin contina con la instruccin que sigue a la instruccin Next. Exit For slo se puede utilizar dentro de un bucleFor...Next o For Each...Next. Cuando se utiliza dentro de bucles For anidados, Exit For sale del bucle ms profundo y transfiere el control al siguiente nivel de anidamiento. Function Sale inmediatamente del procedimiento Function en el que aparece. La ejecucin contina con la instruccin que sigue la instruccin que llam al procedimiento Function. Exit Function slo se puede utilizar dentro de un procedimiento Function. Property Sale inmediatamente del procedimiento Property en el que aparece. La ejecucin contina con la instruccin que llam al procedimiento Property, es decir, con la instruccin que solicita o establece el valor de la propiedad. Exit Property slo se puede utilizar dentro de un procedimiento Get o Set de una propiedad. Select Sale inmediatamente del bloque Select Case en el que aparece. La ejecucin contina con la instruccin que sigue a la instruccin End Select. Exit Select slo se puede utilizar dentro de una instruccin Select Case. Sub Sale inmediatamente del procedimiento Sub en el que aparece. La ejecucin contina con la instruccin que sigue la instruccin que llam al procedimiento Sub. Exit Sub slo se puede utilizar dentro de un procedimiento Sub. Try Sale inmediatamente del bloque Try o Catch en el que aparece. La ejecucin contina con el bloque Finally si lo hay o, de lo contrario, con la instruccin siguiente a la instruccin End Try. Exit Try slo se puede utilizar dentro de un bloque Try o Catch, y no dentro de un bloque Finally. While Sale inmediatamente del bucle While en el que aparece. La ejecucin contina con la instruccin que sigue a la instruccin End While. Exit While slo se puede utilizar dentro de un bucle While. Cuando se utiliza dentro de bucles anidados While, Exit While transfiere el control al bucle que est anidado un nivel por encima del bucle donde aparece Exit While. Descripcin

No confunda las instrucciones Exit con las instrucciones End. Exit no define el fin de una instruccin. Ejemplo En el ejemplo siguiente se utiliza la instruccin Exit para salir de un bucle For...Next,de un bucle Do y de un procedimiento Sub.

Sub exitStatementDemo() Dim demoNum AsSingle ' Set up an infinite loop. Do For i AsInteger = 1 To 10000000 demoNum = Int(Rnd() * 100) SelectCase demoNum Case 7 : ExitFor Case 29 : ExitDo Case 54 : ExitSub EndSelect Next i Loop EndSub False (Visual Basic) Representa un valor de tipo Boolean que falla una comprobacin condicional. Comentarios Los valores Boolean (Tipo de datos, Visual Basic) no se almacenan como nmeros y los valores almacenados no se consideran equivalentes a nmeros. No debe escribir cdigo que se base en los valores numricos equivalentes de True y False. Siempre que sea posible, debe restringir el uso de variables Boolean a los valores lgicos para los que se han diseado. Si fuera necesario mezclar valores de tipo Boolean y numricos, asegrese de entender el mtodo de conversin elegido. For (Visual Basic) Introduce un bucle recorrido en iteracin con diferentes valores de una variable de bucle. Descripcin La palabra clave For se utiliza en estos contextos: For...Next (Instruccin) For Each...Next (Instruccin)

Friend (Visual Basic) Especifica que slo se puede tener acceso a uno o varios elementos de programacin declarados desde el ensamblado que contiene su declaracin. Descripcin Reglas Contexto de declaracin. Slo puede utilizar Friend en el nivel de mdulo, interfaz o espacio de nombres. Esto significa que el contexto de declaracin de un elemento Friend debe ser un archivo de cdigo fuente, un espacio de nombres, una interfaz, un mdulo, una clase o una estructura, y no un procedimiento. Modificadores combinados. Puede utilizar el modificador Friend junto con el modificador Protected (Visual Basic) en la misma declaracin. Esta combinacin proporciona acceso de tipo amigo y acceso protegido a los elementos declarados para que sean accesibles desde cualquier punto del mismo ensamblado, desde su propia clase y desde cualquier clase derivada. Slo puede especificar Protected Friend en miembros de clases. Comportamiento Nivel de acceso. Todo el cdigo de un contexto de declaracin puede tener acceso a sus elementos. El cdigo de otras clases, estructuras y mdulos que se compilan en el mismo ensamblado puede tener acceso a todos los elementos Friend de dicho ensamblado. El acceso de tipo amigo no es un supraconjunto ni un subconjunto del acceso protegido. Modificadores de acceso. Las palabras clave que especifican el nivel de acceso se denominan access modifiers.. Cundo se utiliza Friend En numerosas ocasiones desear que elementos de programacin como clases y estructuras se utilicen en todo el ensamblado y no slo en el componente en que se declaran. Sin embargo, posiblemente no desee que cdigo ajeno al ensamblado tenga acceso a estos elementos, por ejemplo si se trata de una aplicacin propia. Si desea limitar el acceso a un elemento de este modo, puede declararlo con Friend. El acceso de tipo amigo suele ser el nivel preferido de los elementos de programacin de una aplicacin. Tenga en cuenta que el nivel de acceso de una interfaz, mdulo, clase o estructura es Friend de manera predeterminada, si no se declara lo contrario. El modificador Friend se puede utilizar en estos contextos: Class (Instruccin) Const (Instruccin) Declare (Instruccin) Delegate (Instruccin) Dim (Instruccin) Enum (Instruccin)

Event (Instruccin) Function (Instruccin) Interface (Instruccin) Module (Instruccin) Property (Instruccin) Structure (Instruccin) Sub (Instruccin) Class (Visual Basic) Obliga a un parmetro de tipo genrico a exigir que cualquier argumento de tipo que le pasen sea un tipo de referencia o introduce una Instruccin Class (Visual Basic). Descripcin Cuando declara un parmetro de tipo para un tipo genrico, puede imponer una restriccin, una serie de uno o varios requisitos que limitan el argumento de tipo que se puede pasar a este parmetro de tipo. Para obtener ms informacin, vea "Restricciones" en Tipos genricos en Visual Basic. Entre los posibles requisitos de una restriccin se incluye el hecho de que el argumento de tipo debe ser un tipo de referencia, por ejemplo, una String, matriz o delegado, o un objeto creado a partir de una clase. Esto se especifica incluyendo la palabra clave Class en la restriccin. Otro posible requisito es que el argumento de tipo debe ser un tipo de valor, por ejemplo, una estructura, enumeracin o tipo de datos bsico. Se especifica un requisito de tipo de valor incluyendo la palabra clave Structure (Visual Basic) en la restriccin. No tiene que especificar Class o Structure en una restriccin. No puede especificar ambos en la misma restriccin. La restriccin Class no es lo mismo que Instruccin Class (Visual Basic). Instruccin Const (Visual Basic) Declara y define una o ms constantes. [ <attributelist> ] [ accessmodifier ] [ Shadows ] Const constantlist

Partes attributelist Opcional. Lista de atributos que se aplican a todas las constantes declaradas en esta instruccin. Vea la Lista de atributos en corchetes angulares ("<" y ">").

accessmodifier Opcional. Utilcelo para especificar qu cdigo puede tener acceso a estas constantes. Puede ser Public (Visual Basic), Protected (Visual Basic), Friend (Visual Basic), Protected Friend oPrivate (Visual Basic). Shadows Opcional. Utilcelo para volver a declarar y ocultar un elemento de programacin de una clase base. Vea Shadows. constantlist Obligatorio. Lista de constantes de miembros que se declaran en esta instruccin. constant[ , constant ... ] Cada constant tiene la sintaxis y las partes siguientes: constantname[ As datatype ] = initializer Parte Descripcin

constantname Obligatorio. Nombre de la constante. Vea Nombres de elementos declarados. datatype initializer Obligatorio si Option Strict es On. Tipo de datos de la constante. Obligatorio. Expresin que se evala en tiempo de compilacin y se asigna a la constante.

Descripcin Si en su aplicacin tiene un valor que nunca cambia, puede definir una constante con nombre y usarla en lugar de un valor literal. Un nombre es ms fcil de recordar que un valor. Puede definir la constante slo una vez y utilizarla en muchos lugares de su cdigo. Si en una versin posterior necesita volver a definir el valor, la instruccin Const es el nico lugar donde es necesario realizar el cambio. Slo puede utilizar Const en el nivel de mdulo o de procedimiento. Esto significa que el contexto de declaracin de una propiedad debe ser una clase, estructura, mdulo, procedimiento o bloque, y no un archivo de cdigo fuente, un espacio de nombres o una interfaz. Para obtener ms informacin, vea Contextos de declaracin y niveles de acceso predeterminados. Las constantes locales (contenidas en un procedimiento) tienen un valor predeterminado de acceso pblico y no puede utilizar ningn modificador de acceso en ellas. Las constantes de clases y miembros de mdulo (externas a cualquier procedimiento) tienen como valor predeterminado el acceso privado, y las constantes de miembro de estructura tienen como valor predeterminado el acceso pblico. Puede ajustar sus niveles de acceso con los modificadores de acceso. Reglas

Contexto de la declaracin. Una constante declarada en el nivel de mdulo, fuera de cualquier procedimiento, es una constante de miembros; es un miembro de la clase, estructura o mdulo que la declara. Una constante declarada en el nivel de procedimiento es una constante local; es local al procedimiento o bloque que la declara. Atributos. Slo puede aplicar los atributos a las constantes de miembro, no a las constantes locales. Un atributo aporta informacin a los metadatos del ensamblado, que no son significativos para el almacenamiento temporal como constantes locales. Modificadores. De manera predeterminada, todas las constantes son Shared, Static y ReadOnly. No puede utilizar ninguna de estas palabras clave al declarar una constante. En el nivel de procedimiento, no puede utilizar Shadows ni ningn modificador de acceso para declarar constantes locales. Varias constantes. Puede declarar varias constantes en la misma instruccin de declaracin, especificando la parte constantname para cada una. Las constantes mltiples se separan por comas. Reglas de tipos de datos Tipos de datos. La instruccin Const puede declarar el tipo de datos de una variable. Puede especificar cualquier tipo de datos o el nombre de una enumeracin. Tipo predeterminado. Si no especifica datatype, la constante toma el tipo de datos de initializer. Si especifica datatype e initializer, el tipo de datos de initializer debe ser convertible al datatype. Si ni datatype ni initializer estn presentes, el tipo de datos utiliza Object de manera predeterminada. Distintos tipos. Puede especificar distintos tipos de datos para las diferentes constantes utilizando una clusula As independiente para cada variable que declare. Sin embargo, no puede declarar varias constantes para que sean del mismo tipo utilizando una clusula As comn. Inicializacin. Debe inicializar el valor de cada constante en constantlist. Utilice initializer para proporcionar una expresin que se va a asignar a la constante. La expresin puede ser cualquier combinacin de literales, otras constantes que ya estn definidas y miembros de enumeracin que ya se hayan definido. Puede utilizar operadores aritmticos y lgicos para combinar estos elementos. No puede utilizar variables ni funciones en initializer. No obstante, pueden utilizarse palabras clave de conversin como CByte y CShort. Tambin puede utilizar AscW si lo llama con un argumento constante String o Char, puesto que puede evaluarse en tiempo de compilacin. Comportamiento mbito. A las constantes locales slo se puede tener acceso desde dentro de sus procedimientos o bloques. Se puede tener acceso a las constantes de miembro desde cualquier lugar del interior de sus clases, estructuras o mdulos. Calificacin. El cdigo fuera de una clase, estructura o mdulo debe calificar el nombre de una constante de miembro con el nombre de esa clase, estructura o mdulo. El cdigo situado fuera de un procedimiento o bloque no puede hacer referencia a ninguna constante local incluida dentro de ese procedimiento o bloque.

Ejemplo En el ejemplo siguiente se utiliza la instruccin Const para declarar constantes que se utilicen en lugar de valores literales. ' The following statements declare constants. Const maximum AsLong = 459 PublicConst helpString AsString = "HELP" PrivateConst startValue AsInteger = 5

Si define una constante con el tipo de datos Object, el compilador de Visual Basic le asigna el tipo de initializer, en lugar de Object. En el ejemplo siguiente, la naturalLogBase constante tiene el tipo Decimal en tiempo de ejecucin. Const naturalLogBase AsObject = CDec(2.7182818284) MsgBox("Run-time type of constant naturalLogBase is "& _ naturalLogBase.GetType.ToString())

El ejemplo anterior utiliza el mtodo ToString del objeto Type devuelto por el GetType (Operador), porque Type no se puede convertir a String utilizando CStr. Instruccin Continue (Visual Basic) Transfiere controle inmediatamente a la siguiente iteracin de un bucle. Continue { Do | For | While } Comentarios Puede transferir desde dentro de un bucle Do, For o While a la siguiente iteracin de ese bucle. El control pasa inmediatamente a la comprobacin de condicin del bucle, que es equivalente a transferir a la instruccin For o While, o a la instruccin Do o Loop que contiene la clusula Until o While. Puede utilizar Continue en cualquier lugar del bucle que permita realizar las transferencias. Las reglas que permiten la transferencia del control son iguales que las de la GoTo (Instruccin). Por ejemplo, si un bucle est completamente incluido en un bloque Try, un bloque Catch o un bloque Finally, puede usar Continue para transferir el control fuera del bucle. Por otra parte, si la estructura Try...End Try est contenida dentro del bucle, no puede usar Continue para transferir el control fuera del bloque Finally y utilizarlo para transferirlo fuera de un bloque Try oCatch slo si lo transfiere completamente fuera de la estructura Try...End Try. Si tiene bucles anidados del mismo tipo, por ejemplo un bucle Do dentro de otro bucle Do, una instruccin Continue Do pasa a la siguiente iteracin del bucle Do ms interno que lo contiene. No puede utilizar Continue para pasar a la iteracin siguiente de un bucle que contiene el mismo tipo.

Si tiene bucles anidados de distintos tipos, por ejemplo un bucle Do dentro de un bucle For, puede pasar a la siguiente iteracin de cualquiera de esos bucles mediante Continue Do oContinue For. Ejemplo El ejemplo de cdigo siguiente utiliza la instruccin Continue While para pasar a la siguiente columna de una matriz si un divisor es cero. Continue While est dentro de un bucle For. Transfiere a la instruccin While col < lastcol, que es la siguiente iteracin del bucle While ms interior que contiene el bucle For. Dim row, col AsInteger Dim lastrow AsInteger = 6 Dim lastcol AsInteger = 10 Dim a(,) AsDouble = NewDouble(lastrow, lastcol) {} Dim b(7) AsDouble row = -1 While row < lastrow row += 1 col = -1 While col < lastcol col += 1 a(row, col) = 0 For i AsInteger = 0 To b.GetUpperBound(0) If b(i) = col Then ContinueWhile Else a(row, col) += (row + b(i)) / (col - b(i)) EndIf Next i EndWhile EndWhile Instruccin Function (Visual Basic) Declara el nombre, los parmetros y el cdigo que definen un procedimiento Function. [ <attributelist> ] [ accessmodifier ] [ proceduremodifiers ] [ Shared ] [ Shado ws ] Function name [ (Of typeparamlist) ] [ (parameterlist) ] [ As returntype ] [ Imp lements implementslist | Handles eventlist ] [ statements ] [ Exit Function ] [ statements ] End Function Partes attributelist Opcional. Vea la Lista de atributos.

accessmodifier Opcional. Puede ser una de las siguientes: Public Protected Friend Private Protected Friend Vea Niveles de acceso en Visual Basic. proceduremodifiers Opcional. Puede ser una de las siguientes: Overloads Overrides Overridable NotOverridable MustOverride MustOverride Overrides NotOverridable Overrides Shared Opcional. Vea Shared. Shadows Opcional. Vea Shadows. name Obligatorio. Nombre del procedimiento. Vea Nombres de elementos declarados. typeparamlist Opcional. Lista de parmetros de tipo para un procedimiento genrico. Vea la Lista de tipos. parameterlist Opcional. Lista de nombres de variables locales que representan los parmetros de este procedimiento. Vea la Lista de argumentos. returntype Obligatorio si Option Strict es On. Tipo de datos del valor devuelto por este procedimiento.

Implements Opcional. Indica que este procedimiento implementa uno o ms procedimientos Function, cada uno de los cuales se define en una interfaz implementada por la clase contenedora o la estructura de este procedimiento. Vea Implements (Instruccin). implementslist Requerido si se suministra Implements. Lista de procedimientos Function que se implementan. implementedprocedure [ , implementedprocedure ... ] Cada implementedprocedure tiene la sintaxis y las partes siguientes: interface.definedname Parte interface Descripcin Obligatorio. Nombre de una interfaz implementada por la clase contenedora o la estructura de este procedimiento.

definedname Obligatorio. Nombre por el que se define el procedimiento en interface.

Handles Opcional. Indica que este procedimiento puede controlar uno o ms eventos especficos. Vea Handles. eventlist Requerido si se suministra Handles. Lista de eventos que controla este procedimiento. eventspecifier [ , eventspecifier ... ] Cada eventspecifier tiene la sintaxis y las partes siguientes: eventvariable.event Parte Descripcin

eventvariable Obligatorio. Variable de objeto declarada con el tipo de datos de la clase o estructura que provoca el evento. event statements Opcional. Bloque de instrucciones que se ejecutan dentro de este procedimiento. Obligatorio. Nombre del evento que controla este procedimiento.

EndFunction Termina la definicin de este procedimiento. Comentarios El cdigo ejecutable debe estar en un procedimiento. Cada procedimiento se declara a su vez dentro de una clase, estructura o mdulo, que se denominan clase contenedora, estructura o mdulo. Utilice un procedimiento Function cuando necesita devolver un valor al cdigo de llamada. Utilice un procedimiento Sub cuando no necesita devolver un valor. Slo puede utilizar Function en el nivel de mdulo. Esto significa que el contexto de la declaracin para una funcin debe ser una clase, estructura, mdulo o interfaz y no puede ser un archivo de cdigo fuente, espacio de nombres, procedimiento o bloque. Para obtener ms informacin, vea Contextos de declaracin y niveles de acceso predeterminados. Los procedimientos Function tienen como valor predeterminado el acceso pblico. Puede ajustar sus niveles de acceso con los modificadores de acceso. Se puede utilizar un procedimiento Function en el lado derecho de una expresin cuando desee utilizar el valor devuelto por la funcin. El procedimiento Function se utiliza de la misma manera que utiliza cualquier funcin de la biblioteca como por ejemplo Sqrt, Cos o ChrW. Puede llamar a un procedimiento Function con el nombre del procedimiento, seguido por la lista de argumentos entre parntesis, en una expresin. Si no se proporcionan argumentos, se pueden omitir los parntesis. Sin embargo, el cdigo es ms legible si se incluyen siempre los parntesis. Se puede llamar una funcin tambin mediante la instruccin Call. En cualquier caso, el valor devuelto se pasar por alto. Reglas Tipo de valor devuelto. La instruccin Function puede declarar el tipo de datos del valor que devuelve. Puede especificar cualquier tipo de datos o el nombre de una enumeracin, estructura, clase o interfaz. Si no especifica returntype, el procedimiento devuelve un tipo Object. Implementacin. Si este procedimiento utiliza la palabra clave Implements, la clase contenedora o la estructura tambin deben incluir una instruccin Implements inmediatamente despus de la instruccin Class o Structure. La instruccin Implements debe incluir cada interfaz especificada en implementslist. Sin embargo, el nombre con el que una interfaz defineFunction (en definedname) no tiene que ser el mismo que el nombre de este procedimiento (en name). Comportamiento Volver de un procedimiento. Cuando el procedimiento Function vuelva al cdigo de llamada, la ejecucin contina con la instruccin que sigue a la instruccin que lo llam.

Las instrucciones Exit Function y Return provocan una salida inmediata de un procedimiento Function. Puede aparecer cualquier nmero de instrucciones Exit Function y Return en cualquier parte del procedimiento y puede combinar instrucciones Exit Function y Return. Valor devuelto. Para devolver un valor de una funcin, se puede asignar el valor al nombre de funcin o incluirlo en una instruccin Return. El ejemplo siguiente asigna el valor devuelto al nombre de funcin myFunction y, a continuacin, utiliza la instruccin Exit Function para volver: Function myFunction(ByVal j AsInteger) AsDouble myFunction = 3.87 * j ExitFunction EndFunction

Si utiliza Exit Function sin asignar un valor a name, el procedimiento devuelve el valor predeterminado del tipo de datos especificado en returntype. Si no se especifica returntype, el procedimiento devuelve Nothing, el valor predeterminado de Object. La instruccin Return asigna el valor devuelto y sale de la funcin. Esto se muestra en el siguiente ejemplo. Function myFunction(ByVal j AsInteger) AsDouble Return 3.87 * j EndFunction

Solucin de problemas Orden de ejecucin. Visual Basic reorganiza a veces las expresiones aritmticas para aumentar la eficacia interna. Por esta razn, evite utilizar un procedimiento Function en una expresin aritmtica cuando la funcin cambie el valor de las variables en la misma expresin. Ejemplo En el siguiente ejemplo se utiliza la instruccin Function para declarar el nombre, parmetros y cdigo que forman el cuerpo de un procedimiento Function. El modificador ParamArraypermite a la funcin aceptar un nmero variable de argumentos. PublicFunction calcSum(ByValParamArray args() AsDouble) AsDouble calcSum = 0 If args.Length <= 0 ThenExitFunction For i AsInteger = 0 To UBound(args, 1) calcSum += args(i) Next i EndFunction En el ejemplo siguiente se invoca a la funcin declarada en el ejemplo anterior. Dim returnedValue AsDouble = calcSum(4, 3, 2, 1) ' The function's local variables are assigned the following values:

' args(0) = 4, args(1) = 3, and so on.

Get (Instruccin) Declara un procedimiento de propiedad Get que se utiliza para recuperar el valor de una propiedad. [ <attributelist> ] [ accessmodifier ] Get() [ statements ] End Get Partes attributelist Opcional. Vea Lista de atributos. accessmodifier Opcional en, como mximo, una de las instrucciones Get y Set de esta propiedad. Puede ser una de las siguientes: Protected Friend Private Protected Friend Vea Niveles de acceso en Visual Basic. statements Opcional. Una o ms instrucciones que se ejecutan cuando se llama al procedimiento de propiedad Get. End Get Obligatorio. Termina la definicin de este procedimiento de propiedad Get. Comentarios Cada propiedad debe tener un procedimiento de propiedad Get, a menos que la propiedad est marcada como WriteOnly. El procedimiento Get se utiliza para devolver el valor actual de la propiedad. Visual Basic llama automticamente al procedimiento Get de una propiedad cuando una expresin solicita el valor de la propiedad. El cuerpo de la declaracin de propiedad puede contener slo los procedimientos Get y Set de la propiedad entre la instruccin Property (Instruccin) y la instruccin End Property No puede

almacenar nada que no sean esos procedimientos. En concreto, no puede almacenar el valor actual de la propiedad. Debe almacenar este valor fuera de la propiedad porque, si lo guarda dentro de cualquiera de los procedimientos de propiedad, el otro procedimiento de propiedad no puede tener acceso a ella. El enfoque usual es almacenar el valor en una variablePrivate (Visual Basic) declarada en el mismo nivel que la propiedad. Debe definir un procedimiento Get dentro de la propiedad a la que se aplica. El procedimiento Get tiene como valor predeterminado el nivel de acceso de su propiedad contenedora a menos que utilice accessmodifier en la instruccin Get.

Reglas Niveles de acceso mixto. Si est definiendo una propiedad de lectura y escritura, tiene la opcin de especificar un nivel de acceso distinto para el procedimiento Get o para el procedimiento Set, pero no para ambos. Si as lo hace, el nivel de acceso del procedimiento debe ser ms restrictivo que el nivel de acceso de la propiedad. Por ejemplo, si la propiedad se declara como Friend, puede declarar el procedimiento Get como Private, pero no como Public. Si est definiendo una propiedad ReadOnly, el procedimiento Get representa toda la propiedad. No puede declarar un nivel de acceso diferente para Get, porque se estableceran dos niveles de acceso para la propiedad. Tipo de valor devuelto. La instruccin Property (Instruccin) puede declarar el tipo de datos del valor que devuelve. El procedimiento Get devuelve automticamente ese tipo de datos. Puede especificar cualquier tipo de datos o el nombre de una enumeracin, estructura, clase o interfaz. Si la instruccin Property no especifica returntype, el procedimiento devuelve Object. Comportamiento Retorno de un procedimiento. Cuando el procedimiento Get vuelve al cdigo de llamada, la ejecucin contina dentro de la instruccin que solicit el valor de la propiedad. Los procedimientos de propiedad Get pueden devolver un valor mediante la instruccin Instruccin Return (Visual Basic) o asignando el valor devuelto al nombre de propiedad. Para obtener ms informacin, vea "Valor devuelto" en Instruccin Function (Visual Basic). Las instrucciones Exit Property y Return provocan una salida inmediata de un procedimiento de propiedad. Puede aparecer cualquier cantidad de instrucciones Exit Property yReturn en cualquier parte del procedimiento, y se puede combinar instrucciones Exit Property y Return. Valor devuelto. Para devolver un valor desde un procedimiento Get, puede asignar el valor al nombre de propiedad o incluirlo en una instruccin Instruccin Return (Visual Basic). La instruccin Return asigna simultneamente el valor devuelto por el procedimiento Get y sale del procedimiento.

Si utiliza Exit Property sin asignar un valor al nombre de propiedad, el procedimiento Get devuelve el valor predeterminado para el tipo de datos de la propiedad. Para obtener ms informacin, vea "Valor devuelto" en Instruccin Function (Visual Basic). El ejemplo siguiente muestra dos maneras en que la propiedad quoteForTheDay de slo lectura puede devolver el valor contenido en la variable privada quoteValue. Private quoteValue AsString = "No quote assigned yet." ReadOnlyProperty quoteForTheDay() AsString Get quoteForTheDay = quoteValue ExitProperty EndGet EndProperty ReadOnlyProperty quoteForTheDay() AsString Get Return quoteValue EndGet EndProperty Ejemplo En el ejemplo siguiente se utiliza la instruccin Get para devolver el valor de una propiedad. Class propClass ' Define a private local variable to store the property value. Private currentTime AsString ' Define the read-only property. PublicReadOnlyProperty dateAndTime() AsString 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 EndGet EndProperty EndClass

GetType (Operador) Devuelve un objeto Type para el tipo especificado. El objeto Type proporciona informacin sobre el tipo como sus propiedades, mtodos y eventos. GetType(typename)

Parmetros typename Nombre del tipo del que se desea obtener informacin. Descripcin 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 de Visual Basic, como Boolean o Date. Cualquier clase, estructura, mdulo o interfaz de .NET Framework, como System.ArgumentException o System.Double. Cualquier clase, estructura, mdulo o interfaz definidas por su aplicacin. Cualquier matriz definida por su aplicacin. Cualquier delegado definido por su aplicacin. Cualquier enumeracin definida por Visual Basic, .NET Framework o su aplicacin. Para obtener el objeto de tipo de una variable de objeto, utilice el mtodo System.Type.GetType. El operador GetType puede ser til en las circunstancias siguientes: Necesita tener acceso a los metadatos para un tipo en tiempo de ejecucin. El objeto Type proporciona los metadatos como miembros de tipo e informacin de distribucin. Por ejemplo, necesita esto para reflejarlo en un ensamblado. Para obtener ms informacin, vea System.Reflection. Desea comparar dos referencias a objetos para ver si hacen referencia a instancias del mismo tipo. Si es as, GetType devuelve referencias al mismo objeto Type. Ejemplo En el siguiente ejemplo se muestra el operador GetType en funcionamiento. ' The following statement returns the Type object for Integer. MsgBox(GetType(Integer).ToString()) ' The following statement returns the Type object for one-dimensional string arr ays. MsgBox(GetType(String()).ToString())

Global Permite tener acceso a un elemento de programacin de .NET Framework cuando se ha bloqueado con la estructura del espacio de nombres. Comentarios Si ha definido una jerarqua anidada de espacios de nombres, el cdigo dentro de esta jerarqua puede tener el acceso bloqueado al espacio de nombres System de .NET Framework. En el

ejemplo siguiente se ilustra una jerarqua en la que el espacio de nombres SpecialSpace.System bloquea el acceso a System. Namespace SpecialSpace Namespace System Class abc Function getValue() As System.Int32 Dim n As System.Int32 Return n End Function End Class End Namespace End Namespace En consecuencia, el compilador de Visual Basic no puede resolver correctamente la referencia a System.Int32 porque SpecialSpace.System no define Int32. Puede utilizar la palabra claveGlobal para iniciar la cadena de calificacin en el nivel ms externo de la biblioteca de clases de .NET Framework. Esto permite 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 utilizar Global para tener acceso a otros espacios de nombres de nivel de raz, como Microsoft.VisualBasic, y a cualquier espacio de nombres asociado a su proyecto. La palabra clave Global se puede utilizar en estos contextos: Instruccin Class (Visual Basic) Instruccin Const (Visual Basic) Declare (Instruccin) Delegate (Instruccin) Instruccin Dim (Visual Basic) Instruccin Enum (Visual Basic) Event (Instruccin) Instruccin For...Next (Visual Basic) Instruccin For Each...Next (Visual Basic) Instruccin Function (Visual Basic) Instruccin Interface (Visual Basic) Operator (Instruccin) Property (Instruccin) Structure (Instruccin) Instruccin Sub (Visual Basic) Instruccin Try...Catch...Finally (Visual Basic) Instruccin Using (Visual Basic)

.
GoTo (Instruccin) Realiza una bifurcacin incondicional a una lnea especificada de un procedimiento. GoTo line Parte line Obligatorio. Cualquier etiqueta de lnea. Descripcin La instruccin GoTo slo puede bifurcarse a lneas dentro del procedimiento en el que aparece. La lnea debe tener una etiqueta de la lnea a la que puede hacer referencia GoTo. Para obtener ms informacin, vea Cmo: Aplicar etiquetas a las instrucciones. Nota Las instrucciones GoTo pueden dificultar la lectura y el mantenimiento del cdigo. Siempre que sea posible, utilice en su lugar una estructura de control. Para obtener ms informacin, vea Flujo de control en Visual Basic. No puede utilizar una instruccin GoTo para realizar una bifurcacin desde fuera de una construccin For...Next, For Each...Next, SyncLock...End SyncLock, Try...Catch...Finally, With...End With o Using...End Using a una etiqueta situada dentro de ella. Bifurcacin y construcciones Try Dentro de una construccin Try...Catch...Finally, se aplican las reglas siguientes a la bifurcacin con la instruccin GoTo. Bloque o regin Bloque Try Bloque Catch Bifurcacin hacia dentro desde fuera Slo desde un bloque Catch de 1 la misma construccin Nunca se permite Bifurcacin hacia fuera desde dentro

Slo hacia fuera de la construccin completa Slo hacia fuera de la construccin completa 1 o al bloque Try de la misma construccin Nunca se permite

Bloque Finally Nunca se permite


1

Si una construccin Try...Catch...Finally est anidada dentro de otra, un bloque Catch se puede bifurcar hacia el interior del bloque Try de su propio nivel de anidacin, pero no hacia el interior de ningn otro bloque Try. Una construccin Try...Catch...Finally anidada debe estar completamente contenida dentro de un bloque Try o Catch de la construccin dentro de la que est anidada.

La ilustracin siguiente muestra una construccin Try anidada dentro de otra. Las distintas bifurcaciones entre los bloques de las dos construcciones se sealan como vlidas o no vlidas. Bifurcaciones vlidas y no vlidas en construcciones Try

Ejemplo En este ejemplo se utiliza la instruccin GoTo para bifurcar hacia etiquetas de lnea ubicadas dentro de un procedimiento. Sub gotoStatementDemo() Dim number AsInteger = 1 Dim sampleString AsString ' Evaluate number and branch to appropriate label. If number = 1 ThenGoTo Line1 ElseGoTo 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) EndSub


Handles Declara que un procedimiento controla un evento especificado.

proceduredeclaration Handles eventlist Partes proceduredeclaration La declaracin del procedimiento Sub del procedimiento que controlar el evento. eventlist La lista de los eventos para proceduredeclaration que se deben controlar. Los eventos los debe provocar la clase base de la clase actual o un objeto declarado mediante la palabra clave WithEvents. Comentarios Use la palabra clave Handles al final de una declaracin de procedimiento para hacer que controle eventos provocados por una variable de objeto declarada con la palabra claveWithEvents. La palabra clave Handles tambin puede utilizarse en una clase derivada para controlar eventos de una clase base. La firma del procedimiento debe coincidir con las firmas de cada evento contenido en eventlist. Tanto la palabra clave Handles como la instruccin AddHandler permiten especificar que determinados procedimientos controlan eventos concretos, pero hay diferencias. Utilice la palabra clave Handles al definir un procedimiento para especificar que controla un determinado evento. La instruccin AddHandler conecta en tiempo de ejecucin los procedimientos a los eventos. Para obtener ms informacin, vea AddHandler (Instruccin). Para los eventos personalizados, la aplicacin invoca el descriptor de acceso AddHandler del evento cuando agrega el procedimiento como un controlador de eventos. Para obtener ms informacin sobre eventos personalizados, vea Event (Instruccin). Ejemplo PublicClass ContainerClass ' Module or class level declaration. WithEvents Obj AsNew Class1 PublicClass Class1 ' Declare an event. PublicEvent Ev_Event() Sub CauseSomeEvent() ' Raise an event. RaiseEvent Ev_Event() EndSub EndClass

Sub EventHandler() Handles Obj.Ev_Event ' Handle the event. MsgBox("EventHandler caught event.") EndSub ' Call the TestEvents procedure from an instance of the ContainerClass ' class to test the Ev_Event event and the event handler. PublicSub TestEvents() Obj.CauseSomeEvent() EndSub EndClass

En el siguiente ejemplo se muestra cmo una clase derivada puede utilizar la instruccin Handles para controlar un evento desde una clase base. PublicClass BaseClass ' Declare an event. Event Ev1() EndClass Class DerivedClass Inherits BaseClass Sub TestEvents() HandlesMyBase.Ev1 ' Add code to handle this event. EndSub EndClass

Instruccin If...Then...Else (Visual Basic) Ejecuta de forma condicional un grupo de instrucciones, dependiendo del valor de una expresin. If condition [ Then ] [ statements ] [ ElseIf elseifcondition [ Then ] [ elseifstatements ] ] [ Else [ elsestatements ] ] End If -orIf condition Then [ statements ] [ Else [ elsestatements ] ] Partes condition Obligatorio. Expresin. Se debe evaluar como True o False, o como un tipo de datos que es implcitamente convertible a Boolean. Then Obligatorio en la forma de una lnea, opcional en la forma de varias lneas.

statements Opcional. Se ejecutan una o ms instrucciones que siguen a If...Then que se ejecutan si condition se evala como True. elseifcondition Obligatorio si ElseIf est presente. Expresin. Se debe evaluar como True o False, o como un tipo de datos que es implcitamente convertible a Boolean. elseifstatements Opcional. Se ejecutan una o ms instrucciones que siguen a ElseIf...Then que se ejecutan si elseifcondition se evala como True. elsestatements Opcional. Una o ms instrucciones que se ejecutan si ninguna expresin condition o elseifcondition anterior se evala como True. End If Termina el bloque If...Then...Else. Descripcin Puede utilizar la forma de una sola lnea para pruebas cortas y sencillas. Sin embargo, el formato de mltiples lneas proporciona ms estructura y flexibilidad que el formato de una sola lnea y, generalmente, es ms fcil de leer, mantener y depurar. Cuando se encuentra una estructura If...Then...Else, se comprueba la condition. Si condition es True, se ejecutan las instrucciones que estn a continuacin de Then. Si condition es False, se evalan por orden cada una de las instrucciones ElseIf. Cuando se encuentra una elseifcondition que sea True, se ejecutan las instrucciones que siguen inmediatamente a la instruccin Thenasociada. Si elseifcondition se evala como True, o si no hay ninguna instruccin ElseIf, se ejecutan las instrucciones situadas despus de Else. Despus de la ejecucin de las instrucciones que siguen a Then, ElseIf o Else, la ejecucin contina con la instruccin que sigue a End If. Sugerencia La Instruccin Select...Case (Visual Basic) puede ser ms til al evaluar una nica expresin que tiene varios valores posibles. Con el formato de una sola lnea, es posible ejecutar varias instrucciones como resultado de una decisin If...Then. Todas las instrucciones deben estar en la misma lnea y separarse con dos puntos. En el siguiente ejemplo se muestra cmo. If A > 10 Then A = A + 1 : B = B + A : C = C + B

Con la forma de varias lneas, la instruccin If debe ser la nica instruccin incluida en la primera lnea. Las instrucciones ElseIf, Else y End If pueden ir precedidas solamente por una etiqueta de lnea. El bloque If...Then...Else de varias lneas debe finalizar con una instruccin End If. Para determinar si una instruccin If introduce o no un formato de varias lneas, examine lo que sigue a la palabra clave Then. Si aparece cualquier otra cosa que no sea un comentario despus de Then en la misma instruccin, sta se trata como una instruccin If de una sola lnea. Si no est presente Then, debe ser el comienzo de una instruccin If...Then...Else de varias lneas. Las clusulas ElseIf y Else son opcionales. Puede tener tantas clusulas ElseIf como desee en una instruccin If...Then...Else de varias lneas, pero no puede aparecer ninguna de ellas despus de una clusula Else. Los formatos de mltiples lneas pueden anidarse unos dentro de otros. Ejemplo En el ejemplo siguiente se muestran los formatos de varias lneas y de una sola lnea de la instruccin If...Then...Else. Dim number, digits AsInteger Dim myString AsString number = 53 If number < 10 Then digits = 1 ElseIf number < 100 Then digits = 2 Else digits = 3 EndIf If digits = 1 Then myString = "One"Else myString = "More than one"

En el ejemplo anterior, la condicin ElseIf se evala como True y se asigna a digits un valor de 2. A continuacin, la ltima instruccin le asigna un valor de "Ms de una" a myString. Implements (Instruccin) Especifica una o ms interfaces o miembros de interfaz que se deben implementar en la definicin de clase o estructura en la que aparecen. Implements interfacename [, ...] -orImplements interfacename.interfacemember [, ...]

Partes interfacename Obligatorio. Una interfaz cuyas propiedades, procedimientos y eventos deben implementarse por los miembros correspondientes de la clase o estructura.

Interfacemember Obligatorio. El miembro de una interfaz que se va a implementar. Descripcin Una interfaz es una coleccin de prototipos que representan los miembros (propiedades, procedimientos y eventos) que encapsula la interfaz. Las interfaces slo contienen las declaraciones para miembros. Las clases y estructuras implementan estos miembros. La instruccin Implements debe incluirse inmediatamente a continuacin de las instrucciones Class o Structure. Cuando implementa una interfaz, debe implementar todos los miembros declarados en la interfaz. Se considera un error de sintaxis omitir cualquier miembro. Para implementar un miembro concreto, se especifica la palabra clave Implements (Visual Basic) (que es independiente de la instruccin Implements) al declarar el miembro en la clase o la estructura. Para obtener ms informacin, vea Palabra clave Implements e instruccin Implements. Las clases pueden utilizar implementaciones Private (Visual Basic) de propiedades y procedimientos, pero estos miembros slo son accesibles convirtiendo una instancia de la clase que se implementa en una variable declarada para ser del tipo de la interfaz. Ejemplo El ejemplo siguiente muestra cmo utilizar la instruccin 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. PublicInterface ICustomerInfo Event updateComplete() Property customerName() AsString Sub updateCustomerStatus() EndInterface PublicClass customerInfo Implements ICustomerInfo ' Storage for the property value. Private customerNameValue AsString PublicEvent updateComplete() Implements ICustomerInfo.updateComplete PublicProperty CustomerName() AsStringImplements _ ICustomerInfo.customerName Get Return customerNameValue EndGet Set(ByVal value AsString) ' The value parameter is passed to the Set procedure ' when the contents of this property are modified. customerNameValue = value EndSet EndProperty PublicSub updateCustomerStatus() Implements _

ICustomerInfo.updateCustomerStatus ' Add code here to update the status of this account. ' Raise an event to indicate that this procedure is done. RaiseEvent updateComplete() EndSub EndClass Observe que la clase customerInfo utiliza la instruccin Implements de una lnea de cdigo fuente independiente para indicar que la clase implementa todos los miembros de la interfazICustomerInfo. A continuacin, cada miembro de la clase utiliza la palabra clave Implements como parte de su declaracin de miembro para indicar que implementa ese miembro de interfaz. Los dos procedimientos siguientes muestran cmo se podra utilizar la interfaz implementada en el ejemplo anterior. Para comprobar la implementacin, agregue estos procedimientos al proyecto e invoque el procedimiento testImplements. PublicSub testImplements() ' This procedure tests the interface implementation by ' creating an instance of the class that implements ICustomerInfo. Dim cust As ICustomerInfo = New customerInfo() ' Associate an event handler with the event that is raised by ' the cust object. AddHandler cust.updateComplete, AddressOf handleUpdateComplete ' Set the customerName Property cust.customerName = "Fred" ' Retrieve and display the customerName property. MsgBox("Customer name is: "& cust.customerName) ' Call the updateCustomerStatus procedure, which raises the ' updateComplete event. cust.updateCustomerStatus() EndSub Sub handleUpdateComplete() ' This is the event handler for the updateComplete event. MsgBox("Update is complete.") EndSub Imports (Instruccin) Importa espacios de nombres o elementos de programacin definidos en proyectos y ensamblados a los que se hace referencia. Tambin importa espacios de nombres o elementos definidos dentro del mismo proyecto.

Imports [ aliasname = ] namespace -orImports [ aliasname = ] namespace.element Partes aliasname

Opcional. Un alias de importacin o nombre por el que el cdigo puede hacer referencia a namespace en lugar de a la cadena calificada completa. Vea Nombres de elementos declarados. namespace Obligatorio. Nombre completo del espacio de nombres que se importa. Puede ser una cadena de espacios de nombres anidada a cualquier nivel. element Opcional. El nombre de un elemento de programacin declarado en el espacio de nombres. Puede ser cualquier elemento contenedor. Descripcin Cada archivo de cdigo fuente puede contener cualquier nmero de instrucciones Imports. stas deben seguir las declaraciones de opcin existentes, como la instruccin Option Strict, y deben preceder a cualquier declaracin de elemento de programacin como Module o Class. Slo puede utilizar Imports en el nivel de archivo. Esto significa que el contexto de declaracin para la importacin debe ser un archivo de cdigo fuente y no puede ser un espacio de nombres, una clase, una estructura, un mdulo, una interfaz, un procedimiento o un bloque. Los alias de importacin son tiles cuando es necesario utilizar elementos con el mismo nombre declarado en uno o ms espacios de nombres. Para obtener ms informacin y un ejemplo, vea "Clases con el mismo nombre" en Resolver una referencia cuando muchas variables tienen el mismo nombre. Observe que la instruccin Imports no pone a disposicin de su proyecto elementos de otros proyectos y ensamblados. La importacin no sustituye el establecimiento de una referencia. Slo quita la necesidad de calificar nombres que ya estn disponibles para su proyecto. Para obtener ms informacin, vea "Importar elementos contenedores" en Resolver una referencia cuando muchas variables tienen el mismo nombre. Reglas Nombre de alias. No se deben declarar miembros en el nivel de mdulo que tengan el mismo nombre que aliasname. Si lo hace, el compilador de Visual Basic slo utiliza aliasnamepara el miembro declarado y deja de reconocerlo como un alias de importacin. Nombre de espacio de nombres. 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 espacio de nombres de nivel ms alto siguiente con un punto (.), como se muestra en el ejemplo siguiente. Imports System.Collections.Generic Tipo de elemento. Si proporciona element, debe representar un elemento contenedor, es decir, un elemento de programacin que puede contener otros elementos. Los elementos contenedores incluyen clases, estructuras, mdulos, interfaces y enumeraciones.

Comportamiento mbito. El mbito de los elementos que se vuelven disponibles mediante una instruccin Imports depende de si especifica element. Si especifica slo namespace, todos los miembros con nombre nico de ese espacio de nombres y miembros de elementos contenedores dentro de dicho espacio de nombres, estn disponibles sin calificacin. Si especificanamespace y element, slo los miembros de ese elemento estn disponibles sin calificacin. Calificacin. El cdigo situado fuera de un espacio de nombres o elemento contenedor normalmente deben calificar el nombre de un miembro con el nombre de ese espacio de nombres de elemento contenedor. La instruccin Imports hace que tal calificacin sea innecesaria, a menos que su proyecto tenga acceso a otro miembro con el mismo nombre. En esos casos, puede especificar un aliasname en cada instruccin Imports. As, slo es necesario que los alias de importacin califiquen los miembros con el mismo nombre. Ejemplo El ejemplo siguiente importa la clase Microsoft.VisualBasic.Strings y asigna un alias, str, que se puede utilizar para obtener acceso al mtodo Left.

' Place Imports statements at the top of your program. Imports str = Microsoft.VisualBasic.Strings Class testClass1 Sub showHello() ' Display only the word "Hello" MsgBox(str.Left("Hello World", 5)) EndSub EndClass

Observe que en el ejemplo anterior se importa un espacio de nombres anidado, Strings dentro de VisualBasic dentro de Microsoft. Cuando MsgBox (Funcin, Visual Basic) tiene acceso al mtodo Left, puede utilizar el alias str en lugar de la cadena de calificacin completa, Microsoft.VisualBasic.Strings. .... In (Visual Basic) Especifica el grupo que recorre la variable de bucle en un bucle For Each. Comentarios La palabra clave In se puede utilizar en este contexto: For Each...Next (Instruccin)

Inherits (Instruccin) Hace que la clase o interfaz actual herede los atributos, variables, propiedades, procedimientos y eventos de otra clase o conjunto de interfaces. Inherits basetypenames Partes basetypenames Obligatorio. Nombre de la clase de la que deriva esta clase. O bien Nombres de las interfaces de las que deriva esta interfaz. Utilice comas para separar varios nombres. Descripcin Si se utiliza, la instruccin Inherits debe ser la primera lnea no vaca, sin comentario, en una definicin de clase o de interfaz. Debe seguir inmediatamente a la instruccin Class o Interface. Slo puede utilizar Inherits en una clase o una interfaz. Esto significa que el contexto de declaracin de una herencia no puede ser un archivo de cdigo fuente, espacio de nombres, estructura, mdulo, procedimiento o bloque. Reglas Herencia de clase. Si una clase utiliza la instruccin Inherits, slo puede especificar una clase base. Una clase no puede heredar de una clase anidada en ella. Herencia de interfaz. Si una interfaz utiliza la instruccin Inherits, puede especificar una o ms interfaces base. Puede heredar de dos interfaces incluso si cada una define un miembro con el mismo nombre. Si lo hace as, el cdigo de implementacin debe utilizar la calificacin del nombre para especificar qu miembro se implementa. Una interfaz no puede heredar de otra interfaz con un nivel de acceso ms restrictivo. Por ejemplo, una interfaz de tipo Public no puede heredar una interfaz de tipo Friend. Una interfaz no puede heredar de una interfaz anidada en ella. Un ejemplo de herencia de clases en .NET Framework es la clase ArgumentException, que hereda de la clase SystemException. Esto proporciona a ArgumentException todas las propiedades y procedimientos predefinidos que necesitan las excepciones de sistema, como la propiedad Message y el mtodo ToString. Un ejemplo de herencia de interfaces en .NET Framework es la interfaz ICollection, que hereda de la interfaz IEnumerable. Esto hace que ICollection herede la definicin del enumerador necesario para recorrer una coleccin.

Ejemplo En el ejemplo siguiente se utiliza la instruccin Inherits para mostrar cmo una clase denominada thisClass puede heredar todos los miembros de una clase base denominada anotherClass. PublicClass thisClass Inherits anotherClass ' Add code to override, overload, or extend members ' inherited from the base class. ' Add new variable, property, procedure, and event declarations. EndClass

En el ejemplo siguiente se muestra la herencia de varias interfaces. PublicInterface thisInterface Inherits IComparable, IDisposable, IFormattable ' Add new property, procedure, and event definitions. EndInterface

Ahora, la interfaz denominada thisInterface incluye todas las definiciones de las interfaces IComparable, IDisposable y IFormattable. Los miembros heredados proporcionan, respectivamente, la comparacin especfica de tipos de dos objetos, la liberacin de recursos asignados y la expresin del valor de un objeto como un elemento de tipo String. Una clase que implementa thisInterface debe implementar cada miembro de cada interfaz base. Integer (Tipo de datos, Visual Basic) Contiene enteros de 32 bits con signo (4 bytes) que se sitan en el intervalo entre -2.147.483.648 y 2.147.483.647. Descripcin El tipo de datos Integer proporciona rendimiento ptimo en un procesador de 32 bits. Los dems tipos integrales son ms lentos para cargarse y almacenarse de y a la memoria. El valor predeterminado de Integer es 0. Sugerencias de programacin Consideraciones sobre la interoperabilidad. Si interacta con componentes no escritos para .NET Framework, por ejemplo, objetos de automatizacin o COM, recuerde que Integertiene un ancho de datos diferente (16 bits) en otros entornos. Al pasar un argumento de 16 bits a esos componentes, declrelo en el cdigo de Visual Basic como Short en lugar deInteger.

Ampliacin. El tipo de datos Integer se ampla a Long, Decimal, Single o Double. Esto significa que se puede convertir Integer en cualquiera de estos tipos sin encontrar un errorSystem.OverflowException. Caracteres de tipo Al agregar el carcter de tipo de literal I a un literal, el tipo de datos se convierte al tipo de datos Integer. Si se agrega el carcter de tipo de identificador % a cualquier identificador, se convierte su tipo de datos al tipo Integer. Tipo en Framework. El tipo correspondiente en .NET Framework es la estructura System.Int32. Intervalo Si intenta asignar a una variable de un tipo integral un nmero que est fuera del intervalo correspondiente a este tipo, se produce un error. Si intenta establecerlo en una fraccin, el nmero se redondea. Esto se muestra en el siguiente ejemplo. ' The valid range of an Integer variable is -2147483648 through +2147483647. Dim k As Integer ' The following statement causes an error because the value is too large. k = 2147483648 ' The following statement sets k to 6. k = CInt(5.9) Instruccin Interface (Visual Basic) Declara el nombre de una interfaz e introduce las definiciones de los miembros que incluye la interfaz. [ <attributelist> ] [ accessmodifier ] [ Shadows ] _ Interface name [ ( Of typelist ) ] [ Inherits interfacenames ] [ [ modifiers ] Property membername ] [ [ modifiers ] Function memberame ] [ [ modifiers ] Sub memberame ] [ [ modifiers ] Event memberame ] [ [ modifiers ] Interface memberame ] [ [ modifiers ] Class memberame ] [ [ modifiers ] Structure memberame ] End Interface Partes attributelist Opcional. Ver Lista de atributos. accessmodifier Opcional. Puede ser una de las siguientes: Public Protected

Friend Private Protected Friend Ver Niveles de acceso en Visual Basic. Shadows Opcional. Ver Shadows. name Obligatorio. Nombre de esta interfaz. Ver Nombres de elementos declarados. Of Opcional. Especifica que sta es una interfaz genrica. typelist Es obligatoria si se utiliza la palabra clave Of. Lista de parmetros de tipo de esta interfaz. Ver Lista de tipos. Inherits Opcional. Indica que esta interfaz hereda los atributos y miembros de otra interfaz o interfaces. Ver Inherits (Instruccin). interfacenames Es obligatoria si se utiliza la instruccin Inherits. Nombres de las interfaces de las que deriva esta interfaz. modifiers Opcional. Modificadores adecuados para el miembro de interfaz que se est definiendo. Property Opcional. Define una propiedad que es un miembro de la interfaz. Function Opcional. Define un procedimiento Function que es un miembro de la interfaz. Sub Opcional. Define un procedimiento Sub que es un miembro de la interfaz. Event

Opcional. Define un evento que es un miembro de la interfaz. Interface Opcional. Define una interfaz que est anidada dentro de esta interfaz. La definicin de interfaz anidada debe finalizar con una instruccin End Interface. Class Opcional. Define una clase que es un miembro de la interfaz. La definicin de clase miembro debe finalizar con una instruccin End Class. Structure Opcional. Define una estructura que es un miembro de la interfaz. La definicin de estructura miembro debe finalizar con una instruccin End Structure. membername Obligatorio para cada propiedad, procedimiento, evento, interfaz, clase o estructura definidos como miembro de la interfaz. Nombre del miembro. End Interface Termina la definicin de Interface. Descripcin Una interfaz define un conjunto de miembros, como las propiedades y procedimientos, que pueden implementar las clases y estructuras. La interfaz slo define las firmas de los miembros y no sus mecanismos internos. Una clase o estructura implementa la interfaz proporcionando cdigo para cada miembro definido por la interfaz. Finalmente, cuando la aplicacin crea una instancia a partir de esa clase o estructura, existe un objeto y se ejecuta en memoria. Para obtener ms informacin, vea Programacin orientada a objetos en Visual Basic y Interfaces en Visual Basic. Para consultar una comparacin de interfaces y clases, vea Informacin general sobre interfaces. Slo puede utilizar Interface en un espacio de nombres o al nivel de mdulo. Esto significa que el contexto de la declaracin de una interfaz debe ser un archivo de cdigo fuente, espacio de nombres, clase, estructura, mdulo o interfaz y no puede ser un procedimiento ni un bloque. Para obtener ms informacin, vea Contextos de declaracin y niveles de acceso predeterminados. Las interfaces tienen Friend (Visual Basic) como acceso predeterminado. Puede ajustar sus niveles de acceso con los modificadores de acceso. Para obtener ms informacin, vea Niveles de acceso en Visual Basic.

Reglas Anidar interfaces. Puede definir una interfaz dentro de otra. La interfaz exterior se denomina la interfaz contenedora y la interfaz interior se denomina interfaz anidada. Declaracin de miembro. Cuando declara una propiedad o procedimiento como un miembro de una interfaz, est definiendo slo la firma de esa propiedad o procedimiento. Esto incluye el tipo de elemento (propiedad o procedimiento), sus parmetros y tipos de parmetro y su tipo de valor devuelto. Por esta razn, la definicin de miembro slo utiliza una lnea de cdigo y las instrucciones de terminacin como End Function o End Property no son vlidas en las interfaces. En cambio, cuando define una enumeracin o estructura, o una clase o interfaz anidada, es necesario incluir sus miembros de datos. Modificadores de miembros. No puede utilizar ningn modificador de acceso al definir miembros de mdulo de definicin, ni se puede especificar Shared (Visual Basic) ni ningn modificador de procedimiento excepto Overloads. Puede declarar cualquier miembro con Shadows y puede utilizar Default (Visual Basic) al definir una propiedad, as como ReadOnly (Visual Basic) o WriteOnly. Herencia. Si la interfaz utiliza la Inherits (Instruccin), puede especificar una o ms interfaces base. Puede heredar de dos interfaces aun cuando cada una de ellas defina un miembro con el mismo nombre. De hacerlo as, el cdigo que implementa debe utilizar la calificacin de nombres para especificar qu miembro est implementando. Una interfaz no puede heredar de otra interfaz con un nivel de acceso ms restrictivo. Por ejemplo, una interfaz Public no puede heredar una interfaz de tipo Friend. Una interfaz no puede heredar de una interfaz anidada dentro de ella. Implementacin. Cuando una clase utiliza la instruccin Implements (Visual Basic) para implementar esta interfaz, debe implementar todos los miembros definidos dentro de la interfaz. Adems, cada firma incluida el cdigo que implementa debe coincidir exactamente con la firma correspondiente definida en esta interfaz. Sin embargo, el nombre del miembro del cdigo que implementa no tiene por qu coincidir con el nombre de miembro definido en la interfaz. Cuando una clase est implementando un procedimiento, no puede designar el procedimiento como Shared. Propiedad predeterminada. Una interfaz puede especificar a lo sumo una propiedad como su propiedad predeterminada, a la que se puede hacer referencia sin utilizar el nombre de propiedad. Esta propiedad se especifica declarndola con el modificador Default (Visual Basic). Para obtener ms informacin, vea Propiedades predeterminadas. Observe que esto significa que una interfaz slo puede definir una propiedad predeterminada si no hereda ninguna. Comportamiento Nivel de acceso. Todos los miembros de interfaz tienen implcitamente acceso Public (Visual Basic). No puede utilizar ningn 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 el de la interfaz subyacente o el de la clase implementadora. Esto se ilustra en el siguiente ejemplo: PublicInterface IDemo Sub doSomething() EndInterface PublicClass implementIDemo Implements IDemo PrivateSub doSomething() Implements IDemo.doSomething EndSub EndClass Dim varAsInterface As IDemo = New implementIDemo() Dim varAsClass As implementIDemo = New implementIDemo()

Si tiene acceso a los miembros de clase a travs de varAsInterface, todos ellos tienen acceso pblico. Sin embargo, si tiene acceso a los miembros a travs de varAsClass, el procedimiento SubdoSomething tiene acceso privado. mbito. Una interfaz est en mbito a lo largo de su espacio de nombres, clase, estructura o mdulo. El mbito de cada uno de los miembros de la interfaz es la interfaz completa. Perodo de duracin. Una interfaz no tiene en s misma un perodo de duracin, ni tampoco sus miembros. Cuando una clase implementa una interfaz y se crea un objeto como una instancia de esa clase, el objeto tiene un perodo de duracin dentro de la aplicacin en la que se est ejecutando. Para obtener ms informacin, vea "Perodo de duracin" enInstruccin Class (Visual Basic). Ejemplo El ejemplo siguiente utiliza la instruccin Interface para definir una interfaz denominada thisInterface, que se debe implementar con una instruccin Property y una instruccin Function. PublicInterface thisInterface Property thisProp(ByVal thisStr AsString) AsChar Function thisFunc(ByVal thisInt AsInteger) AsInteger EndInterface

Observe que las instrucciones Property y Function no introducen el bloques que terminan con End Property y End Function dentro de la interfaz. Una interfaz slo define las firmas de sus miembros. Los bloques Property y Function completos aparecen en las clases que implementan thisInterface.

Is (Visual Basic) Presenta una clusula Is que realiza una comparacin. Descripcin La palabra clave Is se utiliza con la palabra clave TypeOf en una expresin TypeOf...Is para comprobar si el tipo en tiempo de ejecucin de una variable es compatible con un tipo determinado. La palabra clave Is se puede utilizar en estos contextos: Is (Operador) Select...Case (Instruccin) IsNot (Operador) Compara dos variables de referencia de objeto. result = object1 IsNot object2

Partes result Requerido. Valor Boolean. object1 Requerido. Cualquier variable o expresin de tipo Object. object2 Requerido. Cualquier variable o expresin de tipo Object. Descripcin El operador IsNot determina si dos referencias a objeto hacen referencia a objetos diferentes. Sin embargo, no establece comparaciones entre valores. Si object1 y object2 hacen referencia la misma instancia de objeto exacta, result da como resultado False; si no es as, result da como resultado True. IsNot es el opuesto del operador Is. La ventaja de IsNot es que puede evitar sintaxis extraa con Not e Is, que puede ser difcil de leer. Puede utilizar los operadores Is e IsNot para probar objetos enlazados en tiempo de compilacin y en tiempo de ejecucin. Ejemplo

El ejemplo de cdigo siguiente utiliza los operadores Is e IsNot para lograr la misma comparacin. Dim o1, o2 AsNewObject IfNot o1 Is o2 Then MsgBox("o1 and o2 do not refer to the same instance.") If o1 IsNot o2 Then MsgBox("o1 and o2 do not refer to the same instance.") ............................................................................................................................................................... Lib Introduce una clusula Lib que identifica el archivo externo (archivo DLL o recurso de cdigo) que contiene un procedimiento externo. Descripcin La palabra clave Lib se puede utilizar en este contexto: Declare (Instruccin) Like (Operador)

Compara una cadena respecto a un modelo. result = string Like pattern Partes result Obligatoria. Cualquier variable de tipo Boolean. El resultado ser un valor de tipo Boolean que indicar si string satisface o no el modelo pattern. string Obligatoria. Cualquier expresin de tipo String. pattern Obligatoria. Cualquier expresin String que cumpla las convenciones de coincidencia de modelos que se describen en la seccin "Comentarios". Descripcin Si el valor de string coincide con el modelo contenido en pattern, result es True. Si la cadena no coincide con el modelo, result es False. Si tanto string como pattern son cadenas vacas, el resultado es True.

Mtodo de comparacin El comportamiento del operador Like depende de Option Compare (Instruccin). El mtodo de comparacin de cadenas predeterminado para cada archivo de cdigo fuente es Option Compare Binary. Opciones de modelo El modelo de coincidencias integrado es una flexible herramienta para establecer comparaciones entre cadenas. Las caractersticas de coincidencia de modelos permiten comparar cada carcter de string con un carcter concreto, un carcter comodn, una lista de caracteres o un intervalo de caracteres. En la siguiente tabla se muestran los caracteres permitidos en pattern y aquellos caracteres con los que coinciden. Caracteres de pattern ? * # [charlist] [!charlist] Listas de caracteres Se puede utilizar un grupo de uno o varios caracteres (charlist) entre corchetes ([ ]) para hacer coincidir cualquier carcter individual de string; este grupo podr incluir prcticamente cualquier cdigo de caracteres, dgitos incluidos. Un signo de exclamacin de cierre (!) situado al principio de charlist significa que se encontrar una coincidencia si string contiene cualquier carcter no incluido en charlist. Cuando se use sin corchetes, el signo de cerrar exclamacin coincidir consigo mismo. Caracteres especiales Si desea buscar caracteres especiales: corchete de apertura ([), interrogacin de cierre (?) signo de nmero (#) y asterisco (*), escrbalos entre corchetes. No se puede usar el corchete de cierre (]) dentro de un grupo para identificar una autocoincidencia, pero s fuera de un grupo, como carcter individual. La secuencia [] se considera una cadena de longitud cero (""). Sin embargo, no puede formar parte de una lista de caracteres encerrada entre corchetes. Si desea comprobar si una posicin en string contiene un carcter de un grupo de caracteres o no contiene ninguno, puede utilizar Like dos veces. Intervalos de caracteres Si utiliza un guin () para separar los lmites superior e inferior del intervalo, charlist puede especificar un intervalo de caracteres. Por ejemplo, [AZ] arroja una coincidencia si la posicin de caracteres correspondiente en string contiene cualquier carcter comprendido en el intervalo AZ, Coincidencias en string Cualquier carcter individual Cero o ms caracteres Cualquier dgito individual (0-9) Cualquier carcter individual de charlist Cualquier carcter individual que no est incluido en charlist

y [!HL] arroja una coincidencia si la posicin de caracteres correspondiente contiene cualquier carcter que no est comprendido en el intervalo HL. Cuando se especifique un intervalo de caracteres, stos debern aparecer en orden ascendente, es decir, de menor a mayor. Eso significa que [AZ] es un modelo vlido, pero [ZA] no. Varios intervalos de caracteres Para especificar varios intervalos en la misma posicin de caracteres, sitelos entre los mismos corchetes sin delimitadores. Por ejemplo, [ACXZ] arroja una coincidencia si la posicin de caracteres correspondiente en string contiene cualquier carcter comprendido en el intervalo AC o en el intervalo XZ. Uso del guin Un guin () puede aparecer tanto al principio (despus de un signo de exclamacin, si lo hay) como al final de charlist para identificar una autocoincidencia. En cualquier otra posicin, el guin identifica un intervalo de caracteres delimitado por los caracteres a ambos lados de l. Secuencia de ordenacin El significado de un intervalo especfico depender del orden de los caracteres en tiempo de ejecucin (segn venga determinado por OptionCompare y la configuracin regional del sistema en que se est ejecutando el cdigo). Con OptionCompareBinary, el intervalo [AE] coincide con A, B, C, D y E. Con OptionCompareText, [AE] 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 despus de los caracteres sin acento en el criterio de ordenacin. Caracteres dgrafos En algunos idiomas, existen caracteres alfabticos que representan dos fonemas distintos. Por ejemplo, existen algunos idiomas que utilizan el carcter para representar los sonidos a y ecuando aparecen juntos. El operador Like reconoce que el carcter dgrafo unitario y los dos caracteres individuales son equivalentes. Cuando en la configuracin regional del sistema se especifica un idioma que utiliza un carcter dgrafo, la aparicin de un carcter dgrafo unitario, ya sea en pattern o en string, coincidir con la secuencia de dos caracteres de la otra cadena. Del mismo modo, un carcter dgrafo que aparezca en pattern entre corchetes (aislado, en una lista o en un intervalo) coincidir con la secuencia de dos caracteres equivalente en string. Sobrecarga El operador Like se puede sobrecargar, lo que significa que una clase o una estructura pueden definir de nuevo su comportamiento cuando un operando tiene el tipo de dicha clase o estructura. Si el cdigo utiliza este operador en una clase o estructura de este tipo, asegrese de conocer su comportamiento redefinido. Ejemplo En este ejemplo se utiliza el operador Like para comparar cadenas en varios modelos. Los resultados se introducen en una variable de tipo Boolean que indica si cada cadena satisface el modelo.

Dim testCheck AsBoolean ' 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*" Long (Tipo de datos, Visual Basic) Contiene enteros de 64 bits (8 bytes) con signo cuyo valor se sita entre 9.223.372.036.854.775.808 y 9.223.372.036.854.775.807 (9,2... E+18). Comentarios Utilice el tipo de datos Long para incluir nmeros enteros demasiado grandes para ajustarse en el tipo de datos Integer. El valor predeterminado de Long es 0. Sugerencias de programacin Consideraciones sobre la interoperabilidad. Si interacta con componentes no escritos para .NET Framework, por ejemplo, objetos de automatizacin o COM, recuerde

que Longtiene un ancho de datos diferente (32 bits) en otros entornos. Al pasar un argumento de 32 bits a esos componentes, declrelo en el cdigo de Visual Basic como Integer en lugar deLong. Adems, la automatizacin no admite enteros de 64 bits en Windows 95, Windows 98, Windows ME o Windows 2000. No se puede pasar ningn argumento Long de Visual Basic a un componente de automatizacin en estas plataformas. Ampliacin. El tipo de datos Long se ampla a Decimal, Single o Double. Esto significa que se puede convertir Byte en cualquiera de estos tipos sin encontrar un errorSystem.OverflowException. Caracteres de tipo Al agregar el carcter de tipo de literal L a un literal, el tipo de datos se convierte al tipo de datos Long. Si se agrega el carcter de tipo de identificador & a cualquier identificador, se convierte su tipo de datos al tipo Long. Tipo en Framework. El tipo correspondiente en .NET Framework es la estructura System.In t64. Loop Finaliza un bucle presentado con una instruccin Do. Comentarios La palabra clave Loop se puede utilizar en este contexto: Do...Loop (Instrucciones) Me Proporciona una forma de hacer referencia a la instancia especfica de una clase o estructura donde se est ejecutando el cdigo actualmente. Descripcin La palabra clave Me se comporta como una variable de objeto o de estructura que hace referencia a la instancia actual. El uso de la palabra clave Me es especialmente til para transferir informacin acerca de la instancia de una clase o estructura que se est ejecutando actualmente a un procedimiento de otro mdulo, estructura o clase. Por ejemplo, suponga que dispone del siguiente procedimiento en un mdulo. Sub ChangeFormColor(FormName As Form) Randomize() FormName.BackColor = Color.FromArgb(Rnd() * 256, Rnd() * 256, Rnd() * 256) End Sub Puede llamar a este procedimiento y pasar la instancia actual de la clase Form como un argumento mediante la siguiente instruccin.

ChangeFormColor(Me) La palabra clave Me se puede utilizar en estos contextos: Class (Instruccin) Structure (Instruccin) ... Mod (Operador, Visual Basic) Divide dos nmeros y devuelve slo el resto.

number1 Mod number2 Partes number1 Obligatoria. Cualquier expresin numrica. number2 Obligatoria. Cualquier expresin numrica. Tipos admitidos Todos los tipos numricos, incluidos los tipos de punto flotante sin signo y Decimal. Resultado El resultado es el resto que queda despus de dividir number1 entre number2. Por ejemplo, la expresin 14 Mod 4 se evala como 2. Comentarios Si number1 o number2 es un valor de coma flotante, se devuelve el resto en punto flotante de la divisin. El tipo de datos del resultado es el tipo de datos ms pequeo que puede contener todos los valores posibles que resultan de la divisin con los tipos de datos de number1 y number2. Si number1 o number2 se evala como Nothing, se trata como si fuese cero. Los operadores relacionados son los siguientes: \ (Operador) devuelve el cociente entero de una divisin. Por ejemplo, la expresin 14 \ 4 se evala como 3. El / (Operador, Visual Basic) devuelve el cociente completo, incluso el resto, como un nmero en punto flotante. Por ejemplo, la expresin 14 / 4 se evala como 3,5. Intento de dividir por cero

Si number2 se evala como cero, el comportamiento del operador Mod depende del tipo de datos de los operandos. Una divisin de enteros produce una excepcin DivideByZeroException. Una divisin de punto flotante devuelve NaN. Frmula equivalente La expresin a Mod b es equivalente a cualquiera de las frmulas siguientes: a - (b * (a \ b)) a - (b * Fix(a / b)) Imprecisin de punto flotante Cuando trabaje con nmeros en punto flotante, tenga presente que no siempre tienen una representacin precisa en memoria. Esto podra producir que ciertas operaciones arrojaran resultados inesperados, como una comparacin de valores y el operador Mod. Para obtener ms informacin, vea Solucionar problemas de tipos de datos. Sobrecarga El operador Mod se puede sobrecargar, lo que significa que una clase o estructura pueden volver a definir su comportamiento. Si su cdigo aplica Mod a una instancia de una clase o estructura que incluye este tipo de sobrecarga, asegrese de conocer su comportamiento redefinido. Para obtener ms informacin, vea Procedimientos de operador. Ejemplo En el ejemplo siguiente se usa el operador Mod para dividir dos nmeros y devolver nicamente el resto. Si uno de ellos es un nmero con punto flotante, el resto resultante tambin ser un nmero punto flotante. Dim testResult AsDouble testResult = 10 Mod 5 testResult = 10 Mod 3 testResult = 12 Mod 4.3 testResult = 12.6 Mod 5 testResult = 47.9 Mod 9.35

Las expresiones del ejemplo anterior devuelven los valores 0, 1, 3.4, 2.6 y 1.15. En el ejemplo siguiente se muestra la imprecisin potencial de operandos de punto flotante. En la primera instruccin, los operandos son Double, y 0.2 es una fraccin binaria de recursividad infinita cuyo valor almacenado es 0.20000000000000001. En la segunda instruccin, el carcter de tipo de literal D obliga a que los dos operandos sean Decimal, y 0.2 tiene una representacin precisa. firstResult = 2.0 Mod 0.2 ' Double operation returns 0.2, not 0. secondResult = 2D Mod 0.2D ' Decimal operation returns 0.

Module (Instruccin) Declara el nombre de un mdulo e introduce la definicin de las variables, propiedades, eventos y procedimientos que incluye el mdulo.

[ <attributelist> ] [ accessmodifier ] [ statements ] End Module

Module name

Partes attributelist Opcional. Ver Lista de atributos. accessmodifier Opcional. Puede ser una de las siguientes: Public Friend Ver Niveles de acceso en Visual Basic. name Obligatorio. Nombre de este mdulo. Ver Nombres de elementos declarados. statements Opcional. Instrucciones que definen las variables, propiedades, eventos, procedimientos y tipos anidados de este mdulo. End Module Termina la definicin Module. Descripcin Una instruccin Module define un tipo de referencia disponible en su espacio de nombres. Un mdulo (a veces denominado mdulo estndar) es similar a una clase pero con algunas distinciones importantes. Cada mdulo tiene exactamente una instancia y no necesita ser creado ni asignado a una variable. Los mdulos no admiten la herencia ni implementan interfaces. Tenga en cuenta que un mdulo no es un tipo en el sentido en que lo son una clase o una estructura; es decir, no puede declarar que un elemento de programacin tenga el tipo de datos de un mdulo.

Slo puede utilizar Module en el nivel de espacio de nombres. Esto significa que el contexto de la declaracin de un mdulo debe ser un archivo de cdigo fuente o espacio de nombres y no puede ser una clase, estructura, mdulo, interfaz, procedimiento o bloque. No puede anidar un mdulo dentro de otro mdulo ni dentro de cualquier tipo. Para obtener ms informacin, vea Contextos de declaracin y niveles de acceso predeterminados. Un mdulo tiene el mismo perodo de duracin que el programa. Dado que sus miembros son todos de tipo Shared, tambin tienen los perodos de duracin iguales al del programa. De manera predeterminada, el acceso a los mdulos es de tipo Friend (Visual Basic). Puede ajustar sus niveles de acceso con los modificadores de acceso. Para obtener ms informacin, veaNiveles de acceso en Visual Basic. Todos los miembros de un mdulo son de forma implcita de tipo Shared. Clases y mdulos Estos elementos tienen muchas similitudes, pero hay tambin algunas diferencias importantes. Terminologa. Las versiones anteriores de Visual Basic reconocen dos tipos de mdulos: mdulos de clase (archivos .cls) y mdulos estndar (archivos .bas). La versin actual les llamaclases y mdulos, respectivamente. Miembros compartidos. Puede controlar si un miembro de una clase es un miembro compartido o un miembro de instancia. Orientacin a objetos. Las clases estn orientadas a los objetos, pero los mdulos no. Por tanto, slo se pueden crear instancias como objetos de las clases. Para obtener ms informacin, vea Clases y mdulos. Reglas Modificadores. Todos los miembros de mdulo son implcitamente de tipo Shared (Visual Basic). No puede utilizar la palabra clave Shared al declarar un miembro y no puede modificar el estado compartido de ningn miembro. Herencia. Un mdulo no puede heredar de ningn tipo distinto de Object, del que heredan todos los mdulos. En particular, un mdulo no puede heredar de otro. No puede utilizar Inherits (Instruccin) en una definicin de mdulo, incluso si es para especificar Object. Propiedad Default. No puede definir Propiedades predeterminadas en un mdulo. Comportamiento Nivel de acceso. En un mdulo, puede declarar cada miembro con su propio nivel de acceso. Los miembros de mdulo tienen como valor predeterminado acceso de tipo Public (Visual Basic), excepto las variables y constantes, que tienen como valor predeterminado acceso de tipo Private (Visual Basic). Cuando un mdulo tiene un acceso ms restringido que uno de sus miembros, tiene prioridad el nivel de acceso del mdulo especificado. mbito. Los mdulos se incluyen en el mbito de sus espacios de nombre. El mbito de todos los miembros del mdulo es el mdulo completo. Observe que en todos los miembros se realiza la promocin de tipos, que provoca que su mbito sea el espacio de nombres que contiene el mdulo. Para obtener ms informacin.

Calificacin. Puede tener varios mdulos en un proyecto y puede declarar miembros con el mismo nombre en dos o ms mdulos. Sin embargo, si la referencia procede del exterior del mdulo debe calificar cualquier referencia a dichos miembros con el nombre del mdulo adecuado. Para obtener ms informacin. Ejemplo PublicModule thisModule Sub Main() Dim userName AsString = InputBox("What is your name?") MsgBox("User name is"& userName) EndSub ' Insert variable, property, procedure, and event declarations. EndModule MustInherit Especifica que una clase slo se puede utilizar como una clase base y que no se puede crear directamente un objeto a partir de ella. Comentarios La finalidad de una clase base (tambin conocida como clase abstracta) es definir la funcionalidad comn a todas las clases que se derivan de sta. La clase base evita que las clases derivadas tengan que redefinir los elementos comunes. En algunos casos, esta funcionalidad comn no es lo suficientemente completa para que se pueda utilizar un objeto y cada clase derivada define la funcionalidad que falta. En estos casos, desear utilizar el cdigo para crear objetos nicamente a partir de las clases derivadas. Para ello, puede utilizar MustInherit en la clase base. Otro utilidad de una clase MustInherit es restringir una variable a un conjunto de clases relacionadas. Puede definir una clase base y derivar todos estas clases relacionadas a partir de ella. La clase base no necesita proporcionar una funcionalidad comn a todas las clases derivadas, aunque se puede utilizar como filtro en la asignacin de valores a las variables. Si el cdigo utilizado declara una variable como clase base, Visual Basic permite asignar nicamente un objeto desde una de las clases derivadas a dicha variable. .NET Framework define varias clases MustInherit, entre las que se incluyen Array, Enum y 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, puede asignar slo tipos de valor a esa variable. Reglas Contexto de declaracin. Slo puede utilizar MustInherit en una instruccin Class. Modificadores combinados. No se puede especificar MustInherit junto con NotInheritable en la misma declaracin. Ejemplo

En el ejemplo siguiente se ilustra la herencia forzada y el reemplazo forzado. La clase base shape define una variable acrossLine. Las clases circle y square se derivan de shape. Heredan la definicin de acrossLine, pero deben definir la funcin area porque ese clculo es diferente en cada tipo de forma. PublicMustInheritClass shape Public acrossLine AsDouble PublicMustOverrideFunction area() AsDouble EndClass PublicClass circle : Inherits shape PublicOverridesFunction area() AsDouble Return Math.PI * acrossLine EndFunction EndClass PublicClass square : Inherits shape PublicOverridesFunction area() AsDouble Return acrossLine * acrossLine EndFunction EndClass PublicClass consumeShapes PublicSub makeShapes() Dim shape1, shape2 As shape shape1 = New circle shape2 = New square EndSub EndClass

Puede declarar shape1 y shape2 para que sean del tipo shape. Sin embargo, no puede crear un objeto a partir de shape porque carece de la funcionalidad de area y se ha marcado comoMustInherit. Dado que se declaran como shape, las variables shape1 y shape2 se restringen a los objetos procedentes de las clases derivadas circle y square. Visual Basic no permite asignar ningn otro objeto a estas variables, lo que proporciona un elevado nivel de seguridad de tipos. Uso El modificador MustInherit se puede utilizar en este contexto: Class (Instruccin) MustOverride Especifica que una propiedad o procedimiento no se implementa en esta clase y debe reemplazarse en una clase derivada para poder utilizarse.

Descripcin Slo se pude utilizar MustOverride en una instruccin de declaracin de procedimiento o propiedad. La propiedad o el procedimiento que especifica MustOverride debe ser un miembro de una clase y sta se debe marcar como MustInherit. Reglas Declaracin incompleta. Si especifica MustOverride, no proporciona lneas adicionales de cdigo para la propiedad o el procedimiento, ni siquiera las instrucciones End Function,End Property o End Sub. Modificadores combinados. No se puede especificar MustOverride junto con NotOverridable, Overridable o Shared en la misma declaracin. Sombreado y reemplazo. El sombreado y el reemplazo definen de nuevo un elemento heredado, pero hay diferencias significativas entre los dos enfoques. Para obtener ms informacin, vea Sombrear en Visual Basic. Trminos alternativos. Un elemento que no se puede utilizar excepto en reemplazos se denomina en ocasiones elemento virtual puro. El modificador MustOverride se puede utilizar en estos contextos: Instruccin Function (Visual Basic) Property (Instruccin) Instruccin Sub (Visual Basic) MyBase Proporciona una manera de hacer referencia a la clase base de la instancia de clase actual. Descripcin La palabra clave MyBase acta como una variable de objeto que hace referencia a la clase base de la instancia actual de una clase. Generalmente, MyBase se utiliza para tener acceso a miembros de la clase base que se reemplazan o sombrean en una clase derivada. En particular, MyBase.New se utiliza para llamar explcitamente a un constructor de una clase base desde un constructor de una clase derivada. No se permite utilizar MyBase para llamar a mtodos base MustOverride. MyClass Proporciona una manera de hacer referencia a los miembros de la instancia de clase actual sin que se reemplacen con clases derivadas. Comentarios

La palabra clave MyClass acta como una variable de objeto que hace referencia a la instancia actual de una clase tal como se implement originalmente. MyClass es similar a Me, pero cada llamada a un mtodo y propiedad de MyClass se trata como si el mtodo o propiedad fuesen NotOverridable. Por lo tanto, el mtodo o propiedad no se ve afectado por el reemplazo de una clase derivada. En el siguiente ejemplo se comparan Me y MyClass. Class baseClass Public Overridable Sub testMethod() MsgBox("Base class string") End Sub Public Sub useMe() ' The following call uses the calling class's version, even if ' that version is an override. Me.testMethod() End Sub Public Sub useMyClass() ' The following call uses this version and not any override. MyClass.testMethod() End Sub End Class Class derivedClass : Inherits baseClass Public Overrides Sub testMethod() MsgBox("Derived class string") End Sub End Class Class testClasses Sub startHere() Dim testObj As derivedClass = New derivedClass() ' The following call displays "Derived class string". testObj.useMe() ' The following call displays "Base class string". testObj.useMyClass() End Sub End Class Aunque derivedClass reemplaza a testMethod, la palabra clave MyClass en useMyClass anula el efecto del reemplazo y el compilador resuelve la llamada a la versin de la clase base detestMethod. MyClass no se puede utilizar dentro de un mtodo Shared (Visual Basic), pero puede utilizarse en un mtodo de instancia para obtener acceso a un miembro compartido de una clase. Namespace (Instruccin) Declara el nombre de un espacio de nombres y determina que el cdigo fuente que sigue a la declaracin se compile dentro de ese espacio de nombres. Namespace { name | name.name } [ componenttypes ] End Namespace

Partes name Obligatorio. Un nombre nico que identifica el espacio de nombres. Debe ser un identificador de Visual Basic vlido. Para obtener ms informacin, vea Nombres de elementos declarados. componenttypes Opcional. Elementos que forman el espacio de nombres. Entre estos elementos se pueden citar enumeraciones, estructuras, interfaces, clases, mdulos, delegados y otros espacios de nombres. End Namespace Termina un bloque Namespace. Descripcin Los espacios de nombres se utilizan como un sistema de organizacin. Proporcionan una manera de clasificar y presentar elementos de programacin que se exponen a otros programas y aplicaciones. Tenga en cuenta que un espacio de nombres no es un tipo en el sentido en que lo son una clase o una estructura; es decir, no puede declarar que un elemento de programacin tenga el tipo de datos de un espacio de nombres. Slo puede utilizar una instruccin Namespace en el nivel de archivo o de espacio de nombres. Esto significa que el contexto de la declaracin de un espacio de nombres debe ser un archivo de cdigo fuente u otro espacio de nombres y no puede ser una clase, estructura, mdulo, interfaz o procedimiento. Para obtener ms informacin. Los espacios de nombres se tratan como si contasen con un nivel de acceso de tipo Public. Se puede tener acceso a un espacio de nombres desde el cdigo del mismo proyecto, desde otros proyectos que hacen referencia a este proyecto y desde los ensamblados creados a partir del proyecto. Reglas Atributos. No puede aplicar atributos a un espacio de nombres. Los atributos incorporan informacin a los metadatos del ensamblado, que no son significativos para los clasificadores de origen como los espacios de nombres. Modificadores. No puede aplicar modificadores de acceso ni de procedimiento ni cualquier otro modificador a un espacio de nombres. Dado que no es un tipo, estos modificadores no son significativos. Anidado. Puede declarar un espacio de nombres dentro de otro. No existe un lmite estricto en los niveles de anidacin que puede declarar, pero debe recordar que si otro cdigo tiene acceso a los elementos declarados en el espacio de nombres ms interno, debe utilizar una cadena de calificacin con los nombres de todos los espacios de nombres de la jerarqua de anidacin. Comportamiento

Nivel de acceso. Los elementos de programacin declarados en el nivel del espacio de nombres, es decir, dentro de un espacio de nombres pero no dentro de cualquier otro elemento, pueden tener acceso de tipo Public o Friend. Si no se especifica, el nivel de acceso de dichos elementos tiene como valor predeterminado Friend. Los elementos que puede declarar en el nivel de espacio de nombres incluyen clases, estructuras, mdulos, interfaces, enumeraciones y delegados. Para obtener ms informacin, vea Contextos de declaracin y niveles de acceso predeterminados. Compilacin. Todos los elementos de programacin declarados a continuacin de una instruccin Namespace pertenecen a dicho espacio de nombres. Visual Basic contina compilando los elementos en el ltimo espacio de nombres declarado hasta que encuentra una instruccin End Namespace u otra instruccin Namespace. Agregar a un espacio de nombres. Si ya se ha definido un espacio de nombres, aunque sea fuera del proyecto, puede agregar en l elementos de programacin. Para ello, utiliza una instruccin Namespace para indicar a Visual Basic que compile los elementos siguientes en dicho espacio de nombres. En el ejemplo siguiente se define el esqueleto de una nueva clase de lista genrica 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 Espacio de nombres de la raz. Todos los nombres de espacios de nombres del proyecto se basan en un espacio de nombres de raz. Visual Studio asigna el nombre de proyecto como el espacio de nombres de raz predeterminado para todo el cdigo del proyecto. Por ejemplo, si el proyecto se denomina Payroll, sus elementos de programacin pertenecen al espacio de nombres Payroll. Si declara Namespace funding, el nombre completo de ese espacio de nombres es Payroll.funding. Si desea especificar un espacio de nombres existente en una instruccin Namespace, como en el ejemplo de clase de lista genrica, puede establecer el espacio de nombres de raz con un valor nulo. Para ello, elige Propiedades del proyecto en el men Proyecto men y borra la entrada Espacio de nombres de la raz para dejar el cuadro vaco. Si no ha realizado esto en el ejemplo de la clase de lista genrica, el compilador de Visual Basic considera System.Collections.Generic como un nuevo espacio de nombres en el proyectoPayroll, con el nombre completo Payroll.System.Collections.Generic. Tambin puede utilizar la palabra clave Global para hacer referencia a los elementos de espacios de nombres definidos fuera del proyecto. Esto permite conservar el nombre del proyecto como espacio de nombres de la raz. As reduce la posibilidad de combinar involuntariamente los elementos de programacin con aqullos de espacios de nombres existentes. Solucin de problemas Tipos indefinidos. El espacio de nombres de la raz puede provocar concatenaciones inesperadas de nombres de espacio de nombres. Si hace referencia a espacios de nombres definidos fuera del proyecto, el compilador de Visual Basic puede generarlos como espacios de nombres anidados dentro del espacio de nombres de la raz. En este caso, el compilador no reconoce los tipos ya definidos en los espacios de nombres externos. Para evitarlo,

establezca el espacio de nombres de la raz con un valor nulo como se describe en "Espacio de nombres de la raz" o utilice la palabra clave Global para obtener acceso a los elementos de espacios de nombres externos. Ejemplo En el ejemplo siguiente se declaran dos espacios de nombres, uno anidado dentro del otro. Namespace n1 Namespace n2 Class a ' Insert class definition. EndClass EndNamespace EndNamespace

En el siguiente ejemplo se declaran varios espacios de nombres anidados en una nica lnea; este ejemplo es equivalente al anterior. Namespace n1.n2 Class a ' Insert class definition. EndClass EndNamespace

En el ejemplo siguiente se tiene acceso a la clase definida en los ejemplos anteriores. Dim instance AsNew n1.n2.a Narrowing Indica que un operador de conversin (CType) convierte una clase o una estructura en un tipo que quiz no pueda incluir algunos de los valores posibles de la clase o la estructura original. Convertir con la palabra clave Narrowing El procedimiento de conversin debe especificar Public Shared adems de Narrowing. Las conversiones de restriccin no son siempre satisfactorias en tiempo de ejecucin y pueden generar errores o provocar prdida de datos. Ejemplos son Long a Integer, String a Date y un tipo base a un tipo derivado. Esta ltima conversin es de restriccin, ya que es posible que el tipo base no contenga todos los miembros del tipo derivado y no es, por tanto, una instancia del tipo derivado. Si Option Strict tiene el valor On, el cdigo que lo utiliza debe emplear CType para todas las conversiones de restriccin. La palabra clave Narrowing se puede utilizar en este contexto:

Operator (Instruccin) New (Visual Basic) Introduce una clusula New para crear una nueva instancia de objeto o especifica una restriccin de constructor en un parmetro de tipo. Descripcin En una lista de parmetros de tipo, una restriccin New especifica que el tipo proporcionado debe exponer un constructor sin parmetros al que el cdigo pueda tener acceso. Para obtener ms informacin sobre los parmetros de tipo y las restricciones, ver Lista de tipos. En una declaracin o instruccin de asignacin, una clusula New debe especificar una clase definida a partir de la que se pueda crear la instancia. Esto significa que la clase debe exponer un constructor al que el cdigo de llamada pueda tener acceso. Puede utilizar una clusula New en una instruccin de declaracin o en una instruccin de asignacin. Cuando se ejecuta la instruccin, sta llama al constructor de la clase especificada y le pasa los argumentos que se le hayan proporcionado. En el siguiente ejemplo se muestra esta operacin. Dim someObj As Object someObj = New someClass("String required by constructor") Dim nextLabel As New Label() Dado que las matrices son clases, New puede crear una nueva instancia de la matriz, como se muestra en el ejemplo siguiente. Dim intArray As Integer() intArray = New Integer() {0, 1, 2, 3} Common Language Runtime (CLR) produce un error OutOfMemoryException si no hay memoria suficiente para crear la nueva instancia. La palabra clave New se puede utilizar en estos contextos: Instruccin Dim (Visual Basic) Of .... Next (Palabra clave) Termina un bucle que se repite con diferentes valores de una variable de bucle o especifica que la ejecucin debe continuar con la instruccin que sigue a la instruccin que gener un error.

Descripcin La palabra clave Next se puede utilizar en estos contextos: For...Next (Instruccin) For Each...Next (Instruccin) On Error (Instruccin) Resume (Instruccin) Not (Operador, Visual Basic) Lleva a cabo o la negacin lgica de una expresin de tipo Boolean o la negacin bit a bit de una numrica. result = Not expression

Partes result Obligatoria. Cualquier expresin numrica o de tipo Boolean. expression Obligatoria. Cualquier expresin numrica o de tipo Boolean. Comentarios En la siguiente tabla se muestra cmo se determina result cuando las expresiones son de tipo Boolean: Si expression es: True False El valor de result es: False True

En las expresiones numricas, el operador Not invierte los valores de bits de las expresiones numricas y establece el bit correspondiente en result de acuerdo con la siguiente tabla: Si el bit de expression es: 1 0 El bit de result es: 0 1

Tipos de datos En una negacin booleana, el tipo de datos del resultado es Boolean. En una negacin bit a bit, el tipo de datos del resultado es el mismo que el de expression. Sin embargo, si la expresin es Decimal, el resultado es Long. Sobrecarga El operador Not se puede sobrecargar, lo que significa que una clase o una estructura puede definir de nuevo su comportamiento cuando su operando tiene el tipo de dicha clase o estructura. Si el cdigo utiliza este operador en una clase o estructura de este tipo, asegrese de conocer su comportamiento redefinido. Para obtener ms informacin, vea Procedimientos de operador. Ejemplo En el ejemplo siguiente se utiliza el operador Not para llevar a cabo la negacin lgica de una expresin de tipo Boolean. El resultado es un valor Boolean que representa el inverso del valor de la expresin. Dim a AsInteger = 10 Dim b AsInteger = 8 Dim c AsInteger = 6 Dim firstCheck, secondCheck AsBoolean firstCheck = Not (a > b) secondCheck = Not (b > a) En el ejemplo anterior se generan los resultados False y True, respectivamente. En el ejemplo siguiente se utiliza el operador Not para llevar a cabo la negacin lgica de los bits individuales de una expresin numrica. El bit en el modelo resultante se establecer en el valor inverso del bit correspondiente en el modelo del operando, incluido el bit correspondiente al signo. Dim a AsInteger = 10 Dim b AsInteger = 8 Dim c AsInteger = 6 Dim firstPattern, secondPattern, thirdPattern AsInteger firstPattern = (Not a) secondPattern = (Not b) thirdPattern = (Not c)

En el ejemplo anterior se generan los resultados 11, 9 y 7, respectivamente. Nothing (Visual Basic) Representa el valor predeterminado de cualquier tipo de datos.

Descripcin Al asignar Nothing a una variable, se establece el valor predeterminado de su tipo declarado. Si ese tipo contiene miembros de variables, se establecen los valores predeterminados de todos ellos. Esto se ilustra en el siguiente ejemplo: Public Structure testStruct Public name As String Public number As Short End Structure Dim ts As testStruct, i As Integer, b As Boolean ts = Nothing ' The preceding statement sets ts.name to "" and ts.number to 0. i = Nothing b = Nothing ' The preceding statements set i to 0 and b to False. Si la variable es de un tipo de referencia, es decir, una variable de objeto; Nothing significa que la variable no est asociada a ningn objeto. En el siguiente ejemplo se muestra cmo. Dim testObject As Object testObject = Nothing ' The preceding statement sets testObject to not refer to any instance. Cuando se asigna Nothing a una variable de objeto, ya no hace referencia a una instancia de objeto. Si la variable anteriormente haca referencia a una instancia, establecer dicha instancia enNothing no causar la finalizacin de la misma. Slo despus de que el recolector de elementos no utilizados (GC) detecte que ya no hay referencias activas, la instancia finalizar, y la memoria y los recursos del sistema asociados con ella quedarn liberados. NotInheritable Especifica que una clase que no se puede utilizar como clase base. Descripcin Trminos alternativos. Una clase que no se puede heredar se denomina en ocasiones clase sellada. El modificador NotInheritable se puede utilizar en este contexto: Instruccin Class (Visual Basic) ............................................................................................................................................................... NotOverridable Especifica que una propiedad o un procedimiento no se puede reemplazar en una clase derivada.

Descripcin NotOverridable es el valor predeterminado de un procedimiento o propiedad que no reemplaza por s mismo a un procedimiento o propiedad de clase base. Un elemento que no se puede reemplazar se denomina en ocasiones elemento sellado. Reglas Contexto de la declaracin. Slo puede utilizarse NotOverridable en una propiedad o instruccin de declaracin de procedimiento. Slo puede especificar NotOverridable en una propiedad o procedimiento que reemplaza otra propiedad o procedimiento, es decir, slo en combinacin con Overrides. Modificadores combinados. No se puede especificar NotOverridable junto con MustOverride, Overridable o Shared en la misma declaracin. El modificador NotOverridable se puede utilizar en estos contextos: Instruccin Function (Visual Basic) Property (Instruccin) Instruccin Sub (Visual Basic) Object (Tipo de datos) Contiene direcciones de 32 bits (4 bytes) que hacen referencia s objetos. Se puede asignar cualquier tipo de referencia (cadena, matriz, clase o interfaz) a una variable Object. Una variableObject tambin puede hacer referencia a datos de cualquier tipo de valor (numrico, Boolean, Char, Date, estructura o enumeracin). Descripcin El tipo de datos Object puede sealar a datos de cualquier tipo de datos, incluso cualquier instancia de objeto que su aplicacin reconozca. Utilice Object cuando en tiempo de compilacin no conoce a qu tipo de datos puede sealar la variable. El valor predeterminado de Object es Nothing (una referencia nula). Tipos de datos Puede asignar una variable, constante o expresin de cualquier tipo de datos a una variable Object. Para determinar el tipo de datos a los que hace referencia actualmente una variableObject, puede utilizar el mtodo GetTypeCode de la clase System.Type. Esto se ilustra en el siguiente ejemplo: Dim myObject As Object ' Suppose myObject has now had something assigned to it. Dim datTyp As Integer datTyp = Type.GetTypeCode(myObject.GetType())

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 datos de un tipo de valor. Almacenamiento Independientemente del tipo de datos al que haga referencia, una variable Object no contiene el valor de datos en s, sino un puntero al valor. Siempre utiliza cuatro bytes en la memoria del sistema, pero sin incluir el almacenamiento para los datos que representan el valor de la variable. Debido al cdigo que el puntero utiliza para buscar los datos, las variables Object que contienen tipos de valor son de acceso un poco ms lento que las variables que tienen un tipo explcito. Sugerencias de programacin Consideraciones sobre interoperabilidad. Si trabaja con componentes no escritos para .NET Framework, por ejemplo objetos de automatizacin o COM, recuerde que los tipos de puntero de otros entornos no son compatibles con el tipo Object de Visual Basic. Rendimiento. Una variable que declara con el tipo Object es bastante flexible para contener una referencia a cualquier objeto. Sin embargo, cuando invoca un mtodo o propiedad en este tipo de variable, se produce siempre el enlace en tiempo de ejecucin. Para forzar el enlace en tiempo de compilacin y un mejor rendimiento, declare la variable con un nombre de clase especfico o convirtala en el tipo de datos especfico. Cuando declara una variable de objeto, intente utilizar un tipo de clase concreto, por ejemplo OperatingSystem, en lugar del tipo Object generalizado. Tambin es preferible utilizar la clase ms especfica disponible, como TextBox en lugar de Control, as podr tener acceso a sus propiedades y mtodos. Normalmente puede utilizar la lista Clases del Examinador de objetos para buscar nombres de clase disponibles. Ampliacin. Todos los tipos de datos y todos los tipos de referencia se amplan al tipo de datos Object. Esto significa que se puede convertir cualquier tipo a Object sin encontrar un error System.OverflowException. Sin embargo, si convierte entre tipos de valor y Object, Visual Basic realiza unas operaciones llamadas conversin boxing y conversin unboxing, que ralentizan la ejecucin. Caracteres de tipo.Object no tiene ningn carcter de tipo de literal o de tipo de identificador. Tipo de Framework. El tipo correspondiente en .NET Framework es la clase System.Object. Ejemplo El ejemplo siguiente ilustra una variable Object que seala a una instancia de objeto. Dim objDb As Object Dim myCollection As New Collection() ' Suppose myCollection has now been populated. objDb = myCollection.Item(1)

Of Introduce una clusula Of que identifica un parmetro de tipo en una clase, estructura, interfaz, delegado o procedimiento genricos. Para obtener informacin sobre tipos genricos. Utilizar la palabra clave Of El ejemplo de cdigo siguiente utiliza la palabra clave Of para definir el contorno de una clase que acepta dos parmetros de tipo. Restringe el parmetro keyType mediante la interfazIComparable, lo que significa que el cdigo utilizado debe proporcionar un argumento de tipo que implemente IComparable. Esto es necesario para que el procedimiento add pueda llamar al mtodo System.IComparable.CompareTo(System.Object). Para obtener ms informacin sobre restricciones, vea Lista de tipos. Public Class Dictionary(Of entryType, keyType As IComparable) Public Sub add(ByVal e As entryType, ByVal k As keyType) Dim dk As keyType If k.CompareTo(dk) = 0 Then End If End Sub Public Function find(ByVal k As keyType) As entryType End Function End Class Si finaliza la definicin de la clase anterior, puede construir una variedad de clases dictionary a partir de ella. Los tipos que proporciona a entryType y keyType determinan qu tipo de entrada contiene la clase y qu tipo de clave asocia con cada entrada. Debido a la restriccin, debe proporcionar a keyType un tipo que implemente IComparable. El ejemplo de cdigo siguiente crea un objeto que contiene entradas String y asocia una clave Integer a cada una de ellas. Integer implementa IComparable y satisface de este modo la restriccin de keyType. Dim d As New dictionary(Of String, Integer) La palabra clave Of se puede utilizar en estos contextos: Class (Instruccin) Delegate (Instruccin) Function (Instruccin) Interface (Instruccin) Structure (Instruccin) Sub (Instruccin) On Presenta una respuesta a un error en tiempo de ejecucin o activa una opcin del compilador.

Descripcin La palabra clave On se utiliza en estos contextos: On Error (Instruccin) Option Explicit (Instruccin) Option Strict (Instruccin) Operator (Instruccin) Declara el smbolo de operador, los operandos y el cdigo que definen un procedimiento de operador en una clase o estructura.

[ <attrlist> ] Public [ Overloads ] Shared [ Shadows ] [ Widening | Narrowing ] Operator operatorsymbol ( operand1 [, operand2 ]) [ As [ <attrlist> ] type ] [ statements ] [ statements ] Return returnvalue [ statements ] End Operator Partes attrlist Opcional. Ver la Lista de atributos. Public Obligatorio. Indica que este procedimiento de operador tiene acceso de tipo Public (Visual Basic). Overloads Opcional. Ver Overloads. Shared Obligatorio. Indica que este procedimiento de operador es de tipo Shared (Visual Basic). Shadows Opcional. Ver Shadows. Widening

Se requiere para un operador de conversin a menos que especifique Narrowing. Indica que este procedimiento de operador define una conversin de tipo Widening. Vea "Conversiones de ampliacin y restriccin" en esta pgina de Ayuda. Narrowing Se requiere para un operador de conversin a menos que especifique Widening. Indica que este procedimiento de operador define una conversin de tipo Narrowing. Ver "Conversiones de ampliacin y restriccin" en esta pgina de Ayuda. operatorsymbol Obligatorio. El smbolo o identificador del operador que define este procedimiento de operador. operand1 Obligatorio. El nombre y tipo del operando nico de un operador unario (incluido un operador de conversin) o el operando izquierdo de un operador binario. operand2 Obligatorio para los operadores binarios. El nombre y tipo del operando derecho de un operador binario. operand1 y operand2 tienen la sintaxis y las partes siguientes: [ ByVal ] operandname [ As operandtype ] Parte ByVal Descripcin Opcional, pero el mecanismo para pasar argumentos debe ser ByVal.

operandname Obligatorio. Nombre de la variable que representa este operando. Vea Nombres de elementos declarados. operandtype type Opcional a menos que Option Strict est establecido en On. Tipos de datos del valor que devuelve el procedimiento de operador. statements Opcional. Bloquee de instrucciones que ejecuta el procedimiento de operador. returnvalue Obligatorio. El valor que el procedimiento de operador devuelve al cdigo de llamada. Opcional a menos que Option Strict est establecido en On. Tipo de datos de este operando.

EndOperator Obligatorio. Termina la definicin de este procedimiento de operador. Descripcin Slo puede utilizar Operator en una clase o una estructura. Esto significa que el contexto de declaracin de un operador no puede ser un archivo de cdigo fuente, espacio de nombres, mdulo, interfaz, procedimiento o bloque. Para obtener ms informacin, vea Contextos de declaracin y niveles de acceso predeterminados. Todos los operadores deben ser de tipo Public Shared. No puede especificar ByRef, Optional o ParamArray en ningn operando. No puede utilizar el smbolo o identificador de operador para incluir un valor devuelto. Debe utilizar la instruccin Return y debe especificar un valor. Puede aparecer cualquier nmero de instrucciones Return en cualquier lugar de un procedimiento. La definicin de un operador de esta manera se denomina sobrecarga de operadores, independientemente de si utiliza la palabra clave Overloads. En la siguiente tabla se muestran los operadores que se pueden definir. Tipo Unario Binary Conversin (unario) Operadores +, -, IsFalse, IsTrue, Not +, -, *, /, \, &, ^, >>, <<, =, <>, >, >=, <, <=, And, Like, Mod, Or, Xor CType

Observe que el operador = en la lista binaria es el operador de comparacin, no el operador de asignacin. Cuando define CType, debe especificar Widening o Narrowing. Pares correspondientes Debe definir ciertos operadores como pares correspondientes. Si define un operador de este tipo, tambin debe definir el otro. Los pares correspondientes son los siguientes: = y <> >y< >= y <= IsTrue y IsFalse Restricciones de tipos de datos Cada operador que define debe implicar la clase o estructura donde lo define. Esto significa que la clase o estructura debe aparecer como tipo de datos de los elementos siguientes: El operando de un operador unario.

Al menos uno de los operandos de un operador binario. El operando o el tipo de valor devuelto de un operador de conversin. Ciertos operadores tienen restricciones adicionales de tipo de datos, como las siguientes: Si define los operadores IsTrue y IsFalse, ambos deben devolver el tipo Boolean. Si define los operadores << y >>, ambos deben especificar el tipo Integer en operandtype y operand2. El tipo de valor devuelto no tiene que corresponder con el tipo de un operando. Por ejemplo, un operador de comparacin como = o <> puede devolver un valor de tipo Boolean aunque ninguno de los operandos sea de tipo Boolean. Operadores lgicos y bit a bit Los operadores And, Or, Not y Xor pueden realizar operaciones bit a bit o lgicas en Visual Basic. Sin embargo, si define uno de estos operadores en una clase o estructura, slo puede definir su operacin bit a bit. No puede definir directamente el operador AndAlso con una instruccin Operator. Sin embargo, puede utilizar AndAlso si ha cumplido las condiciones siguientes: Ha definido And en los mismos tipos de operando que desea utilizar para AndAlso. Su definicin de And devuelve el mismo tipo que la clase o estructura donde lo ha definido. Ha definido el operador IsFalse en la clase o estructura donde ha definido And. De la misma forma, puede utilizar OrElse si ha definido Or en los mismos operandos, con el tipo de valor devuelto de la clase o estructura, y ha definido IsTrue en la clase o estructura. Conversiones de ampliacin y de restriccin Una conversin de ampliacin siempre es correcta en tiempo de ejecucin, mientras que una conversin de restriccin puede generar un error en tiempo de ejecucin. Para obtener ms informacin, vea Conversiones de ampliacin y de restriccin. Si declara un procedimiento de conversin de tipo Widening, su cdigo de procedimiento no debe generar ningn error. Esto significa lo siguiente: Siempre debe devolver un valor vlido de tipo type. Debe controlar todas las excepciones posibles y otras condiciones de error. Debe controlar cualquier retorno del error de cualquier procedimiento al que llama. Si existe alguna posibilidad de que un procedimiento de conversin genere un error o una excepcin no controlada, debe declararlo de tipo Narrowing. Ejemplo En el ejemplo de cdigo siguiente se utiliza la instruccin Operator para definir el esquema de una estructura que incluye procedimientos de operador para los operadores And, Or, IsFalsee IsTrue. And y Or utilizan dos operandos de tipo abc y devuelven un valor de tipo abc. IsFalse e IsTrue utilizan un nico operando de tipo abc y devuelven un valor de

tipo Boolean. Estas definiciones permiten al cdigo de llamada utilizar And, AndAlso, Or y OrElse con operandos de tipo abc. PublicStructure abc Dim d AsDate PublicShared Operator And(ByVal x As abc, ByVal y As abc) As abc Dim r AsNew abc ' Insert code to calculate And of x and y. Return r End Operator PublicShared Operator Or(ByVal x As abc, ByVal y As abc) As abc Dim r AsNew abc ' Insert code to calculate Or of x and y. Return r End Operator PublicShared Operator IsFalse(ByVal z As abc) AsBoolean Dim b AsBoolean ' Insert code to calculate IsFalse of z. Return b End Operator PublicShared Operator IsTrue(ByVal z As abc) AsBoolean Dim b AsBoolean ' Insert code to calculate IsTrue of z. Return b End Operator EndStructure .. Option (Visual Basic) Presenta una instruccin que especifica una opcin del compilador que se aplica al archivo de cdigo fuente completo. Descripcin Las opciones del compilador pueden controlar si deben declararse de forma explcita todas las variables, si las conversiones de ampliacin de tipos deben ser explcitas o si las cadenas deben compararse como texto o como cantidades binarias. La palabra clave Option se puede utilizar en estos contextos: Option Compare (Instruccin) Instruccin Option Explicit (Visual Basic) Option Strict (Instruccin) Optional (Visual Basic) Especifique que se puede omitir un argumento de procedimiento cuando se llama al procedimiento.

Descripcin El modificador Optional se puede utilizar en estos contextos: Declare (Instruccin) Function (Instruccin) Property (Instruccin) Sub (Instruccin) Or (Operador, Visual Basic) Realiza una disyuncin lgica entre dos expresiones de tipo Boolean o bien una disyuncin bit a bit entre dos expresiones numricas. result = expression1 Or expression2 Partes result Obligatorio. Cualquier expresin numrica o de tipo Boolean. Para la comparacin Boolean, result es la disyuncin lgica inclusiva de dos valores Boolean. Para las operaciones bit a bit, result es un valor numrico que representa la disyuncin bit a bit inclusiva de dos modelos de bits numricos. expression1 Obligatorio. Cualquier expresin numrica o de tipo Boolean. expression2 Obligatorio. Cualquier expresin numrica o de tipo Boolean. Descripcin Para la comparacin Boolean, result es False si y slo si expression1 y expression2 se evalan como False. La tabla siguiente ilustra cmo se determina el argumento result. Si expression1 es: True True False False Y expression2 es True False True False El valor de result es True True True False

Para operaciones bit a bit, el operador Or realiza una comparacin bit a bit de los bits ubicados de manera idntica en dos expresiones numricas y establece el bit correspondiente enresult de acuerdo con la siguiente tabla. Si el bit de expression1 es... 1 1 0 0 Tipos de datos Si los operandos constan de una expresin Boolean y una expresin numrica, Visual Basic convierte la expresin Boolean a un valor numrico (1 para True y 0 para False), y realiza una operacin bit a bit. Para una comparacin Boolean, el tipo de datos del resultado es Boolean. Para una comparacin bit a bit, el tipo de datos del resultado es un tipo numrico 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 operador. Sobrecarga El operador Or se puede sobrecargar, lo que significa que una clase o una estructura pueden definir de nuevo su comportamiento cuando un operando tiene el tipo de dicha clase o estructura. Si el cdigo utiliza este operador en una clase o estructura de este tipo, asegrese de conocer su comportamiento redefinido. Para obtener ms informacin, vea Procedimientos de operador. Ejemplo En el ejemplo siguiente se usa el operador Or para realizar una disyuncin lgica inclusiva entre dos expresiones. El resultado ser un valor de tipo Boolean que indicar si alguna de las dos expresiones es True. Dim a AsInteger = 10 Dim b AsInteger = 8 Dim c AsInteger = 6 Dim firstCheck, secondCheck, thirdCheck AsBoolean firstCheck = a > b Or b > c secondCheck = b > a Or b > c thirdCheck = b > a Or c > b Y el bit de expression2 es... 1 0 1 0 El bit de result es... 1 1 1 0

El ejemplo anterior genera unos resultados de True, True y False, respectivamente. En el ejemplo siguiente se usa el operador Or para realizar una disyuncin lgica inclusiva entre cada uno de los bits de dos expresiones numricas. El bit en el modelo resultante se establece si uno de los bits correspondientes de los operandos se ha establecido en 1.

Dim a AsInteger = 10 Dim b AsInteger = 8 Dim c AsInteger = 6 Dim firstPattern, secondPattern, thirdPattern AsInteger firstPattern = (a Or b) secondPattern = (a Or c) thirdPattern = (b Or c) El ejemplo anterior genera unos resultados de 10, 14 y 14, respectivamente. OrElse (Operador) Realiza una disyuncin lgica inclusiva "cortocircuitada" en dos expresiones.

result = expression1 OrElse expression2

Partes result Obligatorio. Cualquier expresin de tipo Boolean. expression1 Obligatorio. Cualquier expresin de tipo Boolean. expression2 Obligatorio. Cualquier expresin de tipo Boolean. Descripcin Se dice que una operacin lgica se encuentra cortocircuitada si el cdigo compilado puede omitir la evaluacin de una expresin en funcin del resultado de otra. Si el resultado de la primera expresin evaluada determina el resultado final de la operacin, no es necesario evaluar la segunda expresin, ya que no cambiar el resultado final. La evaluacin cortocircuitada puede mejorar el rendimiento si la expresin omitida es compleja o si implica llamadas de procedimiento. Si una o ambas expresiones se evalan como True, result es True. La tabla siguiente ilustra cmo se determina el argumento result. Si expression1 es: True False Y expression2 es (no se evala) True El valor de result es True True

False Tipos de datos

False

False

El operador OrElse slo se define para Boolean (Tipo de datos, Visual Basic). Visual Basic convierte cada operando tal como sea necesario en Boolean y realiza toda la operacin enBoolean. Si asigna el resultado a un tipo numrico, Visual Basic lo convierte de Boolean a ese tipo. Esto podra generar un comportamiento inesperado. Por ejemplo, 5 OrElse 12 tiene como resultado 1 cuando se convierte en Integer. Sobrecarga Or (Operador, Visual Basic) e IsTrue (Operador) se pueden sobrecargar, lo que significa que una clase o estructura puede definir de nuevo su comportamiento cuando un operando tiene el tipo de dicha clase o estructura. La sobrecarga de los operadores Or e IsTrue afecta al comportamiento del operador OrElse. Si el cdigo utiliza OrElse en una clase o estructura que sobrecarga Or e IsTrue, asegrese de conocer su comportamiento redefinido. Para obtener ms informacin, vea Procedimientos de operador. Ejemplo En el ejemplo siguiente se usa el operador OrElse para realizar una disyuncin lgica entre dos expresiones. El resultado ser un valor de tipo Boolean que indicar si alguna de las dos expresiones es verdadera (True). Si la primera expresin es True, la segunda no ser evaluada. Dim a AsInteger = 10 Dim b AsInteger = 8 Dim c AsInteger = 6 Dim firstCheck, secondCheck, thirdCheck AsBoolean firstCheck = a > b OrElse b > c secondCheck = b > a OrElse b > c thirdCheck = b > a OrElse c > b

El ejemplo anterior genera unos resultados de True, True y False, respectivamente. En el clculo de firstCheck, no se evala la segunda expresin porque la primera ya es True. Sin embargo, la segunda expresin se evala en el clculo de secondCheck. En el ejemplo siguiente se muestra la instruccin If...Then que contiene dos llamadas a procedimientos. Si la primera llamada devuelve True, no se llama al segundo procedimiento. Esto puede generar resultados inesperados si el segundo procedimiento realiza tareas importantes que se deben realizar siempre que se ejecute esta seccin del cdigo. If testFunction(5) = TrueOrElse otherFunction(4) = TrueThen ' If testFunction(5) is True, otherFunction(4) is not called. ' Insert code to be executed. EndIf

Overloads Especifica que una propiedad o procedimiento vuelve a declarar una o varias propiedades o procedimientos existentes con el mismo nombre. Descripcin Sobrecarga es la prctica de proporcionar ms de una definicin para una propiedad o nombre de procedimiento determinados en el mismo mbito. La nueva declaracin de una propiedad o un procedimiento con una firma diferente se llama a veces ocultacin por firma. Reglas Contexto de la declaracin. Slo puede utilizarse Overloads en una propiedad o instruccin de declaracin de procedimiento. Modificadores combinados. No se puede especificar Overloads junto con Shadows en la misma declaracin de procedimiento. Diferencias requeridas. La firma en esta declaracin debe ser diferente de la firma de cada propiedad o procedimiento que sobrecarga. La firma comprende la propiedad o el nombre de procedimiento junto con lo siguiente: el nmero de parmetros el orden de los parmetros los tipos de datos de los parmetros el nmero de parmetros de tipo (para un procedimiento genrico) el tipo de valor devuelto (slo para un procedimiento de operador de conversin) Todas las sobrecargas deben tener el mismo nombre pero cada una debe diferir de todas las dems en una o varias de las consideraciones anteriores. Esto permite al compilador distinguir qu versin debe utilizar cuando el cdigo llama a la propiedad o al procedimiento. Diferencias no permitidas. No est permitido cambiar uno o varios de los siguientes elementos 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 conversin) los nombres de los parmetros o parmetros de tipo las restricciones de los parmetros de tipo (para un procedimiento genrico) las palabras clave de modificadores de parmetros (como ByRef o Optional) las palabras clave de modificadores de propiedades o procedimientos (como Public o Shared) Modificador opcional. No es necesario utilizar el modificador Overloads cuando se definen 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 tambin se puede utilizar para sombrear un miembro existente o un conjunto de miembros sobrecargados, en una clase base. Cuando se utilizaOverloads de esta forma, se declara la propiedad o el mtodo con el mismo nombre y la misma lista de parmetros que el miembro de clase base, y no se proporciona la palabra clave Shadows. El modificador Overloads se puede utilizar en estos contextos: Function (Instruccin) Operator (Instruccin)

Property (Instruccin) Sub (Instruccin) .... Overridable Especifica que una propiedad o procedimiento se puede reemplazar por una propiedad o procedimiento con nombre idntico de una clase derivada. Comentarios Overridable es el valor predeterminado de un procedimiento o propiedad que reemplaza a un procedimiento o propiedad de clase base. El sombreado y el reemplazo definen de nuevo un elemento heredado, pero hay diferencias significativas entre los dos enfoques. Para obtener ms informacin, vea Sombrear en Visual Basic. Un elemento que se puede reemplazar se denomina en ocasiones elemento virtual. Si se puede reemplazar, pero no tiene que reemplazarse, en ocasiones tambin se denomina elementoconcreto. Reglas Contexto de la declaracin. Slo puede utilizarse Overridable en una propiedad o instruccin de declaracin de procedimiento. Modificadores combinados. No se puede especificar Overridable junto con MustOverride, NotOverridable o Shared en la misma declaracin. Dado que un elemento de reemplazo es implcitamente reemplazable, no puede combinar Overridable con Overrides. El modificador Overridable se puede utilizar en estos contextos: Instruccin Function (Visual Basic) Property (Instruccin) Instruccin Sub (Visual Basic) Overrides Establece que una propiedad o procedimiento reemplaza una propiedad o un procedimiento especficos heredados de una clase base. Descripcin Reglas Contexto de declaracin. Slo pude utilizarse Overrides en una instruccin de declaracin de procedimiento o propiedad.

Modificadores combinados. No se puede especificar Overrides junto con Shadows o Shared en la misma declaracin. Dado que un elemento de reemplazo es reemplazable de forma implcita, no se puede combinar Overridable con Overrides. Coincidencia de firmas. La firma de esta declaracin debe coincidir exactamente con la firma de la propiedad o procedimiento que reemplaza. Esto significa que las listas de parmetros deben tener el mismo nmero de parmetros, en el mismo orden, con los mismos tipos de datos. Adems de la firma, la declaracin de reemplazo tambin debe coincidir exactamente con los siguientes elementos: El nivel de acceso El tipo de valor devuelto, si lo hubiese Firmas genricas. En un procedimiento genrico, la firma incluye el nmero de parmetros de tipo. Por tanto, la declaracin de reemplazo debe coincidir tambin en esto con la versin de la clase base. Coincidencia adicional. Adems de coincidir con la firma de la versin de la clase base, esta declaracin debe coincidir tambin en lo siguiente: Modificador de nivel de acceso (como Public (Visual Basic)) Mecanismo para pasar argumentos de cada parmetro (ByVal o ByRef) Listas de restricciones de cada parmetro de tipo de un procedimiento genrico Sombreado y reemplazo. El sombreado y el reemplazo definen de nuevo un elemento heredado, pero existen diferencias significativas entre los dos enfoques. Para obtener ms informacin, vea Sombrear en Visual Basic. El modificador Overrides se puede utilizar en estos contextos: Function (Instruccin) Property (Instruccin) Sub (Instruccin) ParamArray Especifica que el parmetro de un procedimiento toma una matriz opcional de elementos del tipo especificado. ParamArray slo se puede utilizar como el ltimo parmetro de una lista de parmetros. Descripcin ParamArray permite pasar al procedimiento un nmero arbitrario de argumentos. Un parmetro ParamArray siempre se declara mediante ByVal. Puede proporcionar uno o ms argumentos en un parmetro ParamArray pasando una matriz del tipo de datos adecuado, una lista de valores separados por comas o nada en absoluto. Para obtener ms detalles, vea "Llamar a un lista de parmetros" en Matrices de parmetros. Nota de seguridad Si se trabaja con matrices cuyo tamao es excesivamente grande, existe el riesgo de sobrecargar alguna capacidad interna de la aplicacin. Si acepta una matriz de parmetro del cdigo de llamada, debe

comprobar su longitud y llevar a cabo los pasos necesarios si es demasiado grande para la aplicacin. El modificador ParamArray se puede utilizar en estos contextos: Declare (Instruccin) Instruccin Function (Visual Basic) Property (Instruccin) Instruccin Sub (Visual Basic) Partial (Visual Basic) Indica que la declaracin de una clase o una estructura es una definicin parcial de dicha clase o estructura. [ <attrlist> ] [ accessmodifier ] [ Shadows ] [ MustInherit | NotInheritable ] _ Partial { Class | Structure } name [ (Of typelist) ] [ Inherits classname ] [ Implements interfacenames ] [ variabledeclarations ] [ proceduredeclarations ] { End Class | End Structure } Partes attrlist Opcional. Lista de atributos que se aplica a esta clase o estructura. Debe incluir la Lista de atributos entre corchetes angulares (<>). accessmodifier Opcional. Especifica qu cdigo puede tener acceso a esta clase o estructura. Vea Niveles de acceso en Visual Basic. Shadows Opcional. Vea Shadows. MustInherit Opcional. Vea MustInherit. NotInheritable Opcional. Vea NotInheritable. name

Obligatoria. Nombre de esta clase o estructura. Debe coincidir con el nombre definido en todas las dems declaraciones parciales de la misma clase o estructura. Of Opcional. Especifica que se trata de una estructura o clase genrica. Vea Tipos genricos en Visual Basic. typelist Es obligatoria si se utiliza Of. Vea Lista de tipos. Inherits Opcional. Vea Inherits (Instruccin). classname Es obligatoria si se utiliza Inherits. Nombre de la clase o interfaz de la que se deriva esta clase. Implements Opcional. Vea Implements (Instruccin). interfacenames Es obligatoria si se utiliza Implements. Nombres de las interfaces implementadas por esta clase o estructura. variabledeclarations Opcional. Instrucciones que declaran eventos y variables adicionales para la clase o estructura. proceduredeclarations Opcional. Instrucciones que declaran y definen procedimientos adicionales para la clase o estructura. End Class o End Structure Finaliza esta definicin parcial de Class o Structure. Descripcin Puede dividir la definicin de una clase o estructura en varias declaraciones con la palabra clave Partial. Puede utilizar tantas declaraciones parciales como desee en tantos archivos de cdigo fuente diferentes como sea necesario. Sin embargo, todas las declaraciones deben estar en el mismo ensamblado y el mismo espacio de nombres.

Nota Visual Basic utiliza definiciones de clase parciales para separar el cdigo generado del cdigo creado por el usuario en archivos de cdigo fuente distintos. Por ejemplo, el Diseador de Windows Forms define clases parciales para los controles, como Form. No debera modificar el cdigo generado de estos controles. En circunstancias normales, no debera dividir el desarrollo de una nica clase o estructura en dos o ms declaraciones. Por tanto, en la mayora de los casos no necesitar la palabra clavePartial. Todas las reglas de creacin de clases y estructuras, como por ejemplo las reglas de herencia y utilizacin de modificadores, se aplican cuando se crea una clase o una estructura parcial. Procedimientos recomendados Utilizacin de palabras clave. Por motivos de legibilidad, cada declaracin parcial de una clase o estructura debera incluir la palabra clave Partial. El compilador nicamente permite que se omita la palabra clave en una sola declaracin parcial; si se omite en dos o ms declaraciones parciales, el compilador indicar un error. Comportamiento Unin de declaraciones. El compilador trata la clase o estructura como la unin de todas sus declaraciones parciales. Todos los modificadores de cada definicin parcial se aplican a toda la clase o estructura, y todos los miembros de cada definicin parcial estn disponibles en toda la clase o estructura. La promocin de tipos no est permitida para tipos parciales en mdulos. Si una definicin parcial est dentro de un mdulo, la promocin de tipos de esa clase o estructura se rechaza automticamente. En este caso, un conjunto de definiciones parciales puede producir resultados inesperados e incluso errores del compilador. Para obtener ms informacin, vea Promocin de tipos. El compilador slo combina las definiciones parciales cuando sus rutas vlidas son idnticas. La palabra clave Partial se puede utilizar en estos contextos: Class (Instruccin) Structure (Instruccin) Ejemplo En el ejemplo siguiente se divide la definicin de la clase sampleClass en dos declaraciones, cada una de las cuales define un procedimiento Sub diferente. PartialPublicClass sampleClass PublicSub sub1() EndSub EndClass PartialPublicClass sampleClass PublicSub sub2() EndSub EndClass

Las dos definiciones parciales del ejemplo anterior podran estar en el mismo archivo de cdigo fuente o en dos archivos de cdigo fuente diferentes. Private (Visual Basic) Especifica que slo se puede tener acceso a uno o varios elementos de programacin declarados desde el contexto de la declaracin, incluidos todos los tipos que contiene. Descripcin Si un elemento de programacin representa la funcionalidad de propiedad o contiene datos confidenciales, por lo general desear limitar el acceso a este elemento con toda la rigurosidad que sea posible. Para alcanzar la limitacin mxima, permita nicamente que el mdulo, la clase o la estructura que define el elemento tenga acceso a este elemento. Para limitar el acceso a un elemento de este modo, puede declararlo con Private. Reglas Contexto de declaracin. Slo puede utilizar Private en el nivel de mdulo. Esto significa que el contexto de la declaracin de un elemento Private debe ser un mdulo, una clase o una estructura, y no un archivo de cdigo fuente, un espacio de nombres, una interfaz o un procedimiento. Comportamiento Nivel de acceso. Todo el cdigo de un contexto de declaracin puede tener acceso a sus elementos Private. Esto incluye el cdigo del tipo contenido, por ejemplo una clase anidada o una expresin de asignacin de una enumeracin. Ningn cdigo fuera del contexto de declaracin puede tener acceso a sus elementos Private. Modificadores de acceso. Las palabras clave que especifican el nivel de acceso se denominan modificadores de acceso. Encontrar una comparacin de los modificadores de acceso en Niveles de acceso en Visual Basic. El modificador Private se puede utilizar en estos contextos: Class (Instruccin) Const (Instruccin) Declare (Instruccin) Delegate (Instruccin) Dim (Instruccin) Enum (Instruccin) Event (Instruccin) Function (Instruccin) Interface (Instruccin) Property (Instruccin) Structure (Instruccin) Sub (Instruccin)

Property (Instruccin) Declara el nombre de una propiedad y los procedimientos de propiedades que se utilizan para almacenar y recuperar el valor de la propiedad. [ <attributelist> ] [ Default ] [ accessmodifier ] [ propertymodifiers ] [ Shared ] [ Shadows ] [ ReadOnly | WriteOnly ] Property name ( [ parameterlist ] ) [ As returntype ] [ Implements implementslis t ] [ <attributelist> ] [ accessmodifier ] Get [ statements ] End Get [ <attributelist> ] [ accessmodifier ] Set ( ByVal value As returntype [, pa rameterlist ] ) [ statements ] End Set End Property Partes attributelist Opcional. Lista de atributos aplicables a esta propiedad o procedimiento Get o Set. Vea Lista de atributos. Default Opcional. Especifica que esta propiedad es la propiedad predeterminada para la clase o estructura en que est definida. Las propiedades predeterminadas deben aceptar parmetros y se pueden establecer y recuperar sin especificar el nombre de la propiedad. Si declara la propiedad como Default, no puede utilizar Private en la propiedad ni en ninguno de sus procedimientos de propiedad. accessmodifier Opcional en la instruccin Property y en a lo sumo una de las instrucciones Get y Set. Puede ser una de las siguientes: Public Protected Friend Private Protected Friend Vea Niveles de acceso en Visual Basic. propertymodifiers Opcional. Puede ser una de las siguientes:

Overloads Overrides Overridable NotOverridable MustOverride MustOverride Overrides NotOverridable Overrides Shared Opcional. Vea Shared (Visual Basic). Shadows Opcional. Vea Shadows. ReadOnly Opcional. Vea ReadOnly (Visual Basic). WriteOnly Opcional. Vea WriteOnly. name Obligatorio. Nombre de la propiedad. Vea Nombres de elementos declarados. parameterlist Opcional. Lista de nombres de variable local que representan los parmetros de esta propiedad y posibles parmetros adicionales del procedimiento Set. Vea Lista de parmetros. returntype Obligatorio si OptionStrict es On. Tipos de datos del valor devuelto por esta propiedad. Implements Opcional. Indica que esta propiedad implementa una o ms propiedades, cada una de ellas definida en una interfaz implementada por la clase o estructura contenedora de esta propiedad. Vea Implements (Instruccin). implementslist Requerido si se suministra Implements. Lista de las propiedades que se implementan. implementedproperty [ , implementedproperty ... ]

Cada implementedproperty tiene la sintaxis y las partes siguientes: interface.definedname Parte interface Descripcin Obligatorio. Nombre de una interfaz implementada por la clase o estructura contenedora de esta propiedad.

definedname Obligatorio. Nombre por el que se define la propiedad en interface. Get Obligatorio a menos que la propiedad est marcada como WriteOnly. Inicia un procedimiento de propiedad Get que se utiliza para devolver el valor de la propiedad. statements Opcional. Bloque de las instrucciones que se deben ejecutar dentro del procedimiento Get o Set. End Get Termina el procedimiento de propiedad Get. Set Obligatorio a menos que la propiedad est marcada como ReadOnly. Inicia un procedimiento de propiedad Set que se utiliza para almacenar el valor de la propiedad. End Set Termina el procedimiento de propiedad Set. End Property Termina la definicin de esta propiedad. Descripcin La instruccin Property introduce la declaracin de una propiedad. Una propiedad puede tener un procedimiento Get (slo lectura), un procedimiento Set (slo escritura), o ambos (de lectura y escritura). Slo puede utilizar Property en el nivel de mdulo. Esto significa que el contexto de declaracin de una propiedad debe ser una clase, estructura, mdulo o interfaz, y no un archivo de cdigo fuente, un espacio de nombres, un procedimiento ni un bloque. Para obtener ms informacin, vea Contextos de declaracin y niveles de acceso predeterminados. Las propiedades tienen como valor predeterminado el acceso pblico. Puede ajustar el nivel de acceso de una propiedad mediante un modificador de acceso de la instruccin Property y,

opcionalmente, ajustar uno de sus procedimientos de propiedad en un nivel de acceso ms restrictivo. Visual Basic pasa un parmetro al bloque Set durante las asignaciones de propiedades. Si no se especifica un parmetro para Set, el entorno de desarrollo integrado (IDE) utiliza un parmetro implcito denominado value. Este parmetro contiene el valor que se va a asignar a la propiedad. Normalmente, este valor se almacena en una variable local privada y lo devuelve cada vez que se llama al procedimiento Get. Reglas Niveles de acceso mixto. Si est definiendo una propiedad de lectura y escritura, tiene la opcin de especificar un nivel de acceso distinto para el procedimiento Get o para el procedimiento Set, pero no para ambos. Si as lo hace, el nivel de acceso del procedimiento debe ser ms restrictivo que el nivel de acceso de la propiedad. Por ejemplo, si la propiedad se declara como Friend, puede declarar el procedimiento Set como Private, pero no como Public. Si est definiendo una propiedad ReadOnly o WriteOnly, el procedimiento de propiedad nico (Get o Set, respectivamente) representa toda la propiedad. No puede declarar un nivel de acceso diferente para este tipo de procedimiento, porque se estableceran dos niveles de acceso para la propiedad. Tipo de valor devuelto. La instruccin Property puede declarar el tipo de datos del valor que devuelve. Puede especificar cualquier tipo de datos o el nombre de una enumeracin, estructura, clase o interfaz. Si no especifica returntype, la propiedad devuelve Object. Implementacin. Si esta propiedad utiliza la palabra clave Implements, la clase o estructura contenedora deben tener una instruccin Implements que sigue inmediatamente a su instruccin Class o Structure. La instruccin Implements debe incluir cada interfaz especificada en implementslist. Sin embargo, el nombre con el que una interfaz define la Property(en definedname) no tiene por qu ser el mismo que el nombre de esta propiedad (en name). Comportamiento Volver de un procedimiento de propiedad. Cuando el procedimiento Get o Set vuelve al cdigo que realiza la llamada, la ejecucin contina con la instruccin siguiente a la instruccin que la llam. Las instrucciones Exit Property y Return provocan una salida inmediata de un procedimiento de propiedad. Puede aparecer cualquier cantidad de instrucciones Exit Property yReturn en cualquier parte del procedimiento, y se puede combinar instrucciones Exit Property y Return. Valor devuelto. Para devolver un valor desde un procedimiento Get, puede asignar el valor al nombre de propiedad o incluirlo en una instruccin Return. El ejemplo siguiente asigna el valor devuelto al nombre de propiedad quoteForTheDay y, a continuacin, utiliza la instruccin Exit Property para volver. Private quoteValue AsString = "No quote assigned yet."

ReadOnlyProperty quoteForTheDay() AsString Get quoteForTheDay = quoteValue ExitProperty EndGet EndProperty

Si utiliza Exit Property sin asignar un valor a name, el procedimiento Get devuelve el valor predeterminado para el tipo de datos de la propiedad. La instruccin Return asigna simultneamente el valor devuelto por el procedimiento Get y sale del procedimiento. Esto se muestra en el siguiente ejemplo. Private quoteValue AsString = "No quote assigned yet." ReadOnlyProperty quoteForTheDay() AsString Get Return quoteValue EndGet EndProperty Ejemplo El siguiente ejemplo declara una propiedad en una clase. Class Class1 ' Define a local variable to store the property value. Private propertyValue AsString ' Define the property. PublicProperty prop1() AsString Get ' The Get property procedure is called when the value ' of a property is retrieved. Return propertyValue EndGet Set(ByVal value AsString) ' 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 EndSet EndProperty EndClass Protected (Visual Basic) Especifica que slo se puede obtener acceso a uno o varios elementos de programacin declarados desde su propia clase o desde una clase derivada.

Descriminacin A veces un elemento de programacin declarado en una clase contiene datos confidenciales o cdigo restringido, por lo que conviene limitar el acceso a dicho elemento. Sin embargo, si la clase se puede heredar y se prev una jerarqua de clases derivadas, quizs sea necesario que estas clases derivadas tengan acceso a los datos y al cdigo. En este caso, desear que se pueda tener acceso al elemento desde la clase base y desde todas las clases derivadas. Para limitar el acceso a un elemento de este modo, puede declararlo con Protected. Reglas Contexto de la declaracin. Slo puede utilizar Protected en el nivel de clase. Esto significa que el contexto de la declaracin de un elemento Protected debe ser una clase, y no un archivo de cdigo fuente, un espacio de nombres, una interfaz, un mdulo, una estructura ni un procedimiento. Modificadores combinados. Puede utilizar el modificador Protected junto con el modificador Friend (Visual Basic) en la misma declaracin. Esta combinacin hace que se pueda obtener acceso a los elementos declarados desde cualquier punto del mismo ensamblado, desde su propia clase y desde las clases derivadas. Slo puede especificar Protected Friend en miembros de clases. Comportamiento Nivel de acceso. Todo el cdigo de una clase puede obtener acceso a sus elementos. El cdigo de cualquier clase que se derive de una clase base puede tener acceso a todos los elementos Protected de la clase base. Esto se aplica en todos los niveles de derivacin, lo que significa que una clase puede tener acceso a los elementos Protected de la clase base de la clase base, etc. El acceso protegido no es un supraconjunto ni un subconjunto del acceso de tipo amigo. Modificadores de acceso. Las palabras clave que especifican el nivel de acceso se denominan modificadores de acceso. Encontrar una comparacin de los modificadores de acceso en Niveles de acceso en Visual Basic. El modificador Protected se puede utilizar en estos contextos: Class (Instruccin) Const (Instruccin) Declare (Instruccin) Delegate (Instruccin) Dim (Instruccin) Enum (Instruccin) Event (Instruccin) Function (Instruccin) Interface (Instruccin) Property (Instruccin) Structure (Instruccin) Sub (Instruccin)

Public (Visual Basic) Especifica que uno o varios elementos de programacin declarados no tienen ninguna restriccin de acceso. Descripcin Si publica un componente o conjunto de componentes, como una biblioteca de clases, desear que los elementos de programacin sean accesibles para todos los cdigos que interactan con su ensamblado. Para otorgar este acceso ilimitado en un elemento, puede declararlo con Public. El acceso pblico es el nivel normal para un elemento de programacin cuando no necesita limitar su acceso. Tenga en cuenta que el nivel de acceso de un elemento declarado dentro de una interfaz, mdulo, clase o estructura es de forma predeterminada Public si no lo declara de otra forma. Reglas Contexto de la declaracin. Puede utilizar Public solamente en el nivel de mdulo, interfaz o espacio de nombres. Esto significa que el contexto de la declaracin para un elementoPublic debe ser un archivo de cdigo fuente, espacio de nombres, interfaz, mdulo, clase o estructura y no puede ser un procedimiento. Comportamiento Nivel de acceso. Todos los cdigos que pueden tener acceso a un mdulo, clase o estructura pueden tener acceso a sus elementos Public. Acceso predeterminado. Las variables locales dentro de un procedimiento tienen un valor predeterminado de acceso pblico y no puede utilizar ningn modificador de acceso en ellos. Modificadores de acceso. Las palabras clave que especifican el nivel de acceso se llaman modificadores de acceso. Para consultar una comparacin de los modificadores de acceso, vea Niveles de acceso en Visual Basic. El modificador Public se puede utilizar en estos contextos: Class (Instruccin) Const (Instruccin) Declare (Instruccin) Delegate (Instruccin) Dim (Instruccin) Enum (Instruccin) Event (Instruccin) Function (Instruccin) Interface (Instruccin) Module (Instruccin) Operator (Instruccin) Property (Instruccin) Structure (Instruccin) Sub (Instruccin)

RaiseEvent (Instruccin) Desencadena un evento declarado en el nivel de mdulo dentro de una clase, formulario o documento. RaiseEvent eventname[( argumentlist )] Partes eventname Obligatorio. Nombre del evento que se va a desencadenar. argumentlist Opcional. Lista de variables, matrices o expresiones delimitadas por comas. El argumento argumentlist debe estar entre parntesis. Si no hay argumentos, deben omitirse los parntesis. Descripcin El parmetro eventname requerido es el nombre de un evento declarado en el mdulo. Sigue las convenciones de nomenclatura de Visual Basic. Si el evento no se ha declarado dentro del mdulo en el que se produce, ocurrir un error. El siguiente fragmento de cdigo muestra una declaracin de evento y un procedimiento en el que se produce el evento. ' Declare an event at module level. Event LogonCompleted(ByVal UserName AsString) Sub Logon(ByVal UserName AsString) ' Raise the event. RaiseEvent LogonCompleted(UserName) EndSub No se puede utilizar RaiseEvent para generar eventos que no estn explcitamente declarados en el mdulo. Por ejemplo, todos los formularios heredan un evento Click deSystem.Windows.Forms.Form; no se puede producir utilizando RaiseEvent en un formulario derivado. Si se declara un evento Click en el mdulo de formulario, sombrea el propio eventoClick del formulario. Sin embargo, todava se puede invocar el evento Click del formulario llamando al mtodo OnClick. De manera predeterminada, un evento definido en Visual Basic provoca sus controladores de eventos en el orden en que se establecen las conexiones. Como los eventos pueden tener parmetros ByRef, un proceso que se conecta tarde puede recibir parmetros modificados por un controlador de eventos anterior. Despus de que se ejecutan los controladores de eventos, el control se devuelve a la subrutina que provoc el evento. Nota

Los eventos no compartidos no se deben provocar dentro del constructor de la clase en la que estn declarados. Aunque dichos eventos no provocan errores en tiempo de ejecucin, es posible que los controladores de eventos asociados no los puedan capturar. Se debe utilizar el modificador Shared para crear un evento compartido si es necesario provocar un evento a partir de un constructor. El comportamiento predeterminado de eventos se puede cambiar definiendo un evento personalizado. En los eventos personalizados, la instruccin RaiseEvent invoca al descriptor de acceso RaiseEvent del evento. Para obtener ms informacin sobre eventos personalizados, vea Event (Instruccin).

Ejemplo
En el ejemplo siguiente se utilizan eventos para contar de 10 a 0 segundos. El cdigo muestra varios mtodos, propiedades e instrucciones relacionados con eventos, incluida la instruccinRaiseEvent. La clase que produce un evento es el origen de evento, y los mtodos que procesan el evento son los controladores de eventos. Un origen de evento puede tener mltiples controladores para los eventos que genera. Cuando una clase produce el evento, ese evento se genera en cada clase que ha elegido para controlar eventos para esa instancia del objeto. En el ejemplo tambin se utiliza un formulario (Form1) con un botn (Button1) y un cuadro de texto (TextBox1). Al hacer clic en el botn, el primer cuadro de texto presenta una cuenta atrs de 10 a 0 segundos. Cuando ha transcurrido todo el tiempo (10 segundos), el primer cuadro de texto presenta "Done". El cdigo para Form1 especifica los estados inicial y terminal del formulario. Tambin contiene el cdigo que se ejecuta cuando se producen eventos. Para utilizar este ejemplo, abra un nuevo proyecto de aplicacin para Windows, agregue un botn denominado Button1 y un cuadro de texto denominado TextBox1 al formulario principal, denominado Form1. A continuacin, haga clic con el botn secundario del mouse (ratn) en el formulario y haga clic en Ver cdigo para abrir el editor de cdigo. Agregue una variable WithEvents a la seccin de declaraciones de la clase Form1. PrivateWithEvents mText As TimerState Agregue el cdigo siguiente al cdigo de Form1. Sustituya los procedimientos que estn duplicados, como Form_Load o Button_Click. PrivateSub Form1_Load(ByVal sender AsObject, _ ByVal e As System.EventArgs) _ HandlesMyBase.Load Button1.Text = "Start" mText = New TimerState EndSub PrivateSub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles Button1.Click

mText.StartCountdown(10.0, 0.1) EndSub PrivateSub mText_ChangeText() Handles mText.Finished TextBox1.Text = "Done" EndSub PrivateSub mText_UpdateTime(ByVal Countdown AsDouble) _ Handles mText.UpdateTime TextBox1.Text = Format(Countdown, "##0.0") ' Use DoEvents to allow the display to refresh. My.Application.DoEvents() EndSub Class TimerState PublicEvent UpdateTime(ByVal Countdown AsDouble) PublicEvent Finished() PublicSub StartCountdown(ByVal Duration AsDouble, _ ByVal Increment AsDouble) Dim Start AsDouble = DateAndTime.Timer Dim ElapsedTime AsDouble = 0 Dim SoFar AsDouble = 0 DoWhile ElapsedTime < Duration If ElapsedTime > SoFar + Increment Then SoFar += Increment RaiseEvent UpdateTime(Duration - SoFar) EndIf ElapsedTime = DateAndTime.Timer - Start Loop RaiseEvent Finished() EndSub EndClass

Presione F5 para ejecutar el ejemplo anterior y haga clic en el botn que tiene la etiqueta Iniciar. El primer cuadro de texto empieza la cuenta atrs. Cuando ha transcurrido todo el tiempo (10 segundos), el primer cuadro de texto presenta "Done". Nota El mtodo My.Application.DoEvents no procesa los eventos exactamente de la misma manera en que lo hace el formulario. Para permitir que el formulario controle directamente los eventos, puede utilizar el subprocesamiento mltiple. Para obtener ms informacin, vea Subprocesamiento mltiple en Visual Basic.

ReadOnly (Visual Basic)


Especifica que una variable o una propiedad se puede leer, pero no se puede modificar.

Descripcin Reglas Contexto de declaracin. Slo puede utilizar ReadOnly en el nivel de mdulo. Esto significa que el contexto de declaracin de un elemento ReadOnly debe ser una clase, una estructura o un mdulo, y no un archivo de cdigo fuente, un espacio de nombres o un procedimiento. Modificadores combinados. No se puede especificar ReadOnly junto con Static en la misma declaracin. Asignar un valor. El cdigo que utiliza una propiedad ReadOnly no puede establecer su valor. Pero el cdigo que tiene acceso al almacenamiento subyacente puede asignar o modificar el valor en cualquier momento. Slo puede asignar un valor a una variable ReadOnly en su declaracin o en el constructor de una clase o estructura en la que est definida. Cundo utilizar una variable de slo lectura Hay situaciones en las que no puede utilizar Instruccin Const (Visual Basic) para declarar y asignar un valor constante. Por ejemplo, podra ocurrir que la instruccin Const no aceptara el tipo de datos que desea asignar o que no pueda calcular el valor en tiempo de compilacin con una expresin constante. Es posible incluso que no conozca el valor en tiempo de compilacin. En estos casos, puede utilizar una variable ReadOnly para albergar un valor constante. Nota de seguridad 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 modificar aunque la propia variable sea ReadOnly. Esto se ilustra en el siguiente ejemplo: ReadOnly characterArray() As Char = {"x"c, "y"c, "z"c} Sub changeArrayElement() characterArray(1) = "M"c End Sub Cuando se inicializa, la matriz sealada por characterArray() alberga "x", "y" y "z". Como la variable characterArray es ReadOnly, no es posible modificar su valor una vez que se ha inicializado; es decir, no se le puede asignar una nueva matriz. Sin embargo, puede cambiar los valores de uno o varios miembros de la matriz. Despus de que se produzca una llamada al procedimiento changeArrayElement, la matriz sealada por characterArray() alberga "x", "M" y "z". Observe que esta operacin es equivalente a declarar un parmetro de procedimiento que sea ByVal, lo que impide que el procedimiento pueda modificar el argumento de llamada, aunque puede modificar 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 la propiedad internamente como una variablePrivate y nicamente el cdigo incluido en la clase puede cambiar ese valor. Sin embargo, la propiedad es Public y cualquier cdigo que pueda tener acceso a la clase podr leer la propiedad. Class employee ' Only code inside class employee can change the value of hireDateValue. Private hireDateValue AsDate ' Any code that can access class employee can read property dateHired. PublicReadOnlyProperty dateHired() AsDate Get Return hireDateValue EndGet EndProperty EndClass

El modificador ReadOnly se puede utilizar en estos contextos: Dim (Instruccin) Property (Instruccin) Instruccin ReDim (Visual Basic) Vuelve a asignar espacio de almacenamiento a una variable de matriz. ReDim [ Preserve ] name(boundlist) [ , name(boundlist) [, ... ] ] Partes Preserve Opcional. Modificador utilizado para conservar los datos en la matriz existente cuando slo se cambia el tamao de la ltima dimensin. name Obligatorio. Nombre de la variable de matriz. Vea Nombres de elementos declarados. boundlist Obligatorio. Lista de lmites de cada dimensin de la matriz nuevamente definida. Descripcin Puede utilizar la instruccin ReDim para cambiar el tamao de una o ms dimensiones de una matriz que ya se ha declarado. Si dispone de una matriz grande y ya no necesita algunos de sus elementos, ReDim puede reducir el tamao de la matriz para liberar memoria. Por otra parte, si el cdigo determina que una matriz necesita ms elementos, ReDim puede agregarlos.

La instruccin ReDim se ha diseado nicamente para matrices. No es vlida en escalares (variables que contienen un valor nico), colecciones ni estructuras. Tenga en cuenta que si declara una variable de tipo Array, la instruccin ReDim no dispone de suficiente informacin de tipo para crear la nueva matriz. Slo puede utilizar ReDim en el nivel de clase en el nivel de procedimiento. Esto significa que el contexto de la declaracin de una variable debe ser un procedimiento, y no un archivo de cdigo fuente, un espacio de nombres, una interfaz, una clase, una estructura, un mdulo ni un bloque. Para obtener ms informacin, vea Contextos de declaracin y niveles de acceso predeterminados. Reglas Modificadores. Puede especificar slo el modificador Preserve y no puede omitir la palabra clave ReDim si lo hace. Varias variables. Puede cambiar el tamao de varias variables de matriz en la misma instruccin de declaracin, especificando las partes name y boundlist de cada una. Las variables mltiples se separan con comas. Lmites de la matriz. Cada entrada en boundlist puede especificar los lmites inferior y superior de la dimensin. El lmite inferior siempre es cero, tanto si lo especifica como si no. El lmite superior es el valor superior posible para ese subndice, no la longitud de la dimensin (que es el lmite superior ms uno). Cada subndice puede variar de cero a su valor de lmite superior. El nmero de dimensiones en boundlist debe coincidir con el rango original de la matriz. Matrices vacas. Es posible utilizar -1 para declarar el lmite superior de una dimensin de matriz. Esto significa que la matriz est vaca pero no tiene el valor Nothing (Visual Basic). Para obtener ms informacin, vea Cmo: Crear una matriz sin elementos. No obstante, el cdigo de Visual Basic no permite un acceso correcto a dicha matriz. Si se intenta el acceso, se produce un error IndexOutOfRangeException durante la ejecucin. Tipos de datos. La instruccin ReDim no puede cambiar el tipo de datos de una variable de matriz ni de sus elementos. Inicializacin. La instruccin ReDim no puede proporcionar nuevos valores de inicializacin para los elementos de matriz. Rango. La instruccin ReDim no puede cambiar el rango (el nmero de dimensiones) de la matriz. Cambiar el tamao con Preserve. Si se utiliza Preserve, slo se puede cambiar el tamao de la ltima dimensin de la matriz y, para el resto de las dimensiones, debe especificar el mismo lmite que tenga en la matriz existente. Por ejemplo, si su matriz tiene slo una dimensin, puede cambiar el tamao de dicha dimensin y conservar el contenido de la matriz, ya que es la ltima dimensin y la nica. Sin embargo, si su matriz tiene dos o ms dimensiones, slo puede cambiar el tamao de la ltima dimensin si utiliza Preserve. Propiedades. Se puede utilizar ReDim en una propiedad que contiene una matriz de valores.

Comportamiento

Reemplazo de matriz.ReDim libera la matriz existente y crea una matriz nueva con el mismo rango. La nueva matriz reemplaza la matriz liberada en la variable de matriz. Inicializacin sin Preserve. Si no especifica Preserve, ReDim inicializa los elementos de la nueva matriz con e valor predeterminado para su tipo de datos. Inicializacin con Preserve. Si se especifica el modificador Preserve, Visual Basic copia los elementos de la matriz existente en la nueva matriz. Ejemplo El ejemplo siguiente aumenta el tamao de la ltima dimensin de una matriz dinmica sin perder los datos existentes en la matriz y, a continuacin, reduce el tamao con una prdida parcial de datos. Por ltimo, reduce el tamao a su valor original y reinicializa todos los elementos de la matriz. Dim intArray(10, 10, 10) AsInteger ReDimPreserve intArray(10, 10, 20) ReDimPreserve intArray(10, 10, 15) ReDim intArray(10, 10, 10)

La primera instruccin 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. Tambin agrega 10 columnas ms al final de cada fila en todas las capas e inicializa los elementos de estas nuevas columnas con 0 (el valor predeterminado de Integer, el tipo de elemento de la matriz). El segundo ReDim crea otra nueva matriz, copiando todos los elementos que quepan. Sin embargo, se pierden cinco columnas desde el final de cada fila en cada capa. Esto no es un problema si ha terminado de utilizar estas columnas. Si se reduce el tamao de una matriz de gran tamao, puede liberar memoria que ya no necesite. El tercer ReDim crea otra matriz nueva, quitando otro cinco columnas del final de cada fila en cada capa. Esta vez no copia ningn elemento existente. As se recupera el tamao original de la matriz y se devuelven sus elementos al valor predeterminado original. REM (Instruccin, Visual Basic) Se utiliza para incluir comentarios explicativos en el cdigo fuente de un programa. REM comment ' comment Partes comment Opcional. El texto de cualquier comentario que desee incluir. Es necesario incluir un espacio entre la palabra clave REM o comilla sencilla (') y comment. Descripcin

Puede colocar una instruccin REM sola en una lnea o puede ponerla en una lnea a continuacin de otra instruccin. La instruccin REM debe ser la ltima instruccin de la lnea. Si sigue otra instruccin, la REM debe estar separada de esa instruccin por un espacio. Puede utilizar una comilla simple (') en vez de REM. Esto es cierto si el comentario sigue a otra instruccin en la misma lnea o se encuentra sola en una lnea. Nota No es posible continuar una instruccin REM mediante la secuencia de continuacin de lnea ( _). Una vez que se inicia un comentario, el compilador no busca ningn significado especial en los caracteres. Para un comentario de varias lneas, utilice otra instruccin REM o un smbolo de comentario (') en cada lnea.

Ejemplo En el ejemplo siguiente se muestra la instruccin REM, que se utilizar para incluir observaciones explicativas en un programa. Tambin se muestra la alternativa de utilizacin de un carcter de comilla simple (') en lugar de REM. Dim demoStr1, demoStr2 AsString demoStr1 = "Hello"REM Comment after a statement using REM. demoStr2 = "Goodbye"' Comment after a statement using the ' character. REM This entire line is a comment. ' This entire line is also a comment. RemoveHandler (Instruccin) Quita la asociacin entre un evento y un controlador de eventos. RemoveHandler event, AddressOf eventhandler Partes event Nombre del evento que se va a controlar. eventhandler Nombre del procedimiento que controla actualmente el evento. Descripcin Las instrucciones AddHandler y RemoveHandler permiten iniciar y detener el control del evento de un evento especfico en cualquier momento de la ejecucin del programa.

Para los eventos personalizados, la instruccin RemoveHandler llama al descriptor de acceso RemoveHandler del evento. Para obtener ms informacin sobre eventos personalizados, veaEvent (Instruccin). Ejemplo Sub TestEvents() Dim Obj AsNew 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() EndSub Sub EventHandler() ' Handle the event. MsgBox("EventHandler caught event.") EndSub PublicClass Class1 ' Declare an event. PublicEvent Ev_Event() Sub CauseSomeEvent() ' Raise an event. RaiseEvent Ev_Event() EndSub EndClass Resume Especifica dnde debe continuar la ejecucin despus de controlar un error. Descripcin La palabra clave Resume se puede utilizar en estos contextos: Instruccin On Error (Visual Basic) Resume (Instruccin) Instruccin Return (Visual Basic) Devuelve el control al cdigo que llam a un procedimiento Function, Sub, Get, Set u Operator. Return -or-

Return expression Parte expression Requerido en un procedimiento Function, Get u Operator. Expresin que representa el valor que se devolver al cdigo de llamada. Descripcin En un procedimiento Sub o Set, la instruccin Return es equivalente a Exit Sub o Exit Property, y no se debe proporcionar un valor expression. En un procedimiento Function, Get u Operator, la instruccin Return debe incluir un valor expression y este valor expression debe dar como resultado un tipo de datos que se pueda convertir al tipo de valor devuelto del procedimiento. En un procedimiento Function o Get, tambin puede asignar una expresin al nombre del procedimiento para que acte como el valor devuelto y, a continuacin, ejecutar Exit Function o Exit Property. En un procedimiento Operator, debe utilizar Returnexpression. Puede incluir tantas instrucciones Return en el mismo procedimiento como sea necesario. Nota El cdigo de un bloque Finally se ejecuta tras encontrarse una instruccin Return en un bloque Try o Catch, pero antes de que se ejecute dicha instruccin Return. En esta situacin, la instruccin Return del bloque Finally se ejecuta antes que la instruccin Return inicial, lo que permite un valor devuelto diferente. Para evitar esta situacin potencialmente confusa, evite utilizar las instrucciones Return en bloques Finally.

Ejemplo En el siguiente ejemplo se utiliza varias veces la instruccin Return para regresar al cdigo de llamada cuando el procedimiento ya no tiene que hacer nada ms. PublicFunction getAgePhrase(ByVal age AsInteger) AsString If age > 60 ThenReturn"Senior" If age > 40 ThenReturn"Middle-aged" If age > 20 ThenReturn"Adult" If age > 12 ThenReturn"Teen-aged" If age > 4 ThenReturn"School-aged" If age > 1 ThenReturn"Toddler" Return"Infant" EndFunction .... SByte (Tipo de datos, Visual Basic) Contiene enteros de 8 bits con signo (1 bytes) que se sitan en el intervalo entre -128 y 127. Descripcin

Utilice el tipo de datos SByte para incluir valores enteros que no precisen el ancho total de datos de Integer ni la mitad del ancho de datos de Short. En algunos casos, Common Language Runtime puede empaquetar las variables SByte de forma que se ahorre consumo de memoria. El valor predeterminado de SByte es 0. Sugerencias de programacin Compatibilidad con CLS. El tipo de datos SByte no forma parte de Common Language Specification (CLS), por lo que el cdigo compatible con CLS no puede utilizar un componente que lo utiliza. Ampliacin. El tipo de datos SByte se ampla a Short, Integer, Long, Decimal, Single y Double. Esto significa que se puede convertir SByte en cualquiera de estos tipos sin encontrar un error System.OverflowException. Caracteres de tipo.SByte no tiene ningn carcter de tipo de literal o de tipo de identificador. Tipo en Framework. El tipo correspondiente en .NET Framework es la estructura System.SByte. Instruccin Select...Case (Visual Basic) Ejecuta uno de varios grupos de instrucciones, segn el valor de una expresin. Select [ Case ] testexpression [ Case expressionlist [ statements ] ] [ Case Else [ elsestatements ] ] End Select Partes testexpression Obligatorio. Expresin. Debe evaluarse en uno de los tipos de datos elementales (Boolean, Byte, Char, Date, Double, Decimal, Integer, Long, Object, SByte, Short, Sin gle, String,UInteger, ULong y UShort). expressionlist Requerido en una instruccin Case. Lista de clusulas de expresiones que representan valores que coinciden para testexpression. Las clusulas de varias expresiones se separan mediante comas. Cada clusula puede tomar una de las siguientes formas: expression1 To expression2 [ Is ] comparisonoperator expression expression

Utilice la palabra clave To para especificar los lmites de un intervalo de valores que coinciden para testexpression. El valor de expression1 debe ser menor o igual que el valor deexpression2. Utilice la palabra clave Is con un operador de comparacin (=, <>, <, <=, > o >=) para especificar una restriccin de los valores coincidentes para testexpression. Si no se escribe, la palabra clave Is se insertar automticamente antes de comparisonoperator. La forma de especificar slo expression se trata como un caso especial de la forma Is donde comparisonoperator es el signo igual (=). Esta forma se evala como testexpression =expression. Las expresiones contenidas en expressionlist pueden ser de cualquier tipo de datos, siempre que sean implcitamente convertibles al tipo de testexpression y el correspondientecomparisonoperator sea vlido para los dos tipos con los que se utilice. statements Opcional. Una o ms instrucciones posteriores a Case que se ejecutan si testexpression coincide con cualquier clusula de expressionlist. elsestatements Opcional. Una o ms instrucciones posteriores a Case Else que se ejecutan si testexpression no coincide con ninguna clusula de expressionlist de cualquiera de las instrucciones Case. End Select Termina la definicin la construccin Select...Case. Descripcin Si testexpression coincide con cualquier clusula de Case expressionlist, se ejecutan las instrucciones situadas a continuacin de Case hasta la siguiente instruccin Case, Case Else o End Select. El control pasa despus a la instruccin que sigue a End Select. Si testexpression coincide con una clusula expressionlist en ms de una clusula Case, slo se ejecutan las instrucciones situadas despus de la primera coincidencia. La instruccin Case Else se utiliza para introducir las elsestatements que se deben ejecutar si no se encuentra ninguna coincidencia entre las clusulas testexpression y expressionlist de cualquiera de las dems instrucciones Case. Aunque no es necesario, es aconsejable tener una instruccin Case Else en su construccin Select Case para controlar los valores testexpressionimprevistos. Si no coincide ninguna clusula Case expressionlist con testexpression y no hay ninguna instruccin Case Else, el control pasa a la instruccin End Select siguiente. Se pueden utilizar varias expresiones o intervalos en cada clusula Case. Por ejemplo, la lnea siguiente es vlida. Case 1 To 4, 7 To 9, 11, 13, Is > maxNumber

Nota La palabra clave Is utilizada en las instrucciones Case y Case Else no es igual que Is (Operador, Visual Basic), que se utiliza para la comparacin de referencias a objetos. Puede especificar intervalos y varias expresiones para cadenas de caracteres. En el ejemplo siguiente, Case coincide con cualquier cadena que sea exactamente igual a "apples", tenga un valor comprendido entre "nuts" y "soup" en orden alfabtico, o contenga el mismo valor exacto que el valor actual de testItem. Case "apples", "nuts" To "soup", testItem El valor de Option Compare puede afectar a las comparaciones de cadenas. Bajo Option Compare Text, las cadenas "Apples" y "apples" se comparan como iguales, pero no bajo Option Compare Binary. Nota Una instruccin Case con varias clusulas puede exhibir el comportamiento conocido como cortocircuitar. Visual Basic evala las clusulas de izquierda a derecha y, si una de ellas coincide con testexpression, no se evalan las clusulas restantes. El procedimiento de cortocircuitar puede mejorar el rendimiento, pero puede generar resultados inesperados si est esperando que se evalen todas las expresiones de expressionlist. Para obtener ms informacin sobre cmo cortocircuitar, vea Expresiones booleanas. Si el cdigo contenido en un bloque de instrucciones Case o Case Else no necesita ejecutar ms instrucciones contenidas en el bloque, puede salir del bloque utilizando la instruccin Exit Select. Esto transfiere inmediatamente el control a la instruccin que sigue a End Select. Las construcciones Select Case se pueden anidar. Cada construccin Select Case anidada debe tener una instruccin End Select coincidente y estar completamente contenida dentro de un nico bloque de instruccin Case o Case Else de la construccin Select Case ms exterior dentro de la cual est anidada. Ejemplo En el ejemplo siguiente se utiliza una construccin Select Case para escribir una lnea correspondiente al valor de la variable number. La segunda instruccin Case contiene el valor que coincide con el valor actual de number, por lo que se ejecuta la instruccin que escribe "Between 6 and 8, inclusive". Dim number AsInteger = 8 SelectCase 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") CaseElse Debug.WriteLine("Not between 1 and 10, inclusive")

EndSelect Instruccin Set (Visual Basic) Declara un procedimiento de propiedad Set que se utiliza para asignar un valor a una propiedad. [ <attributelist> ] [ accessmodifier ] Set (ByVal value [ As datatype ]) [ statements ] End Set Partes attributelist Opcional. Ver la Lista de atributos. accessmodifier Opcional en un mximo de una de las instrucciones Get y Set de esta propiedad. Puede ser una de las siguientes: Protected Friend Private Protected Friend Ver Niveles de acceso en Visual Basic. value Obligatorio. Parmetro que contiene el nuevo valor de la propiedad. datatype Obligatorio si Option Strict es On. Tipo de datos del parmetro value. El tipo de datos especificado debe ser el mismo que el tipo de datos de la propiedad donde se declara esta instruccin Set. statements Opcional. Una o ms instrucciones que se ejecutan cuando se llama al procedimiento de propiedad Set. End Set Obligatorio. Termina la definicin del procedimiento de propiedad Set. Descripcin

Cada propiedad debe tener un procedimiento de propiedad Set, a menos que la propiedad se marque como ReadOnly. El procedimiento Set se utiliza para establecer el valor de la propiedad. Visual Basic llama automticamente al procedimiento Set de una propiedad cuando una instruccin de asignacin proporciona un valor que se va a almacenar en la propiedad. Visual Basic pasa un parmetro al procedimiento Set durante las asignaciones de propiedades. Si no se especifica un parmetro para Set, el entorno de desarrollo integrado (IDE) utiliza un parmetro implcito denominado value. El parmetro contiene el valor que se va a asignar a la propiedad. Generalmente, almacena este valor en una variable local privada y lo devuelve cada vez que se llama al procedimiento Get. El cuerpo de la declaracin de propiedad slo puede contener los procedimientos Get y Set de la propiedad entre Property (Instruccin) y End Property No puede almacenar nada distinto de esos procedimientos. En particular, no puede almacenar el valor actual de la propiedad. Este valor debe almacenarse fuera de la propiedad, ya que si lo almacena en uno de los procedimientos de la propiedad, el otro procedimiento no puede tener acceso a l. El enfoque habitual consiste en almacenar el valor en una variable Private (Visual Basic) declarada en el mismo nivel que la propiedad. Debe definir un procedimiento Set dentro de la propiedad a la que se aplica. El procedimiento Set tiene como valor predeterminado el nivel de acceso de su propiedad contenedora, a menos que utilice accessmodifier en la instruccin Set. Reglas Niveles mixtos de acceso. Si define una propiedad de lectura y escritura, puede especificar un nivel de acceso diferente para el procedimiento Get o para el procedimiento Set, pero no para ambos. Si hace esto, el nivel de acceso del procedimiento debe ser ms restrictivo que el nivel de acceso de la propiedad. Por ejemplo, si la propiedad se declara comoFriend, puede declarar el procedimiento Set como Private, pero no como Public. Si define una propiedad WriteOnly, el procedimiento Set representa la propiedad completa. No puede declarar un nivel de acceso diferente para Set, porque esto establecera dos niveles de acceso para la propiedad. Comportamiento Volver de un procedimiento de propiedad. Cuando el procedimiento Set vuelve al cdigo de llamada, la ejecucin contina a partir de la instruccin que proporcion el valor que se va a almacenar. Los procedimientos de propiedad Set pueden volver utilizando Instruccin Return (Visual Basic) o Instruccin Exit (Visual Basic). Las instrucciones Exit Property y Return provocan una salida inmediata de un procedimiento de propiedad. Puede aparecer cualquier nmero de instrucciones Exit Property y Returnen cualquier parte del procedimiento y puede combinar instrucciones Exit Property y Return. Ejemplo En el siguiente ejemplo se utiliza la instruccin Set para establecer el valor de una propiedad.

Class propClass Private propVal AsInteger Property prop1() AsInteger Get Return propVal EndGet Set(ByVal value AsInteger) propVal = value EndSet EndProperty EndClass Shadows Especifica que un elemento de programacin declarado vuelve a declarar y oculta un elemento denominado de forma idntica o un conjunto de elementos sobrecargados, en una clase base. Descripcin El propsito principal del sombreado (que tambin se conoce como ocultar por nombre) es conservar la definicin de los miembros de clase. La clase base puede sufrir un cambio que cree un elemento con el mismo nombre que otro ya definido. Si sucede esto, el modificador Shadows fuerza a las referencias mediante la clase para que se resuelvan en el miembro definido en lugar de hacerlo en el nuevo elemento de la clase base. El sombreado y el reemplazo definen de nuevo un elemento heredado, pero hay diferencias significativas entre los dos enfoques. Para obtener ms informacin, vea Sombrear en Visual Basic. Reglas Contexto de la declaracin. Slo puede utilizarse Shadows en el nivel de clase. Esto significa que el contexto de la declaracin para un elemento Shadows debe ser una clase, y no puede ser un archivo de cdigo fuente, espacio de nombres, interfaz, mdulo, estructura o procedimiento. Se puede declarar slo un elemento de sombreado en una nica instruccin de declaracin. Modificadores combinados. No se puede especificar Shadows junto con Overloads, Overrides o Static en la misma declaracin. Tipos de elementos. Puede hacer que cualquier tipo de elemento declarado prevalezca sobre cualquier otro tipo. Si sombrea una propiedad o procedimiento con otra propiedad o procedimiento, los parmetros y el tipo de valor devuelto no tienen que coincidir con los de la propiedad o procedimiento de la clase base. Acceso. El elemento sombreado en la clase base no est disponible normalmente desde la clase derivada que lo sombrea. No obstante, se aplican las siguientes consideraciones. Si el elemento de sombreado no es accesible desde el cdigo que hace referencia a l, la referencia se resuelve como el elemento sombreado. Por ejemplo, si un elementoPrivate sombrea un elemento de clase base, en su lugar, el cdigo que no tiene permiso para obtener acceso al elemento Private obtiene acceso al elemento de clase base.

Si se sombrea un elemento, an se podr tener acceso al mismo mediante un objeto declarado con el tipo de la clase base. Tambin puede tener acceso a l a travs deMyBase. El modificador Shadows se puede utilizar en estos contextos: Class (Instruccin) Const (Instruccin) Declare (Instruccin) Delegate (Instruccin) Dim (Instruccin) Enum (Instruccin) Event (Instruccin) Function (Instruccin) Interface (Instruccin) Property (Instruccin) Structure (Instruccin) Sub (Instruccin) Shared (Visual Basic) Especifica que uno o varios elementos de programacin declarados estn asociados a una clase o estructura en general y no a una instancia especfica de la clase o estructura. Descripcin Cundo se utiliza Shared Al compartir un miembro de una clase o estructura, ste est disponible para cada instancia; en cambio, si es no compartido, cada instancia mantiene su propia copia. Por ejemplo, esto es til si el valor de una variable se aplica a toda la aplicacin. Si declara esta variable Shared, todas las instancias tendrn acceso a la misma ubicacin de almacenamiento y si una instancia cambia el valor de la variable, todas las instancias tendrn acceso 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 slo desde dentro la clase), o no compartido y pblico. Para obtener ms informacin, vea Niveles de acceso en Visual Basic. Reglas Contexto de la declaracin. Slo puede utilizarse Shared en el nivel de mdulo. Esto significa que el contexto de declaracin de un elemento Shared debe ser una clase o estructura, y no un archivo de cdigo fuente, un espacio de nombres o un procedimiento. Modificadores combinados. No se puede especificar Shared junto con Overrides, Overridable, NotOverridable, MustOverride o Static (Visual Basic) en la misma declaracin. Acceso. Se tiene acceso a un elemento compartido calificndolo con su nombre de clase o de estructura, y no con el nombre de variable de una instancia especfica de su clase o estructura. Ni siquiera tiene que crear una instancia de una clase o estructura para tener acceso a sus miembros compartidos.

El ejemplo siguiente llama al procedimiento compartido IsNaN expuesto por la estructura Double. If Double.IsNaN(result) Then MsgBox("Result is mathematically undefined.") Uso compartido implcito. No se puede utilizar el modificador Shared en Instruccin Const (Visual Basic), pero las constantes se comparten de forma implcita. De igual manera, no se puede declarar un miembro de un mdulo o una interfaz Shared pero se comparte implcitamente. Comportamiento Almacenamiento. Una variable o evento compartido se almacena en la memoria slo una vez, independientemente del nmero de instancias que se hayan creado de su clase o estructura. De igual manera, una propiedad o procedimiento compartido contiene slo un conjunto de variables locales. Acceso mediante una variable de instancia. Es posible tener acceso a un elemento compartido calificndolo con el nombre de una variable que contiene una instancia especfica de su clase o estructura. Aunque esto suele funcionar del modo previsto, el compilador genera un mensaje de advertencia y obtiene acceso mediante el nombre de clase o estructura en lugar de la variable. Acceso mediante una expresin de instancia. Si tiene acceso a un elemento compartido mediante una expresin que devuelve una instancia de su clase o estructura, el compilador obtiene acceso mediante el nombre de clase o estructura en lugar de evaluar la expresin. Esto genera unos resultados inesperados si haba previsto que la expresin realizara otras acciones adems de devolver la instancia. Esto se ilustra en el siguiente ejemplo: 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 las dos veces que el cdigo tiene acceso a la variable compartida total mediante una instancia. En cada caso,

obtiene acceso directamente mediante la clase shareTotal y no utiliza ninguna instancia. En el caso de una llamada prevista al procedimiento returnClass, significa que ni tan siquiera genera una llamada a returnClass, por lo que no se realiza la accin adicional de mostrar "Function returnClass() called". El modificador Shared se puede utilizar en estos contextos: Dim (Instruccin) Event (Instruccin) Function (Instruccin) Operator (Instruccin) Property (Instruccin) Sub (Instruccin) Short (Tipo de datos, Visual Basic) Contiene enteros de 16 bits con signo (2 bytes) que se sitan en el intervalo entre -32.768 y 32.767. Descripcin Utilice el tipo de datos Short para incluir valores enteros que no requieren el ancho completo de datos de Integer. En algunos casos, Common Language Runtime puede empaquetar las variables Short de forma que se ahorre consumo de memoria. El valor predeterminado de Short es 0. Sugerencias de programacin Ampliacin. El tipo de datos Short se ampla a Integer, Long, Decimal, Single o Double. Esto significa que se puede convertir Short en cualquiera de estos tipos sin encontrar un error System.OverflowException. Caracteres de tipo Si se anexa el carcter de tipo literal S a un literal, se convierte al tipo de datos Short. Short no tiene ningn carcter de tipo de identificador. Tipo en Framework. El tipo correspondiente en .NET Framework es la estructura System.Int16. String (Tipo de datos, Visual Basic) Incluye nmeros IEEE de punto flotante de precisin simple de 32 bits (4 bytes) con signo cuyos valores van de -3,4028235E+38 a -1,401298E-45 para nmeros negativos y de 1,401298E-45 a 3,4028235E+38 para nmeros positivos. Los nmeros de precisin simple almacenan aproximaciones de nmeros reales. Descripcin

Utilice el tipo de datos Single para incluir valores de punto flotante que no requieren el ancho completo de datos de Double. En algunos casos, Common Language Runtime puede empaquetar las variables Single de forma que se ahorre consumo de memoria. El valor predeterminado de Single es 0. Sugerencias de programacin Precisin. Cuando trabaje con nmeros de punto flotante, tenga presente que no siempre tienen una representacin precisa en memoria. Esto podra conducir a resultados inesperados en ciertas operaciones, como la comparacin de valores y el operador Mod. Para obtener ms informacin, vea Solucionar problemas de tipos de datos. Ampliacin. El tipo de datos Single ampla a Double. Esto significa que puede convertir Single en Double sin encontrar un error System.OverflowException. Ceros finales. Los tipos de datos de punto flotante no tienen representacin interna de caracteres 0 finales. Por ejemplo, no distinguen entre 4,2000 y 4,2. Por consiguiente, los caracteres 0 finales no aparecen cuando muestra o imprime valores de punto flotante. Caracteres de tipo Al agregar el carcter de tipo de literal F a un literal, el tipo de datos se convierte al tipo de datos Single. Si se agrega el carcter de tipo de identificador ! a cualquier identificador, se convierte su tipo de datos al tipo Single. Tipo en Framework. El tipo correspondiente en .NET Framework es la estructura System.Single. .. Static (Visual Basic) Especifica si una o varias variables locales declaradas deben seguir existiendo y conservar sus ltimos valores tras la finalizacin del procedimiento en el que se han declarado. Descripcin Normalmente, una variable local de un procedimiento deja de existir en cuanto finaliza el procedimiento. Una variable esttica sigue existiendo y conserva su valor ms reciente. La prxima vez que su cdigo llame al procedimiento, no se reinicializa la variable y sigue conservando el ltimo valor asignado. Una variable esttica sigue existiendo durante el perodo de la clase o mdulo para el que est definida. Reglas Contexto de la declaracin. Slo puede utilizar Static en variables local. Esto significa que el contexto de la declaracin para una variable Static debe ser un procedimiento o un bloque dentro de un procedimiento y no puede ser un archivo de cdigo fuente, un espacio de nombres, una clase, una estructura o un mdulo. No puede utilizar Static dentro de un procedimiento de estructura. Modificadores combinados. No se puede especificar Static junto con ReadOnly, Shadows o Shared en la misma declaracin. Comportamiento

El comportamiento de cualquier variable local depende de si se declara en un procedimiento Shared. Si el procedimiento es Shared, todas sus variables locales se comparten automticamente, incluso las variables Static. Slo existe una copia de este tipo de variable para toda la aplicacin. Llama a un procedimiento Shared utilizando el nombre de clase y no una variable que seala a una instancia de la clase. Si el procedimiento no es Shared, sus variables locales son variables de instancia, incluso las variables Static. Existe una copia independiente de cada variable en todas las instancias de la clase. Llama a un procedimiento no compartido utilizando una variable que seala a una instancia concreta de la clase. Cualquier variable de esa instancia es independiente de una variable con el mismo nombre de otra instancia. Por consiguiente, pueden contener valores diferentes. Ejemplo El siguiente ejemplo muestra el uso de Static. Function updateSales(ByVal thisSale AsDecimal) AsDecimal Static totalSales AsDecimal = 0 totalSales += thisSale Return totalSales EndFunction

El valor totalSales de la variable Static slo se inicializa a 0 una vez. Cada vez que escribe updateSales, totalSales sigue teniendo el valor calculado ms reciente. El modificador Static se puede utilizar en este contexto: Instruccin Dim (Visual Basic) Step Especifica un valor de incremento para un contador de bucle. Descripcin La palabra clave Step se puede utilizar en este contexto: Instruccin For...Next (Visual Basic) Instruccin Stop (Visual Basic) Suspende la ejecucin. Stop Descripcin

Se pueden colocar instrucciones Stop en cualquier parte de los procedimientos para suspender la ejecucin. El uso de la instruccin Stop es similar a establecer un punto de interrupcin en el cdigo. La instruccin Stop suspende la ejecucin, pero a diferencia de End no cierra ningn archivo ni borra variables, a menos que se encuentre en un archivo ejecutable compilado (.exe). Nota Si la instruccin Stop se encuentra en cdigo que se est ejecutando fuera del entorno de desarrollo integrado (IDE), se invoca el depurador. Esto es as independientemente de si el cdigo se compil en modo de depuracin o en modo comercial.

Ejemplo En este ejemplo se utiliza la instruccin Stop para suspender la ejecucin para cada iteracin a travs del bucle For...Next. Dim i AsInteger For i = 1 To 10 Debug.WriteLine(i) ' Stop during each iteration and wait for user to resume. Stop Next i String (Tipo de datos, Visual Basic) Contiene secuencias de puntos de cdigo de 16 bits sin signo (2 bytes) que van de un valor de 0 a 65535. Cada punto de cdigo, o cdigo de carcter, representa un carcter Unicode nico. Una cadena puede contener de 0 a 2.000 millones (2^31) de caracteres Unicode aproximadamente. Descripcin Utilice el tipo de datos String para contener varios caracteres sin la sobrecarga de administracin de matriz de Char(), una matriz de elementos Char. El valor predeterminado de String es Nothing (una referencia nula). Observe que esto no es lo mismo que la cadena vaca (valor ""). Caracteres Unicode Los primeros 128 puntos de cdigo (0127) Unicode corresponden a las letras y smbolos de un teclado estndar de EE.UU. Estos primeros 128 puntos de cdigo son los mismos que los que define el juego de caracteres ASCII. Los siguientes 128 puntos de cdigo (128255) representan caracteres especiales, como letras de alfabetos latinos, acentos, smbolos de moneda y fracciones. Unicode utiliza los puntos de cdigo restantes (256-65535) para una amplia variedad de smbolos, incluidos caracteres de texto de todo el mundo, signos diacrticos, y smbolos tcnicos y matemticos. Puede utilizar mtodos como IsDigit y IsPunctuation en una variable individual String para determinar su clasificacin Unicode.

Requisitos de formato Debe agregar un literal String entre comillas (" "). Si necesita incluir una comilla como uno de los caracteres de la cadena, utilice dos comillas contiguas (""). Esto se ilustra en el siguiente ejemplo: Dim j As String = "Joe said ""Hello"" to me." Dim h As String = "Hello" ' The following messages all display the same thing: ' "Joe said "Hello" to me." MsgBox(j) MsgBox("Joe said " & """" & h & """" & " to me.") MsgBox("Joe said """ & h & """ to me.") Observe que las comillas contiguas que representan unas comillas de la cadena son independientes de las comillas que comienzan y terminan el literal String. Manipulacin de cadenas Cuando asigna una cadena a una variable String, esa cadena es inmutable, lo que significa que no puede cambiar su longitud ni su contenido. Cuando modifica una cadena de alguna manera, Visual Basic crea una nueva cadena y abandona la anterior. La variable String seala a continuacin a la nueva cadena. Puede manipular el contenido de una variable String mediante varias funciones de cadena. En el siguiente ejemplo se ilustra Left (Funcin, Visual Basic): 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 puede completarse con espacios iniciales o finales. Si recibe este tipo de cadena, puede utilizar Trim, LTrim y RTrim (Funciones) para quitar estos espacios. Para obtener ms informacin sobre manipulacin de cadenas, vea Cadenas en Visual Basic. Sugerencias de programacin Nmeros negativos. Tenga presente que los caracteres contenidos en String son sin signo y no pueden representar valores negativos. En cualquier caso, no debera utilizar Stringpara contener valores numricos. Consideraciones sobre interoperabilidad. Si trabaja con componentes no escritos para .NET Framework, por ejemplo objetos de automatizacin o COM, recuerde que los caracteres de cadena pueden tener un ancho de datos distinto (8 bits) en otros entornos. Si est pasando un argumento de cadena de caracteres de 8 bits a este tipo de componentes, declrelo como Byte(), una matriz de elementos Byte, en lugar de String en el nuevo cdigo de Visual Basic. Caracteres de tipo. Anexar el carcter de tipo de identificador $ a un literal fuerza a que sea de un tipo de datos String. String no tiene ningn carcter de tipo de literal. Sin embargo, el compilador trata los literales incluidos entre comillas (" ") como String. Tipo de Framework. El tipo correspondiente en .NET Framework es la clase System.String.

Structure (Visual Basic) Restringe un parmetro de tipo genrico de forma que cualquier argumento de tipo que reciba sea un tipo de valor o introduce una Structure (Instruccin). Descripcin Cuando declara un parmetro de tipo en un tipo genrico, puede imponer una restriccin, un conjunto de una o varias condiciones que limitan el argumento de tipo que se puede enviar a dicho parmetro de tipo. Para obtener ms informacin, vea "Restricciones" en Tipos genricos en Visual Basic. Entre los posibles requisitos de una restriccin se puede indicar que el argumento de tipo debe ser un tipo de valor, por ejemplo una estructura, enumeracin o tipo de datos bsico. Esto se especifica mediante la incorporacin de la palabra clave Structure en la restriccin. Otro requisito posible es que el argumento de tipo debe ser un tipo de referencia, por ejemplo, String, matriz o delegado, o bien un objeto creado a partir de una clase. Para especificar un requisito de tipo de referencia, se incluye la palabra clave Class (Visual Basic) en la restriccin. No tiene que especificar Class o Structure en una restriccin. No puede especificar ambas en la misma restriccin. La restriccin Structure no es igual que Structure (Instruccin). .... Instruccin Sub (Visual Basic) Declara el nombre, los parmetros y el cdigo que definen un procedimiento Sub. [ <attributelist> ] [ accessmodifier ] [ proceduremodifiers ] [ Shared ] [ Shado ws ] Sub name [ (Of typeparamlist) ] [ (parameterlist) ] [ Implements implementslis t | Handles eventlist ] [ statements ] [ Exit Sub ] [ statements ] End Sub Partes attributelist Opcional. Ver Lista de atributos. accessmodifier Opcional. Puede ser una de las siguientes: Public

Protected Friend Private Protected Friend Vea Niveles de acceso en Visual Basic. proceduremodifiers Opcional. Puede ser una de las siguientes: Overloads Overrides Overridable NotOverridable MustOverride MustOverride Overrides NotOverridable Overrides Shared Opcional. Ver Shared. Shadows Opcional. Ver Shadows. name Obligatorio. Nombre del procedimiento. Vea Nombres de elementos declarados. typeparamlist Opcional. Lista de parmetros de tipo para un procedimiento genrico. Ver Lista de tipos. parameterlist Opcional. Lista de nombres de variable local que representan los parmetros de este procedimiento. Vea Lista de parmetros. Implements Opcional. Indica que este procedimiento implementa uno o ms procedimientos Sub, cada uno definido en una interfaz implementada por la clase o estructura contenedora de este procedimiento. Vea Implements (Instruccin). implementslist Requerido si se suministra Implements. Lista de procedimientos Sub que se implementan.

implementedprocedure [ , implementedprocedure ... ] Cada implementedprocedure tiene la sintaxis y las partes siguientes: interface.definedname Parte interface Descripcin Obligatorio. Nombre de una interfaz implementada por la clase o estructura contenedora de este procedimiento.

definedname Obligatorio. Nombre por el que est definido el procedimiento en interface. Handles Opcional. Indica que este procedimiento puede controlar uno o ms eventos concretos. Vea Handles. eventlist Requerido si se suministra Handles. Lista de eventos que este procedimiento controla. eventspecifier [ , eventspecifier ... ] Cada eventspecifier tiene la sintaxis y las partes siguientes: eventvariable.event Parte Descripcin

eventvariable Obligatorio. Variable de objeto declarada con el tipo de datos de la clase o estructura que provoca el evento. event Obligatorio. Nombre del evento que este procedimiento controla.

statements Opcional. Bloque de instrucciones que se ejecuta dentro de este procedimiento. EndSub Termina la definicin de este procedimiento. Descripcin Todo el cdigo ejecutable debe estar dentro de un procedimiento. Utilice un procedimiento Sub cuando no necesite devolver un valor al cdigo de llamada. Utilice un procedimientoFunction cuando necesite devolver un valor.

Slo puede utilizar Sub en el nivel de mdulo. Esto significa que el contexto de declaracin de un procedimiento Sub tiene que ser una clase, estructura, mdulo o interfaz, y no puede ser un archivo de cdigo fuente, espacio de nombres, procedimiento o bloque. Para obtener ms informacin, vea Contextos de declaracin y niveles de acceso predeterminados. Los procedimientos Sub tienen como valor predeterminado el acceso pblico. Puede ajustar sus niveles de acceso con los modificadores de acceso. Reglas Implementacin. Si este procedimiento utiliza la palabra clave Implements, la clase o estructura contenedora deben tener una instruccin Implements inmediatamente despus de la instruccin Class o Structure. La instruccin Implements debe incluir cada interfaz especificada en implementslist. Sin embargo, el nombre por el que una interfaz define el procedimiento Sub (en definedname) no tiene que ser igual que el nombre de este procedimiento (en name). Comportamiento Volver de un procedimiento. Cuando el procedimiento Sub regrese al cdigo que realiza la llamada, la ejecucin contina con la instruccin que sigue a la instruccin que lo llam. Las instrucciones Exit Sub y Return provoca una salida inmediata de un procedimiento Sub. Puede aparecer cualquier nmero de instrucciones Exit Sub y Return en cualquier parte del procedimiento y se pueden combinar instrucciones Exit Sub y Return. En el ejemplo siguiente se muestra cmo volver de un procedimiento Sub. Sub mySub(ByVal q As String) Return End Sub Llamar a un procedimiento. Un procedimiento Sub, al igual que un procedimiento Function, es un procedimiento independiente que puede tomar parmetros y ejecutar una serie de instrucciones. Sin embargo, a diferencia de un procedimiento Function, que devuelve un valor, un procedimiento Sub no se puede utilizar en una expresin. Puede llamar a un procedimiento Sub con el nombre del procedimiento, seguido por la lista de argumentos entre parntesis, en una instruccin. Si no se proporcionan argumentos, se pueden omitir los parntesis. Sin embargo, el cdigo es ms legible si siempre se incluyen parntesis. Opcionalmente puede utilizar la instruccin Call para llamar al procedimiento Sub. De este modo se puede mejorar la legibilidad del cdigo. Solucin de problemas Orden de ejecucin. Visual Basic reorganiza a veces las expresiones aritmticas para aumentar la eficacia interna. Por esa razn, si la lista de argumentos incluye expresiones que llaman a otros procedimientos, no puede confiar en que se les llame en un orden determinado.

Ejemplo En este ejemplo se utiliza la instruccin Sub para definir el nombre, parmetros y cdigo que forman el cuerpo de un procedimiento Sub. Sub computeArea(ByVal length AsDouble, ByVal width AsDouble) ' Declare local variable. Dim area AsDouble If length = 0 Or width = 0 Then ' If either argument = 0 then exit Sub immediately. ExitSub EndIf ' Calculate area of rectangle. area = length * width ' Print area to Immediate window. Debug.WriteLine(area) EndSub .... SyncLock (Instruccin) Adquiere un bloqueo exclusivo para un bloque de instrucciones antes de ejecutar el bloque. SyncLock lockobject [ block ] End SyncLock Partes lockobject Obligatorio. Expresin que se evala como una referencia a objeto. block Opcional. Bloque de instrucciones que se ejecuta cuando se adquiere el bloqueo. End SyncLock Termina un bloque SyncLock. Comentarios La instruccin SyncLock se asegura de que varios subprocesos no ejecuten el bloque de instrucciones al mismo tiempo. SyncLock evita que los subprocesos entren en el bloque hasta que no lo ejecute ningn otro subproceso. El uso ms comn de SyncLock es impedir que ms de un subproceso actualice los datos simultneamente. Si las instrucciones que manipulan los datos deben completarse sin interrupciones, colquelas dentro de un bloque SyncLock.

Un bloque de instrucciones protegido por un bloqueo exclusivo se denomina a veces una seccin crtica. Reglas Bifurcacin. No puede bifurcar en un bloque SyncLock desde fuera del bloque. Valor del objeto Lock. El valor de lockobject no puede ser Nothing. Debe crear el objeto de bloqueo antes de utilizarlo en una instruccin SyncLock. No puede cambiar el valor de lockobject mientras ejecuta un bloque SyncLock. El mecanismo requiere que el objeto de bloqueo permanezca inalterado. Comportamiento Mecanismo. Cuando un subproceso llega a la instruccin SyncLock, evala la expresin lockobject e interrumpe la ejecucin hasta que adquiere un bloqueo exclusivo sobre el objeto devuelto por la expresin. Cuando otro subproceso llega a la instruccin SyncLock, no adquiere un bloqueo hasta que el primer subproceso ejecute la instruccin End SyncLock Datos protegidos. Si lockobject es una variable Shared, el bloqueo exclusivo impide que un subproceso de cualquier instancia de la clase ejecute el bloque SyncLock mientras lo ejecute otro subproceso. Esto protege los datos compartidos 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 SyncLock en la misma instancia a la vez que otro subproceso. Esto protege los datos mantenidos por la instancia individual. Adquisicin y liberacin. Un bloque SyncLock se comporta como otra construccin Try...Finally en la que el bloque Try adquiere un bloqueo exclusivo sobre lockobject y el bloqueFinally lo libera. Gracias a esto, el bloque SyncLock garantiza la liberacin del bloqueo, independientemente de cmo salga del bloque. Esto es verdad incluso en el caso de una excepcin no controlada. Llamadas del marco de trabajo. El bloque SyncLock adquiere y libera el bloqueo exclusivo llamando a los mtodos Enter y Exit de la clase Monitor en el espacio de nombresSystem.Threading. Programar prcticas La expresin lockobject se debe evaluar siempre como un objeto que pertenece exclusivamente a su clase. Debe declarar una variable de objeto Private 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 existe un cdigo ajeno a su clase con una referencia a una instancia de su clase, ste puede utilizar esta referencia como un objeto de bloqueo para un bloque SyncLock totalmente distinto del suyo y proteger datos distintos. De esta manera, su clase y la otra clase podran impedir que se ejecutaran sus bloques SyncLock no relacionados. Bloquear de forma similar una cadena puede ser problemtico ya que cualquier otro cdigo del proceso, que utilice la misma cadena, compartir el mismo bloqueo.

Asimismo, no debe utilizar el mtodo Me.GetType para proporcionar un objeto de bloqueo para datos compartidos. Esto se debe a que GetType devuelve siempre el mismo objeto Typepara un nombre de clase determinado. El cdigo externo podra llamar a GetType en su clase y obtener el mismo objeto de bloqueo que est utilizando. Esto provocara el bloqueo de las dos clases entre s desde sus bloques SyncLock. Ejemplo El ejemplo siguiente muestra una clase que mantiene una lista simple de mensajes. Contiene los mensajes en una matriz y el ltimo elemento utilizado de esa matriz en una variable. El procedimiento addAnotherMessage incrementa el ltimo elemento y almacena el nuevo mensaje. Estas dos operaciones estn protegidas por las instrucciones SyncLock y End SyncLockporque una vez incrementado el ltimo elemento, se debe almacenar el nuevo mensaje antes de que cualquier otro subproceso pueda incrementar de nuevo el ltimo elemento. Class simpleMessageList Public messagesList() AsString = NewString(50) {} Public messagesLast AsInteger = -1 Private messagesLock AsNewObject PublicSub addAnotherMessage(ByVal newMessage AsString) SyncLock messagesLock messagesLast += 1 messagesList(messagesLast) = newMessage EndSyncLock EndSub EndClass

Si la clase simpleMessageList compartiera una lista de mensajes entre todas sus instancias, las variables messagesList y messagesLast se declararan como Shared. En este caso, la variable messagesLock tambin debera ser Shared para que hubiera un nico objeto de bloqueo utilizado por todas las instancias. Then Precede a un bloque de instrucciones que se compila o se ejecuta si una condicin probada es verdadera. Comentarios La palabra clave Then se puede utilizar en estos contextos: #If...Then...#Else (Directiva) If...Then...Else (Instruccin) .. Instruccin Throw (Visual Basic) Produce una excepcin dentro de un procedimiento.

Throw [ expression ] Parte expression Proporciona informacin acerca de la excepcin que se va a producir. Opcional si se encuentra en una instruccin Catch; en caso contrario, es necesaria. Descripcin La instruccin Throw produce una excepcin que puede controlar con cdigo estructurado de control de excepciones (Try...Catch...Finally) o cdigo no estructurado de control de excepciones (On Error GoTo). Puede utilizar la instruccin Throw para interceptar errores dentro del cdigo porque Visual Basic asciende por la pila de llamadas hasta que encuentra el cdigo de control de excepciones apropiado. Una instruccin Throw sin expresiones slo se puede utilizar en una instruccin Catch; en este caso, la instruccin vuelve a producir la excepcin que controla la instruccin Catch. La instruccin Throw restablece la pila de llamadas para la excepcin expression. Si no se proporciona expression, la pila de llamadas queda sin modificar. Puede tener acceso a la pila de llamadas para la excepcin a travs de la propiedad StackTrace. Ejemplo En el siguiente cdigo se utiliza la instruccin Throw para producir una excepcin: ' Throws a new exception. ThrowNew System.Exception("An exception has occurred.") To Separa los valores inicial y final de un contador de bucle o de un intervalo de coincidencia de valores. Descripcin La palabra clave To se puede utilizar en estos contextos: For...Next (Instruccin) Select...Case (Instruccin) True (Visual Basic) Representa un valor de tipo Boolean que aprueba una comprobacin condicional. Descripcin

Los valores Boolean (Tipo de datos, Visual Basic) no se almacenan como nmeros y los valores almacenados no se consideran equivalentes a nmeros. No debe escribir cdigo que se base en los valores numricos equivalentes de True y False. Siempre que sea posible, debe restringir el uso de variables Boolean a los valores lgicos para los que se han diseado. Si fuera necesario mezclar valores de tipo Boolean y numricos, asegrese de entender el mtodo de conversin elegido. Para obtener ms informacin, vea la seccin sobre cmo el tipo Boolean no se convierte al tipo numrico correctamente en Solucionar problemas de tipos de datos. TryCast Introduce una operacin de conversin de tipos que no produce una excepcin. Descripcin Si se produce un error al intentar llevar a cabo una conversin, CType y DirectCast producen un error InvalidCastException. Esto puede afectar negativamente al rendimiento de la aplicacin.TryCast devuelve Nothing (Visual Basic), de modo que en lugar de controlar una posible excepcin, slo debe comprobar el resultado devuelto con Nothing. Utilice la palabra clave TryCast del mismo modo que utiliza las palabras clave CType (Funcin) y DirectCast. Proporcione una expresin como primer argumento y el tipo al que se va a convertir como segundo argumento. TryCast slo funciona en tipos de referencia, como clases e interfaces. Requiere que exista una relacin de herencia o implementacin entre los dos tipos. Esto significa que un tipo debe heredarse del otro o implementar al otro. Errores TryCast genera un error del compilador si detecta que no existe ninguna relacin de herencia o implementacin. Sin embargo, la ausencia de un compilador no garantiza el xito de la conversin. Si la conversin deseada es de restriccin, puede producirse un error en tiempo de ejecucin. Si esto ocurre, TryCast devuelve Nothing (Visual Basic). Palabras clave para conversiones A continuacin se incluye una comparacin de las palabras clave de conversin de tipos. Palabra clave CType (Funcin) DirectCast TryCast Tipos de datos Relacin de argumentos Error en tiempo de ejecucin

Produce InvalidCastException Cualquier tipo La conversin de ampliacin o de datos restriccin debe definirse entre dos tipos de datos Cualquier tipo Un tipo debe heredarse del otro de datos tipo o implementarlo Slo tipos de referencia Un tipo debe heredarse del otro tipo o implementarlo Produce InvalidCastException Devuelve Nothing (Visual Basic)

Ejemplo En el ejemplo siguiente se muestra cmo utilizar TryCast. Function PrintTypeCode(ByVal obj AsObject) AsString Dim objAsConvertible As IConvertible = TryCast(obj, IConvertible) If objAsConvertible IsNothingThen Return obj.ToString() &" does not implement IConvertible" Else Return"Type code is "& objAsConvertible.GetTypeCode() EndIf EndFunction TypeOf (Operador, Visual Basic) Compara una variable de referencia a objeto con un tipo de datos.

result = TypeOf objectexpression Is typename Partes result Devuelto. Valor Boolean. objectexpression Obligatorio. Cualquier expresin que se evala como un tipo de referencia. typename Obligatorio. Cualquier nombre de tipo de datos. Descripcin El operador TypeOf determina si el tipo en tiempo de ejecucin de objectexpression es compatible con typename. La compatibilidad depende de la categora de tipo de typename. La tabla siguiente muestra cmo se determina la compatibilidad. Categora de tipo de typename Class Structure Interface Criterio de compatibilidad

objectexpression es de tipo typename o hereda de typename objectexpression es de tipo typename objectexpression implementa typename o hereda de una clase que implementa typename

Si el tipo en tiempo de ejecucin de objectexpression satisface el criterio de compatibilidad, result es True. De lo contrario, result es False. TypeOf se utiliza siempre con la palabra clave Is para construir la expresin TypeOf...Is. Ejemplo En el ejemplo siguiente se utilizan las expresiones TypeOf...Is para comprobar la compatibilidad de tipo de dos variables de referencia a objeto con distintos tipos de datos. Dim refInteger AsObject = 2 MsgBox("TypeOf Object[Integer] Is Integer? "&TypeOf refInteger IsInteger) MsgBox("TypeOf Object[Integer] Is Double? "&TypeOf refInteger IsDouble) Dim refForm AsObject = New System.Windows.Forms.Form MsgBox("TypeOf Object[Form] Is Form? "&TypeOf refForm Is System.Windows.Forms.Fo rm) MsgBox("TypeOf Object[Form] Is Label? "&TypeOf refForm Is System.Windows.Forms.L abel) MsgBox("TypeOf Object[Form] Is Control? "&TypeOf refForm Is System.Windows.Forms .Control) MsgBox("TypeOf Object[Form] Is IComponent? "&TypeOf refForm Is System.ComponentM odel.IComponent) La variable refInteger tiene un tipo en tiempo de ejecucin de Integer. Es compatible con Integer pero no con Double. La variable refForm tiene un tipo en tiempo de ejecucin de Form. Es compatible con Form porque ste 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. .. UInteger (Tipo de datos) Contiene enteros de 32 bits sin signo (4 bytes) que se sitan en el intervalo entre 0 y 4.294.967.295. Descripcin El tipo de datos UInteger proporciona el valor sin signo ms largo en el ancho de datos ms eficaz. El valor predeterminado de UInteger es 0. Sugerencias de programacin Los tipos de datos UInteger y Integer proporcionan un rendimiento ptimo en un procesador de 32 bits, ya que los tipos de enteros ms pequeos (UShort, Short, Byte y SByte), aunque utilizan menos bits, necesitan ms tiempo para cargarse, almacenarse y obtenerse.

ULong (Tipo de datos, Visual Basic) Contiene enteros de 64 bits sin signo (8 bytes) que van de un valor de 0 a 18.446.744.073.709.551.615 (ms de 1,84 veces 10 ^ 18). Descripcin Utilice el tipo de datos ULong para contener datos binarios demasiado grandes para UInteger o valores de enteros sin signo lo ms grandes posibles. El valor predeterminado de ULong es 0. Sugerencias de programacin Nmeros negativos. Dado que ULong es un tipo sin signo, no puede representar un nmero negativo. Si utiliza el operador menos (-) unario en una expresin que produce un resultado del tipo ULong, Visual Basic convierte primero la expresin a Decimal. Compatibilidad con CLS.El tipo de datos ULong no forma parte de Common Language Specification (CLS), por lo que el cdigo compatible con CLS no puede utilizar un componente que lo utiliza. Consideraciones sobre interoperabilidad. Si trabaja con componentes no escritos para .NET Framework, por ejemplo objetos de automatizacin o COM, recuerde que los tipos como ulong pueden tener un ancho de datos distinto (32 bits) en otros entornos. Al pasar un argumento de 32 bits a esos componentes, declrelo como UInteger en lugar de ULongen el cdigo administrado de Visual Basic. Adems, la automatizacin no admite enteros de 64 bits en Windows 95, Windows 98, Windows ME o Windows 2000. No se puede pasar ningn argumento ULong de Visual Basic a un componente de automatizacin en estas plataformas. Ampliacin. El tipo de datos ULong se ampla a Decimal, Single y Double. Esto significa que se puede convertir ULong a cualquiera de estos tipos sin encontrar un errorSystem.OverflowException. Caracteres de tipo. Anexar los caracteres de tipo de literal UL a un literal fuerza a que sea de un tipo de datos ULong. ULong no tiene ningn carcter de tipo de identificador. Tipo de Framework. El tipo correspondiente en .NET Framework es la estructura System.UInt64. . UShort (Tipo de datos, Visual Basic) Contiene enteros de 16 bits sin signo (2 bytes) que se sitan en el intervalo entre 0 y 65.535. Descripcin Utilice el tipo de datos UShort para contener datos binarios demasiado grandes para Byte. El valor predeterminado de UShort es 0. Sugerencias de programacin

Nmeros negativos. Dado que UShort es un tipo sin signo, no puede representar un nmero negativo. Si utiliza el operador menos (-) unario en una expresin que produce un resultado del tipo UShort, Visual Basic convierte primero la expresin a Integer. Compatibilidad con CLS. El tipo de datos UShort no forma parte de Common Language Specification (CLS), por lo que el cdigo compatible con CLS no puede utilizar un componente que lo utiliza. Ampliacin. El tipo de datos UShort se ampla a Integer, UInteger, Long, ULong, Decimal, Single y Double. Esto significa que se puede convertir UShort en cualquiera de estos tipos sin encontrar un error System.OverflowException. Caracteres de tipo Si se anexa el carcter de tipo literal US a un literal, se convierte al tipo de datos UShort. UShort no tiene ningn carcter de tipo de identificador. Tipo en Framework. El tipo correspondiente en .NET Framework es la estructura System.UInt16. Instruccin Using (Visual Basic) Declara el principio de un bloque Using y, opcionalmente, adquiere los recursos del sistema que controla el bloque. Using { resourcelist | resourceexpression } [ statements ] End Using Partes resourcelist Obligatorio si no se proporciona una expresin resourceexpression. Presenta una lista de uno o ms recursos del sistema que controla este bloque Using. resourceexpression Obligatorio si no se proporciona una resourcelist. Variable de referencia o expresin que hace referencia a un recurso del sistema que va a controlar este bloque Using. statements Opcional. Bloque de instrucciones que ejecuta el bloque Using. End Using Obligatorio. Finaliza la definicin del bloque Using y desecha todos los recursos que controla. Cada recurso incluido en la parte resourcelist tiene la siguiente sintaxis y partes: resourcename As New resourcetype [ ( [ arglist ] ) ] O bien,

resourcename As resourcetype = resourceexpression Partes de resourcelist resourcename Obligatorio. Variable de referencia que hace referencia a un recurso del sistema que controla el bloque Using. New Obligatorio si la instruccin Using adquiere el recurso. Si ya ha adquirido el recurso, utilice la segunda alternativa de la sintaxis. resourcetype Obligatorio. Clase del recurso. La clase debe implementar la interfaz IDisposable. arglist Opcional. Lista de argumentos que est pasando al constructor para crear una instancia de resourcetype. Vea Lista de parmetros. resourceexpression Obligatorio. Variable o expresin que hace referencia a un recurso del sistema que satisface los requisitos de resourcetype. Si utiliza la segunda alternativa de la sintaxis, debe adquirir el recurso antes de pasar el control a la instruccin Using. Descripcin A veces su cdigo requiere un recurso no administrado, como un identificador de archivos, un contenedor COM o una conexin SQL. Un bloque Using garantiza la eliminacin de uno o ms de tales recursos cuando su cdigo termina de usarlos. Esto los pone a disposicin de otro cdigo para que los pueda utilizar. Los recursos administrados se eliminan mediante el recolector de elementos no utilizados de .NET Framework sin necesidad de cdigo adicional por su parte. Para los recursos administrados no es necesario utilizar ningn bloque Using. Un bloque Using tiene tres partes: adquisicin, uso y eliminacin. Adquisicin significa crear una variable e inicializarla para hacer referencia al recurso del sistema. La instruccin Using puede adquirir uno o ms recursos, o bien, puede adquirir exactamente un recurso antes de entrar en el bloque y proporcionarlo a la instruccin Using. Si proporciona una resourceexpression, debe adquirir el recurso antes de pasar el control a la instruccin Using. 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. Eliminacin significa llamar al mtodo Dispose en el objeto de resourcename. Esto permite el objeto terminar limpiamente su recurso no administrado. La instruccin End Usingelimina los recursos bajo el control del bloque Using.

Comportamiento Un bloque Using se comporta como una construccin Try...Finally en la que el bloque Try utiliza los recursos y el bloque Finally los desecha. Gracias a esto, el bloque Using garantiza la eliminacin de los recursos, independientemente de cmo salga del bloque. Esto es cierto incluso en el caso de una excepcin no controlada, excepto para una excepcinStackOverflowException. El mbito de cada variable de recurso adquirido por la instruccin Using se limita al bloque Using. Si especifica ms de un recurso de sistema en la instruccin Using, el efecto es el mismo que si anidara unos bloques Using dentro de otros. Control de excepcin estructurada dentro de un bloque Using Si necesita controlar una excepcin que podra aparecer dentro del bloque Using, puede agregarle una construccin Try...Finally. Si necesita controlar el caso en el que la instruccin Usingno consigue adquirir un recurso, puede comprobar si resourcename es Nothing. Control de excepcin estructurada en lugar de un bloque Using Si necesita un control ms preciso sobre la adquisicin de los recursos, o si necesita cdigo adicional en el bloque Finally, puede volver a escribir el bloque Using como una construccinTry...Finally. El ejemplo siguiente muestra una estructura Try y construcciones Using que son equivalentes en la adquisicin y eliminacin de resource. Using resource As New resourceType ' Insert code to work with resource. End Using ' THE FOLLOWING TRY CONSTRUCTION IS EQUIVALENT TO THE USING BLOCK Dim resource As New resourceType Try ' Insert code to work with resource. Catch ex As Exception ' Insert code to process exception. Finally ' Insert code to do additional processing before disposing of resource. resource.Dispose() End Try Nota El cdigo situado dentro del bloque Using no debera asignar a otra variable el objeto de resourcename. Cuando sale del bloque Using, se elimina el recurso y la otra variable no puede tener acceso al recurso al que seala.

Ejemplo El ejemplo siguiente utiliza un bloque Using para adquirir una nueva fuente. Esto garantiza que el sistema llama al mtodo Dispose de la fuente cuando su cdigo sale del bloque. PublicSub setbigbold(ByVal c As Control) Using nf AsNew System.Drawing.Font("Arial", 12.0F, _

System.Drawing.FontStyle.Bold) c.Font = nf c.Text = "This is 12-point Arial bold" EndUsing EndSub When Agrega una comprobacin condicional a una instruccin Catch. Descripcin La palabra clave When se puede utilizar en este contexto: Try...Catch...Finally (Instrucciones) While (Visual Basic) Especifica una condicin que permite continuar la ejecucin de un bucle Do. Descripcin La palabra clave While no es igual que la instruccin de apertura del bloque While...End While La palabra clave While se puede utilizar en este contexto: Do...Loop (Instrucciones) Widening Indica que un operador de conversin (CType) convierte una clase o una estructura en un tipo que puede incluir todos los valores posibles de la clase o la estructura original. Convertir con la palabra clave Widening El procedimiento de conversin debe especificar Public Shared adems de Widening. Las conversiones de ampliacin son siempre satisfactorias en tiempo de ejecucin y no provocan nunca prdida de datos. Ejemplos son Single a Double, Char a String y un tipo derivado a su tipo base. Esta ltima conversin es de ampliacin ya que el tipo derivado contiene todos los miembros del tipo base y es, por tanto, una instancia del tipo base. El cdigo que la utiliza no tiene que emplear CType para las conversiones de ampliacin, aun cuando Option Strict tenga el valor On.

La palabra clave Widening se puede utilizar en este contexto: Operator (Instruccin) Instruccin With...End With (Visual Basic) Ejecuta una serie de instrucciones que hacen referencia repetidas veces a un nico objeto o estructura. With object [ statements ] End With Partes object Obligatorio. Variable o expresin. Se puede evaluar como cualquier tipo de datos, incluidos los tipos elementales. statements Opcional. Una o ms instrucciones incluidas entre With y End With que se ejecutan en object. End With Obligatorio. Termina la definicin del bloque With. Descripcin With...End With permite realizar una serie de instrucciones sobre un objeto especificado sin volver a calificar el nombre del objeto. Si la ruta de acceso de calificacin al objeto es larga, utilizar With...End With puede mejorar el rendimiento. Un bloque With tambin reduce la necesidad de escribir repetidamente la ruta de acceso de calificacin y el riesgo de cometer errores al escribir alguno de sus elementos. Por ejemplo, para cambiar un nmero de propiedades diferentes en un nico objeto, coloque las instrucciones de asignacin de las propiedades dentro de With...End With, haciendo referencia al objeto una vez, en lugar de hacerlo en cada una de las asignaciones de propiedades. Reglas Tipos de datos. El tipo de datos de object puede ser cualquier tipo de clase o estructura, o incluso un tipo elemental de Visual Basic como Integer. .NET Framework admite todos los tipos elementales con clases o estructuras, que tienen los miembros a los que puede obtener acceso dentro de un bloque With. Declaracin. Debe declarar object antes de escribir el bloque With. No puede declararlo en la instruccin With.

Nmero de iteraciones. Un bloque With no es una construccin iterativa. A menos que haya un bucle dentro del bloque, las instrucciones slo se ejecutan una vez. Estructuras anidadas. Las estructuras With...End With se pueden anidar colocando una estructura dentro de otra. Para obtener un ejemplo, vea Cmo: Realizar varias acciones en un objeto. Sin embargo, como los miembros de instrucciones externas estn enmascarados dentro de las instrucciones internas, debe proporcionar una referencia de objeto completa en un bloque With interno a cualquier miembro de un bloque With externo. Tambin puede anidar distintos tipos de estructuras de control dentro de otras. Para obtener ms informacin, vea Estructuras de control anidadas. Transferir fuera de la estructura. Visual Basic no admite Instruccin Exit (Visual Basic) para transferir el control fuera de un bloque With. Si es necesario salir antes de que se hayan ejecutado todas las instrucciones, coloque una etiqueta en la instruccin End With y utilice la GoTo (Instruccin) para bifurcar la ejecucin hacia ella. Para obtener ms informacin, veaCmo: Aplicar etiquetas a las instrucciones. El control no se puede transferir desde fuera de un bloque With hacia su interior, ni desde dentro de l hacia el exterior. Puede llamar a un procedimiento desde dentro del bloque, pero el control vuelve a la instruccin siguiente. Acceso a otros objetos. Una vez escrito un bloque With, object no se puede reasignar hasta haber pasado la instruccin End With. Por consiguiente, se puede tener acceso a los mtodos y propiedades de slo el objeto especificado sin calificarlos. Se pueden utilizar mtodos y propiedades de otros objetos, pero es necesario calificarlos con los nombres de objeto. Ejemplo El ejemplo siguiente utiliza un bloque With para ejecutar una serie de instrucciones en un nico objeto. El ejemplo supone que ya se ha creado el objeto testObject y expone las propiedades a las que se hace referencia. With testObject .Height = 100 .Text = "Hello, World" .ForeColor = System.Drawing.Color.Green .Font = New System.Drawing.Font(.Font, _ System.Drawing.FontStyle.Bold) EndWith WithEvents Especifica que una o ms variable miembro declaradas hacen referencia a una instancia de una clase que puede provocar eventos. Descripcin

Cuando una variable se define utilizando WithEvents, puede especificar mediante declaracin que un mtodo controla los eventos de la variable mediante la palabra clave Handles. Slo puede utilizar WithEvents en el nivel de clase o de mdulo. Esto significa que el contexto de declaracin de una variable WithEvents debe ser una clase o un mdulo, y no un archivo de cdigo fuente, un espacio de nombres o un procedimiento. No puede utilizar WithEvents dentro de un miembro de estructura. Con WithEvents slo se pueden declarar variables individuales (no matrices). Reglas Tipos de elementos. Debe declarar las variables WithEvents para que sean variables de objeto y que puedan aceptar instancias de clase. Sin embargo, no puede declararlas comoObject. Debe declararlas como la clase especfica que puede provocar los eventos. El modificador WithEvents se puede utilizar en este contexto: Instruccin Dim (Visual Basic) WriteOnly Especifica que se puede escribir pero no leer una propiedad. Comentarios Reglas Contexto de la declaracin. Slo puede utilizarse WriteOnly en el nivel de mdulo. Esto significa que el contexto de la declaracin para una propiedad WriteOnly debe ser una clase, estructura o mdulo y no puede ser un archivo de cdigo fuente, espacio de nombres o procedimiento. Puede declarar una propiedad como WriteOnly, pero no una variable. Cundo se utiliza WriteOnly A veces desea que el cdigo utilizado pueda establecer un valor pero sin descubrir lo que es. Por ejemplo, se deben proteger los datos sensibles, como nmeros de registro social o contraseas, para que no obtenga acceso a ellos ningn componente que no lo haya establecido. En estos casos, puede utilizar una propiedad WriteOnly para establecer el valor. Nota de seguridad Cuando define y utiliza una propiedad WriteOnly, tenga en cuenta las medidas de proteccin adicionales siguientes: Reemplazo. Si la propiedad es un miembro de una clase, permita que tenga un valor predeterminado NotOverridable y no la declare Overridable ni MustOverride. Esto evita que una clase derivada tenga un acceso no deseado mediante un reemplazo. Nivel de acceso. Si tiene datos sensibles de una propiedad en una o ms variables, declrelas Private (Visual Basic) para que ningn otro cdigo pueda tener acceso a ellas.

Cifrado. Almacene todos los datos sensibles en un formulario cifrado en lugar de en texto sin formato. Si un cdigo malintencionado obtiene acceso de algn modo a esa rea de memoria, resulta ms difcil utilizar los datos. El cifrado tambin es til si es necesario serializar los datos sensibles. Restablecimiento. Cuando se termina la clase, estructura o mdulo que define la propiedad, restablezca los datos sensibles a los valores predeterminados o a otros valores sin significado. Esto proporciona una proteccin adicional cuando esa rea de memoria se libera para el acceso general. Persistencia. No conserve ningn dato sensible, por ejemplo en disco, si puede evitarlo. Tampoco escriba ningn dato sensible en el Portapapeles. El modificador WriteOnly se puede utilizar en este contexto: Property (Instruccin) Xor (Operador, Visual Basic) Realiza una exclusin lgica entre dos expresiones de tipo Boolean o bien una exclusin bit a bit entre dos expresiones numricas. result = expression1 Xor expression2 Partes result Obligatorio. Cualquier variable numrica o de tipo Boolean. Para la comparacin booleana, result es la exclusin lgica (disyuncin lgica exclusiva) de dos valores Boolean. Para las operaciones bit a bit, result es un valor numrico que representa la exclusin bit a bit (disyuncin bit a bit exclusiva) de dos modelos de bits numricos. expression1 Obligatorio. Cualquier expresin numrica o de tipo Boolean. expression2 Obligatorio. Cualquier expresin numrica o de tipo Boolean. Descripcin Para la comparacin booleana, result es True si y slo si uno de los argumentos expression1 y expression2 se evala exactamente en True, es decir, s y slo si los argumentos expression1 yexpression2 se evalan en valores Boolean opuestos. La tabla siguiente ilustra cmo se determina el argumento result. Si expression1 es: True Y expression2 es True El valor de result es False

True False False

False True False

True True False

Para operaciones bit a bit, el operador Xor realiza una comparacin bit a bit de los bits ubicados de manera idntica en dos expresiones numricas y establece el bit correspondiente enresult de acuerdo con la siguiente tabla. Si el bit de expression1 es... 1 1 0 0 Y el bit de expression2 es... 1 0 1 0 El bit de result es... 0 1 1 0

Por ejemplo, 5 Xor 3 es 6. Para saber por qu, convierta 5 y 3 en sus representaciones binarias, 101 y 011. A continuacin, utilice la tabla anterior para determinar que 101 Xor 011 es 110, que es la representacin binaria del nmero 6 decimal. Tipos de datos Si los operandos constan de una expresin Boolean y una expresin numrica, Visual Basic convierte la expresin Boolean a un valor numrico (1 para True y 0 para False), y realiza una operacin bit a bit. Para una comparacin Boolean, el tipo de datos del resultado es Boolean. Para una comparacin bit a bit, el tipo de datos del resultado es un tipo numrico 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 operador. Sobrecarga El operador Xor se puede sobrecargar, lo que significa que una clase o una estructura pueden definir de nuevo su comportamiento cuando un operando tiene el tipo de dicha clase o estructura. Si el cdigo utiliza este operador en una clase o estructura de este tipo, asegrese de conocer su comportamiento redefinido. Para obtener ms informacin, vea Procedimientos de operador. Ejemplo En el ejemplo siguiente se usa el operador Xor para realizar una exclusin lgica (disyuncin lgica exclusiva) entre dos expresiones. El resultado ser un valor de tipo Boolean que indicar exactamente si una de las dos expresiones es True. Dim Dim Dim Dim a AsInteger b AsInteger c AsInteger firstCheck, = 10 = 8 = 6 secondCheck, thirdCheck AsBoolean

firstCheck = a > b Xor b > c secondCheck = b > a Xor b > c thirdCheck = b > a Xor c > b

El ejemplo anterior genera unos resultados de False, True y False, respectivamente. En el ejemplo siguiente se usa el operador Xor para realizar una exclusin lgica (disyuncin lgica exclusiva) en los bits individuales de dos expresiones numricas. El bit en el modelo resultante se establece si uno de los bits correspondientes de los operandos se ha establecido en 1 exactamente. Dim a AsInteger = 10 ' 1010 in binary Dim b AsInteger = 8 ' 1000 in binary Dim c AsInteger = 6 ' 0110 in binary Dim firstPattern, secondPattern, thirdPattern AsInteger firstPattern = (a Xor b) ' 2, 0010 in binary secondPattern = (a Xor c) ' 12, 1100 in binary thirdPattern = (b Xor c) ' 14, 1110 in binary

El ejemplo anterior genera unos resultados de 2, 12 y 14, respectivamente. #Const (Directiva) Permite definir constantes de compilacin condicional para Visual Basic.

#Const constname = expression Partes constname Requerido. String. Nombre de la constante que se define. expression Requerido. Literal, otra constante de compilacin condicional o cualquier combinacin que incluya operadores aritmticos o lgicos, excepto Is. Comentarios Las constantes de compilacin condicional son siempre privadas para el archivo en que aparecen. No es posible crear constantes de compilacin pblicas con la directiva #Const, esto slo es posible en la interfaz de usuario o con la opcin de compilador /define. En expression solamente pueden utilizarse constantes de compilacin condicional y literales. El uso de una constante estndar definida con Const produce un error. A la inversa, las constantes

definidas con la palabra clave #Const solamente pueden utilizarse para la compilacin condicional. Tambin es posible que las constantes no estn definidas, en cuyo caso su valor es Nothing. Ejemplo En el ejemplo siguiente se utiliza la directiva #Const. #Const MyLocation = "USA" #Const Version = "8.0.0012" #Const CustomerNumber = 36 #If...Then...#Else (Directivas) Compila de forma condicional bloques de cdigo seleccionados de Visual Basic. #If expression Then statements [ #ElseIf expression Then [ statements ] ... #ElseIf expression Then [ statements ] ] [ #Else [ statements ] ] #End If Partes expression Requerida para las instrucciones #If y #ElseIf; en caso contrario, opcional. Cualquier expresin formada exclusivamente por una o ms constantes de compilacin condicional, literales y operadores, que se evala como True o False. statements Requerida para el bloque de instruccin #If; en caso contrario, opcional. Lneas de programa de Visual Basic o directivas de compilacin que se compilan si la expresin asociada se evala como True. #End If Termina el bloque de instruccin #If. Descripcin Aparentemente, el comportamiento de las directivas #If...Then...#Else es el mismo que el de las instrucciones If...Then...Else. Sin embargo, las directivas #If...Then...#Else evalan lo compilado por el compilador, mientras que las instrucciones If...Then...Else evalan las condiciones en tiempo de ejecucin.

La compilacin condicional se utiliza habitualmente para compilar el mismo programa para plataformas distintas. Tambin se utiliza para evitar que el cdigo de depuracin aparezca en los archivos ejecutables. El cdigo excluido durante una compilacin condicional se omite completamente en el archivo ejecutable final, de modo que no tiene ningn efecto en el tamao ni en el rendimiento. Independientemente del resultado de la evaluacin, todas las expresiones se evalan utilizando Option Compare Binary. La instruccin Option Compare no afecta a las expresiones de las instrucciones #If y #ElseIf. Nota No existe ningn formulario de lnea nica de las directivas #If, #Else, #ElseIf y #End If. No puede aparecer otro cdigo en la misma lnea que cualquiera de las directivas.

Ejemplo En el siguiente ejemplo se utiliza el constructor #If...Then...#Else para determinar si se compilan 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 - (Operador, Visual Basic) Devuelve la diferencia entre dos expresiones numricas o el valor negativo de una expresin numrica. expression1 expression2 - or expression1 Partes expression1 Obligatoria. Cualquier expresin numrica. expression2 Se requiere al menos que el operador est calculando un valor negativo. Cualquier expresin numrica.

Resultado El resultado es la diferencia entre expression1 y expression2 o el valor con signo negativo de expression1. El tipo de datos resultante es un tipo numrico adecuado para los tipos de datos de expression1 y expression2. Vea las tablas "Aritmtica de enteros" en Tipos de datos de resultados de operador. Tipos admitidos Todos los tipos numricos, incluidos los tipos de punto flotante sin signo y Decimal. Descripcin En la sintaxis anterior, la primera vez que se utiliza, el operador es el operador de resta aritmtica binario que halla la diferencia entre dos expresiones numricas. La segunda vez que se utiliza, el operador es el operador de negacin unario que halla el valor negativo de una expresin. En este sentido, la negacin invierte el signo de expression1, por lo que el resultado es positivo si expression1 es negativo. Si alguna expresin se evala como Nothing, el operador la trata como si fuera cero. Nota El operador se puede sobrecargar, lo que significa que una clase o una estructura pueden definir de nuevo su comportamiento cuando un operando tiene el tipo de dicha clase o estructura. Si el cdigo utiliza este operador en una clase o estructura de este tipo, asegrese de conocer su comportamiento redefinido. Para obtener ms informacin, veaProcedimientos de operador.

Ejemplo En el ejemplo siguiente se utiliza el operador para calcular y devolver la diferencia entre dos nmeros; y, a continuacin, para negar un nmero. Dim binaryResult AsDouble = 459.35 - 334.9 Dim unaryResult AsDouble = -334.9

Tras la ejecucin de estas instrucciones, binaryResult contiene 124.45 y unaryResult contiene 334.90. & (Operador, Visual Basic) Genera la concatenacin de cadena de dos expresiones.

result = expression1 & expression2 Partes result Requerido. Cualquier variable String u Object. expression1 Requerido. Cualquier expresin con un tipo de datos que se ample a String. expression2 Requerido. Cualquier expresin con un tipo de datos que se ample a String. Descripcin Si el tipo de datos de expression1 o expression2 no es String, pero se ampla a String, se convertir en String. Si uno de los tipo de datos no se ampla a String, el compilador generar un error. El tipo de datos de result ser String. Si una o ambas expresiones dan como resultado Nothing o tienen un valor System.DBNull.Value, se consideran como una cadena con un valor "". Nota El operador & se puede sobrecargar, lo que significa que una clase o una estructura pueden definir de nuevo su comportamiento cuando un operando tiene el tipo de dicha clase o estructura. Si el cdigo utiliza este operador en una clase o estructura de este tipo, asegrese de conocer su comportamiento redefinido. Para obtener ms informacin, veaProcedimientos de operador.

Ejemplo En este ejemplo se usa el operador & para forzar la concatenacin de cadenas. El resultado es un valor de cadena que representa la concatenacin de ambos operandos. Dim sampleStr AsString sampleStr = "Hello"&" World" ' The preceding statement sets sampleStr to "Hello World". .. &= (Operador, Visual Basic) Concatena una expresin String a una variable o propiedad String y asigna el resultado a la variable o propiedad. variableorproperty &= expression

Partes variableorproperty Requerido. Cualquier propiedad o variable de tipo String. expression Requerido. Cualquier expresin de tipo String. Descripcin El elemento situado a la izquierda del operador &= puede ser una variable escalar simple, una propiedad o un elemento de una matriz. La variable o la propiedad no pueden ser ReadOnly (Visual Basic). El operador &= asigna el valor situado a su derecha a la variable o la propiedad situada a su izquierda. Sobrecarga El operador & (Operador, Visual Basic) se puede sobrecargar, lo que significa que una clase o una estructura pueden definir de nuevo su comportamiento cuando un operando tiene el tipo de dicha clase o estructura. La sobrecarga del operador & afecta al comportamiento del operador &=. Si el cdigo utiliza &= en una clase o estructura que sobrecarga &, asegrese de conocer su comportamiento redefinido. Para obtener ms informacin, vea Procedimientos de operador. Ejemplo En el siguiente ejemplo se utiliza el operador &= para concatenar dos variables String y asignar el resultado a la primera variable. Dim var1 AsString = "Hello " Dim var2 AsString = "World!" var1 &= var2 ' The value of var1 is now "Hello World!". * (Operador, Visual Basic) Multiplica dos nmeros. number1 * number2 Partes number1 Obligatorio. Cualquier expresin numrica. number2

Obligatorio. Cualquier expresin numrica. Resultado El resultado es el producto de number1 y number2. Tipos admitidos Todos los tipos numricos, incluidos los tipos de punto flotante y sin signo, y Decimal. Descripcin El tipo de datos del resultado depende de los tipos de los operandos. La tabla siguiente muestra cmo se determina el tipo de datos del resultado. Tipos de datos del operando Ambas expresiones son tipos de datos integrales (SByte, Byte, Short, UShort, Integer,UInteger, Long, ULong) Tipo de datos del resultado Un tipo de dato numrico adecuado para los tipos de datos de number1 y number2. Vea las tablas "Aritmtica de enteros" en Tipos de datos de resultados de operador. Decimal Single Double

Ambas expresiones son Decimal Ambas expresiones son Single Una expresin es un tipo de datos de punto flotante (Single o Double) pero no ambasSingle (observe que Decimal no es un tipo de datos de punto flotante)

Si una expresin da como resultado Nothing, se tratar como si fuera cero. Sobrecarga El operador * se puede sobrecargar, lo que significa que una clase o una estructura pueden definir de nuevo su comportamiento cuando un operando tiene el tipo de dicha clase o estructura. Si el cdigo utiliza este operador en una clase o estructura de este tipo, asegrese de conocer su comportamiento redefinido. Para obtener ms informacin, vea Procedimientos de operador. Ejemplo En este ejemplo se usa el operador * para multiplicar dos nmeros. El resultado ser el producto de dos operandos. Dim testValue AsDouble testValue = 2 * 2 ' The preceding statement sets testValue to 4. testValue = 459.35 * 334.9 ' The preceding statement sets testValue to 153836.315.

.... *= (Operador, Visual Basic) Multiplica el valor de una variable o una propiedad por el valor de una expresin y asigna el resultado a la variable o la propiedad.

variableorproperty *= expression Partes variableorproperty Requerido. Cualquier propiedad o variable numrica. expression Requerido. Cualquier expresin numrica. Comentarios El elemento situado a la izquierda del operador *= puede ser una variable escalar simple, una propiedad o un elemento de una matriz. La variable o la propiedad no pueden ser ReadOnly (Visual Basic). El operador *= asigna el valor situado a su derecha a la variable o la propiedad situada a su izquierda. Sobrecarga El operador * (Operador, Visual Basic) se puede sobrecargar, lo que significa que una clase o una estructura pueden definir de nuevo su comportamiento cuando un operando tiene el tipo de dicha clase o estructura. La sobrecarga del operador * afecta al comportamiento del operador *=. Si el cdigo utiliza *= en una clase o estructura que sobrecarga *, asegrese de conocer su comportamiento redefinido. Para obtener ms informacin, vea Procedimientos de operador. Ejemplo En el siguiente ejemplo se utiliza el operador *= para multiplicar una variable Integer por otra y asignar el resultado a la primera variable. Dim var1 AsInteger = 10 Dim var2 AsInteger = 3 var1 *= var2 ' The value of var1 is now 30. / (Operador, Visual Basic) Divide dos nmeros y devuelve un resultado de punto flotante.

expression1 / expression2 Partes xpression1 Obligatorio. Cualquier expresin numrica. expression2 Obligatorio. Cualquier expresin numrica. Tipos admitidos Todos los tipos numricos, incluidos los tipos de punto flotante, sin signo y Decimal. Resultado El resultado es el cociente completo de expression1 dividido por expression2, incluido cualquier resto. \ (Operador) devuelve el cociente entero, que omite el resto. Descripcin El tipo de datos del resultado depende de los tipos de los operandos. En la tabla siguiente se muestra cmo se determina el tipo de datos del resultado. Tipos de datos de operando Tipo de datos de resultado Double Decimal Single Double

Ambas expresiones son tipos de datos enteros (SByte, Byte, Short, UShort, Integer, UInteger, Long, ULong) Ambas expresiones son del tipo de datos Decimal Ambas expresiones son de String (Tipo de datos, Visual Basic) Cualquier expresin es un tipo de datos de punto flotante (String (Tipo de datos, Visual Basic) o Double (Tipo de datos, Visual Basic))

Antes de que se realice la divisin, cualquier expresin numrica entera se ampla a Double. Si asigna el resultado a un tipo de datos entero, Visual Basic intenta convertir el resultado deDouble a ese tipo. Esto puede producir una excepcin si el resultado no se ajusta a ese tipo. Vea en particular "Divisin por cero intentada" en esta pgina de Ayuda. Si se evala expression1 o expression2 como Nothing, se trata como si fuese cero. Divisin por cero intentada

Si se evala expression2 como cero, el operador / se comporta de manera diferente para los distintos tipos de datos de operando. En la siguiente tabla se muestran los posibles comportamientos. Tipos de datos de operando Punto flotante (Single oDouble) Decimal Entero (con signo o sin signo) Comportamiento si expression2 es cero

Devuelve infinito (PositiveInfinity o NegativeInfinity) o NaN (no es un nmero) si expression1 tambin es cero Produce DivideByZeroException La conversin intentada recuperando el tipo integral produce una OverflowException porque los tipos integrales no pueden aceptar PositiveInfinity,NegativeInfinity ni NaN

Ejemplo En este ejemplo se usa el operador / para realizar una divisin de punto flotante. El resultado ser el cociente de ambos operandos. Dim resultValue AsDouble resultValue = 10 / 4 resultValue = 10 / 3 Las expresiones en el ejemplo anterior devuelven valores de 2,5 y 3,333333. Observe que el resultado es siempre de punto flotante (Double), aunque ambos operandos sean constantes enteras. /= (Operador, Visual Basic) Divide el valor de una variable o una propiedad por el valor de una expresin y asigna el resultado de punto flotante a la variable o la propiedad. variableorproperty /= expression

Partes variableorproperty Requerido. Cualquier propiedad o variable numrica. expression Requerido. Cualquier expresin numrica.

Descripcin El elemento situado a la izquierda del operador /= puede ser una variable escalar simple, una propiedad o un elemento de una matriz. La variable o la propiedad no pueden ser ReadOnly (Visual Basic). El operador /= asigna el valor situado a su derecha a la variable o la propiedad situada a su izquierda. Esta instruccin asigna un valor Double a la variable o la propiedad del lado izquierdo. Si Option Strict es On, variableorproperty debe ser Double. Si Option Strict es Off, Visual Basic realiza una conversin implcita y asigna el valor resultante a variableorproperty, con un posible error en tiempo de ejecucin. Para obtener ms informacin, vea Conversiones de ampliacin y de restriccin y Option Strict (Instruccin). Sobrecarga El operador / (Operador, Visual Basic) se puede sobrecargar, lo que significa que una clase o una estructura pueden definir de nuevo su comportamiento cuando un operando tiene el tipo de dicha clase o estructura. La sobrecarga del operador / afecta al comportamiento del operador /=. Si el cdigo utiliza /= en una clase o estructura que sobrecarga /, asegrese de conocer su comportamiento redefinido. Para obtener ms informacin, vea Procedimientos de operador. Ejemplo En el siguiente ejemplo se utiliza el operador /= para dividir una variable Integer por otra y asignar el cociente a la primera variable. Dim var1 AsInteger = 12 Dim var2 AsInteger = 3 var1 /= var2 ' The value of var1 is now 4. \ (Operador) Divide dos nmeros y devuelve un resultado de nmero entero. expression1 \ expression2 Partes expression1 Obligatorio. Cualquier expresin numrica. expression2 Obligatorio. Cualquier expresin numrica. Tipos admitidos Todos los tipos numricos, incluidos los tipos de punto flotante, sin signo y Decimal.

Resultado El resultado es el cociente entero de expression1 dividido por expression2 que descarta cualquier resto y conserva slo la parte entera. Esto se conoce como truncado. El tipo de datos resultante es un tipo numrico adecuado para los tipos de datos de expression1 y expression2. Vea las tablas "Aritmtica de enteros" en Tipos de datos de resultados de operador. / (Operador, Visual Basic) devuelve el cociente completo que conserva el resto en la parte decimal. Descripcin Antes de realizar la divisin, Visual Basic intenta convertir cualquier expresin numrica de punto flotante en Long. Si Option Strict es On, se produce un error del compilador. Si Option Strict es Off, es posible que se produzca OverflowException si el valor est fuera del intervalo de Long (Tipo de datos, Visual Basic). La conversin a Long tambin est sujeta al redondeo bancario. Para obtener ms informacin, vea "Partes decimales" en Funciones de conversin de tipos. Si se evala expression1 o expression2 como Nothing, se trata como si fuese cero. Divisin por cero intentada Si se evala expression2 a cero, el operador \ produce una excepcin DivideByZeroException. Esto es verdad para todos los tipos de datos numricos de los operandos. Nota El operador \ se puede sobrecargar, lo que significa que una clase o una estructura pueden definir de nuevo su comportamiento cuando un operando tiene el tipo de dicha clase o estructura. Si el cdigo utiliza este operador en una clase o estructura de este tipo, asegrese de conocer su comportamiento redefinido. Para obtener ms informacin, veaProcedimientos de operador.

Ejemplo En el siguiente ejemplo se usa el operador \ para realizar una divisin de entero. El resultado ser un nmero entero que representa el cociente entero de ambos operandos, rechazando el resto. Dim resultValue AsInteger resultValue = 11 \ 4 resultValue = 9 \ 3 resultValue = 100 \ 3 resultValue = 67 \ -3

Las expresiones en el ejemplo anterior devuelven valores de 2, 3, 33 y -22 respectivamente.

\= (Operador) Divide el valor de una variable o una propiedad por el valor de una expresin y asigna el resultado entero a la variable o la propiedad. variableorproperty \= expression Partes variableorproperty Requerido. Cualquier propiedad o variable numrica. expression Requerido. Cualquier expresin numrica. Comentarios El elemento situado a la izquierda del operador \= puede ser una variable escalar simple, una propiedad o un elemento de una matriz. La variable o la propiedad no pueden ser ReadOnly (Visual Basic). El operador \= asigna el valor situado a su derecha a la variable o la propiedad situada a su izquierda. Para obtener ms informacin sobre divisin de enteros, vea \ (Operador). Sobrecarga El operador \ se puede sobrecargar, lo que significa que una clase o una estructura pueden definir de nuevo su comportamiento cuando un operando tiene el tipo de dicha clase o estructura. La sobrecarga del operador \ afecta al comportamiento del operador \=. Si el cdigo utiliza \= en una clase o estructura que sobrecarga \, asegrese de conocer su comportamiento redefinido. Para obtener ms informacin, vea Procedimientos de operador. Ejemplo En el siguiente ejemplo se utiliza el operador \= para dividir una variable Integer por otra y asignar el resultado entero a la primera variable. Dim var1 AsInteger = 10 Dim var2 AsInteger = 3 var1 \= var2 ' The value of var1 is now 3. ^ (Operador, Visual Basic) Eleva un nmero a la potencia indicada por otro. number ^ exponent

Partes number Obligatoria. Cualquier expresin numrica. exponent Obligatoria. Cualquier expresin numrica. Resultado El resultado es number elevado a la potencia de exponent, siempre como un valor Double. Tipos admitidos Double. Operandos de cualquier tipo diferente se convierten a Double. Comentarios Visual Basic siempre realiza la exponenciacin en Double (Tipo de datos, Visual Basic). El valor de exponent puede ser fraccionario, negativo o ambos. Cuando se realizan varias exponenciaciones en una nica expresin, el operador ^ se evala a medida que se va encontrando de izquierda a derecha. Nota El operador ^ se puede sobrecargar, lo que significa que una clase o una estructura pueden definir de nuevo su comportamiento cuando un operando tiene el tipo de dicha clase o estructura. Si el cdigo utiliza este operador en una clase o estructura de este tipo, asegrese de conocer su comportamiento redefinido. Para obtener ms informacin, veaProcedimientos de operador.

Ejemplo En el ejemplo siguiente se utiliza el operador ^ para elevar un nmero a la potencia del exponente. El resultado ser el primer operando a la potencia del segundo. Dim exp1, exp2, exp3, exp4, exp5, exp6 AsDouble 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)

En el ejemplo anterior los resultados son: exp1 se establece en 4 (2 al cuadrado). exp2 se establece en 19683 (3 al cubo; a continuacin, ese valor se eleva al cubo). exp3 se establece en -125 (-5 al cubo). exp4 se establece en 625 (-5 elevado a la cuarta). exp5 se establece en 2 (raz cbica de 8). exp6 se establece en 0,5 (1,0 dividido por la raz cbica de 8). Observe la importancia de los parntesis en las expresiones del ejemplo anterior. Debido a la prioridad de operadores, Visual Basic normalmente calcula el operador ^ antes de cualquier otro, antes incluso que el operador unario . Si exp4 y exp6 se hubieran calculado sin parntesis, habran generado los resultados siguientes: exp4 = -5 ^ 4 se calcularan como - (5 elevado a cuatro), cuyo resultado sera -625. exp6 = 8 ^ -1.0 / 3.0 se calculara como (8 elevado a 1 o 0,125) dividido entre 3,0, cuyo resultado sera 0,041666666666666666666666666666667. ^= (Operador, Visual Basic) Eleva el valor de una variable o una propiedad a la potencia de una expresin y asigna el resultado de nuevo a la variable o la propiedad. variableorproperty ^= expression Partes variableorproperty Requerido. Cualquier propiedad o variable numrica. expression Requerido. Cualquier expresin numrica. Descripcin El elemento situado a la izquierda del operador ^= puede ser una variable escalar simple, una propiedad o un elemento de una matriz. La variable o la propiedad no pueden ser ReadOnly (Visual Basic). El operador ^= asigna el valor situado a su derecha a la variable o la propiedad situada a su izquierda. Visual Basic siempre realiza la exponenciacin en Double (Tipo de datos, Visual Basic). 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 ^ (Operador, Visual Basic) se puede sobrecargar, lo que significa que una clase o una estructura pueden definir de nuevo su comportamiento cuando un operando tiene el tipo de dicha clase o estructura. La sobrecarga del operador ^ afecta al comportamiento del operador ^=. Si el cdigo utiliza ^= en una clase o estructura que sobrecarga ^, asegrese de conocer su comportamiento redefinido. Para obtener ms informacin, vea Procedimientos de operador. Ejemplo En el siguiente ejemplo se utiliza 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. Dim var1 AsInteger = 10 Dim var2 AsInteger = 3 var1 ^= var2 ' The value of var1 is now 1000. .. + (Operador, Visual Basic) Suma dos nmeros o devuelve el valor positivo de una expresin numrica. Tambin se puede utilizar para concatenar dos expresiones de cadena.

expression1 + expression2 - or + expression1 Partes expression1 Obligatorio. Cualquier expresin numrica o de cadena. expression2 Obligatorio a menos que el operador + est calculando un valor negativo. Cualquier expresin numrica o de cadena. Resultado Si expression1 y expression2 son ambos numricos, el resultado es su suma aritmtica. Si expression2 est ausente, el operador + es el operador de identidad unario para el valor sin modificar de una expresin. En este sentido, la operacin trata de conservar el signo deexpression1, por lo que el resultado es negativo si expression1 es negativo. Si expression1 y expression2 son ambas cadenas, el resultado es la concatenacin de sus valores.

Si expression1 y expression2 son de tipos mixtos, la accin realizada depende de sus tipos, su contenido y la configuracin de Option Strict (Instruccin). Para obtener ms informacin, vea las tablas en "Comentarios". Tipos admitidos Todos los tipos numricos, incluidos los tipos de punto flotante y sin signo, Decimal y String. Descripcin En general, + realiza la suma aritmtica cuando es posible y slo concatena cuando ambas expresiones son cadenas. Si ninguna de las expresiones es Object, Visual Basic realiza las acciones siguientes. Tipos de datos de expresiones Ambas expresiones son tipos de datos numricos (SByte, Byte, Short,UShort, Integer, UInteger, Long, ULong, Deci mal, Single o Double) Accin del compilador Sumar. El tipo de datos resultante es un tipo numrico adecuado para los tipos de datos de expression1 yexpressio n2. Vea las tablas "Aritmtica de enteros" en Tipos de datos de resultados de operador. Deber concatenar. Si Option Strict es On, generar un error del compilador. Si Option Strict es Off, convertir implcitamente String en Double y sumar. Si String no puede convertirse en Double, producir una excepcin InvalidCastExc eption. Una expresin es numrica y la otra es Nothing (Visual Basic) Sumar, con Nothing evaluado como cero. Concatenar, con Nothing evaluado

Ambas expresiones son de tipo String Una expresin es numrica y la otra es una cadena

Una expresin es una cadena y la otra es Nothing

como " ". Si una de las expresiones es Object, Visual Basic realiza las acciones siguientes. Tipos de datos de expresiones Object expresin que contiene un valor numrico y la otra es un tipo de datos numrico Object expresin que contiene un valor numrico y la otra es de tipo String Accin del compilador Si Option Strict es On, generar un error del compilador. Si Option Strict es Off, sumar. Si Option Strict es On, generar un error del compilador. Si Option Strict es Off, convertir implcitamente String en Double y sumar. Si String no puede convertirse en Double, producir una excepcin InvalidCastException. Object expresin que contiene una cadena y la otra es un tipo de datos numrico Si Option Strict es On, generar un error del compilador. Si Option Strict es Off, convertir implcitamente la cadena Object en Double y sumar. Si la cadena Object no puede convertirse en Double, producir una excepcinInvalidCastException. Object expresin que contiene una cadena y la otra es de tipo String Si Option Strict es On, generar un error del compilador. Si Option Strict es Off, convertir implcitamente Object en String y concatenar. Si ambas son expresiones Object, Visual Basic realiza las acciones siguientes (slo Option Strict Off). Tipos de datos de expresiones Ambas expresiones Object contienen valores numricos Ambas expresiones Object son de tipo String Una expresin Object contiene un valor numrico y la otra, una cadena Accin del compilador Deber agregar. Deber concatenar. Convertir implcitamente la cadena Object en Double y sumar. Si la cadena Object no puede convertirse en un valor numrico, producir una excepcin InvalidCastException.

Si una de las expresiones Object se evala como Nothing o DBNull, el operador + la trata como String con un valor de " ". Nota Cuando utilice el operador +, puede que no logre determinar si se producir una suma o bien una concatenacin de cadenas. Use el operador & de concatenacin para eliminar ambigedades y ofrecer cdigo autoexplicativo. Sobrecarga El operador + se puede sobrecargar, lo que significa que una clase o una estructura pueden definir de nuevo su comportamiento cuando un operando tiene el tipo de dicha clase o estructura. Si el cdigo utiliza este operador en una clase o estructura de este tipo, asegrese de conocer su comportamiento redefinido. Para obtener ms informacin, vea Procedimientos de operador. Ejemplo En el ejemplo siguiente se usa el operador + para sumar nmeros. Si los operandos son ambos numricos, Visual Basic calcula el resultado aritmtico. El resultado aritmtico representa la suma de ambos operandos. Dim sumNumber AsInteger sumNumber = 2 + 2 sumNumber = 4257.04 + 98112 ' The preceding statements set sumNumber to 4 and 102369. El operador + tambin puede utilizarse para concatenar cadenas. Si los operandos son ambos cadenas, Visual Basic los concatena. El resultado de la concatenacin representa una cadena nica que consta del contenido de los dos operandos uno tras otro. Si los operandos son de tipos mixtos, el resultado depende de la configuracin de Option Strict (Instruccin). El ejemplo siguiente ilustra el resultado cuando Option Strict es On. Option Strict On Dim var1 AsString = "34" Dim var2 AsInteger = 6 Dim concatenatedNumber AsInteger = var1 + var2 ... ' The preceding statement generates a COMPILER ERROR. El ejemplo siguiente ilustra el resultado cuando Option Strict es Off. Option Strict Off Dim var1 AsString = "34" Dim var2 AsInteger = 6 Dim concatenatedNumber AsInteger = var1 + var2 ' The preceding statement returns 40 after the string in var1 is ' converted to a numeric value. This might be an unexpected result. ' We do not recommend use of Option Strict Off for these operations. Para eliminar la ambigedad, debera utilizar al operador & en lugar de + para la concatenacin.

+= (Operador, Visual Basic) Suma el valor de una expresin numrica al valor de una propiedad o variable numrica y asigna el resultado a la variable o a la propiedad. Tambin se puede utilizar para concatenar una expresin String con una propiedad o variable String y asignar el resultado a la variable o a la propiedad. variableorproperty += expression Partes variableorproperty Obligatoria. Cualquier propiedad o variable String numrica. expression Obligatoria. Cualquier expresin numrica o String. Comentarios El elemento situado a la izquierda del operador += puede ser una variable escalar simple, una propiedad o un elemento de una matriz. La variable o la propiedad no pueden ser ReadOnly (Visual Basic). El operador += asigna el valor situado a su derecha a la variable o la propiedad situada a su izquierda. Este operador de asignacin realizar implcitamente conversiones de ampliacin pero no de restriccin si el entorno de compilacin fuerza una semntica estricta. Para obtener ms informacin sobre estas conversiones, vea Conversiones de ampliacin y de restriccin. Para obtener ms informacin sobre semnticas de tipos permisivas y estrictas, vea Option Strict (Instruccin). Si se permite una semntica de tipos permisiva, el operador += realizar de forma implcita una serie de conversiones de cadenas o conversiones numricas idnticas a las que lleva a cabo el operador +. Para obtener informacin detallada sobre estas conversiones, vea + (Operador, Visual Basic). Nota Cuando utilice el operador +=, quizs no logre determinar si se producir una suma o una concatenacin de cadenas. Use el operador &= de concatenacin para eliminar ambigedades y ofrecer cdigo autoexplicativo. Sobrecarga El operador + se puede sobrecargar, lo que significa que una clase o una estructura pueden definir de nuevo su comportamiento cuando un operando tiene el tipo de dicha clase o estructura. La sobrecarga del operador + afecta al comportamiento del operador +=. Si el cdigo utiliza += en una clase o estructura que sobrecarga +, asegrese de conocer su comportamiento redefinido. Para obtener ms informacin, vea Procedimientos de operador.

Ejemplo En el ejemplo siguiente se utiliza el operador += para combinar el valor de una variable con otra. La primera parte utiliza += con variables numricas para sumar un valor a otro. La segunda parte utiliza += con variables String para concatenar un valor con otro. En ambos casos, el resultado se asigna a la primera variable. ' This part uses numeric variables. Dim num1 AsInteger = 10 Dim num2 AsInteger = 3 num1 += num2 ' This part uses string variables. Dim str1 AsString = "10" Dim str2 AsString = "3" str1 += str2

El valor de num1 es ahora 13 y el valor de str1 es ahora "103". = (Operador, Visual Basic) Asigna un valor a una variable o propiedad. variableorproperty = value Partes variableorproperty Cualquier variable o propiedad que se puede escribir. value Cualquier literal, constante o expresin. Comentarios El elemento situado a la izquierda 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 ReadOnly (Visual Basic). El operador = asigna el valor situado a su derecha a la variable o la propiedad situada a su izquierda. Nota El operador = tambin se utiliza como operador de comparacin. Para obtener informacin detallada, vea Operadores de comparacin (Visual Basic). Sobrecarga

El operador = slo se puede sobrecargar como un operador de comparacin relacional, no como un operador de asignacin. Para obtener ms informacin, vea Procedimientos de operador. Ejemplo El ejemplo siguiente muestra el operador de asignacin. El valor de la derecha se asigna a la variable de la izquierda. Dim testInt AsInteger Dim testString AsString Dim testButton As System.Windows.Forms.Button Dim testObject AsObject testInt = 42 testString = "This is an example of a string literal." testButton = New System.Windows.Forms.Button() testObject = testInt testObject = testString testObject = testButton .... -= (Operador, Visual Basic) Sustrae el valor de una expresin del valor de una variable o propiedad y asigna el resultado a la variable o propiedad. variableorproperty -= expression Partes variableorproperty Requerido. Cualquier propiedad o variable numrica. expression Requerido. Cualquier expresin numrica. Comentarios El elemento situado a la izquierda del operador -= puede ser una variable escalar simple, una propiedad o un elemento de una matriz. La variable o la propiedad no pueden ser ReadOnly (Visual Basic). El operador -= asigna el valor situado a su derecha a la variable o la propiedad situada a su izquierda. Sobrecarga El operador - (Operador, Visual Basic) se puede sobrecargar, lo que significa que una clase o una estructura pueden definir de nuevo su comportamiento cuando un operando tiene el tipo de dicha clase o estructura. La sobrecarga del operador - afecta al comportamiento del operador -=. Si el cdigo utiliza -= en una clase o estructura que sobrecarga -, asegrese de conocer su comportamiento redefinido. Para obtener ms informacin, vea Procedimientos de operador.

Ejemplo En el siguiente ejemplo se utiliza el operador -= para sustraer una variable Integer de otra y asignar el resultado a la ltima variable. Dim var1 AsInteger = 10 Dim var2 AsInteger = 3 var1 -= var2 ' The value of var1 is now 7.

INFOGRAFIA

Palabras reservadas visual Basic. http://msdn.microsoft.com/es-es/library/ksh7h19t%28d=printer,v=VS.90%29.aspx Palabras no reservadas http://msdn.microsoft.com/es-es/library/ksh7h19t%28v=VS.90%29.aspx clicos anidados, for para http://www.buenastareas.com/ensayos/Ciclos-De-Visual-Basic/594761.html Case, Repeat http://repiolas.ace.st/t33-ciclo-repeat http://html.rincondelvago.com/visual-basic_9.html

While http://html.rincondelvago.com/estructuras-algoritmicas.html.

ANEXOS

You might also like