1.VB - Guia de Programacion - convencionesDeCodigoYEscritura
1.VB - Guia de Programacion - convencionesDeCodigoYEscritura
1.VB - Guia de Programacion - convencionesDeCodigoYEscritura
ESTRUCTURA DE UN PROGRAMA DE VISUAL BASIC VERSIN DE VISUAL BASIC DEL PROGRAMA HOLA A TODOS PROCEDIMIENTO MAIN EN VISUAL BASIC REFERENCIAS Y LA INSTRUCCIN IMPORTS (VISUAL BASIC) ESPACIOS DE NOMBRES EN VISUAL BASIC CONVENCIONES DE NOMENCLATURA DE VISUAL BASIC CONVENCIONES DE CDIGO DE VISUAL BASIC COMPILACIN CONDICIONAL EN VISUAL BASIC CMO: INTERRUMPIR Y COMBINAR INSTRUCCIONES EN CDIGO (VISUAL BASIC) CMO: CONTRAER Y OCULTAR SECCIONES DE CDIGO (VISUAL BASIC) CMO: APLICAR ETIQUETAS A LAS INSTRUCCIONES (VISUAL BASIC) CARACTERES ESPECIALES EN CDIGO (VISUAL BASIC) COMENTARIOS EN EL CDIGO (VISUAL BASIC)
o o CMO: AGREGAR UN COMENTARIO AL CDIGO (VISUAL BASIC) DOCUMENTAR EL CDIGO CON XML (VB) PROCESAR EL ARCHIVO XML (VISUAL BASIC) CMO: CREAR DOCUMENTACIN XML
PALABRAS CLAVE COMO NOMBRES DE ELEMENTOS EN CDIGO (VISUAL BASIC) ME, MY, MYBASE Y MYCLASS EN VISUAL BASIC LIMITACIONES DE VISUAL BASIC
Caractersticas del lenguaje Visual Basic Interoperabilidad COM (Visual Basic) Cmo: Actualizar un proyecto de Visual Basic
Los temas siguientes presentan un conjunto de directrices de programacin para los programas de Visual Basic, junto con ejemplos de uso correcto.
Instrucciones Option
Las instrucciones Option establecen reglas de base para el cdigo subsiguiente, y de esta forma ayudan a prevenir errores de sintaxis y de lgica. Option Explicit (Instruccin, Visual Basic)3 garantiza que se declaran todas las variables y que se escriben correctamente, lo que reduce el tiempo de depuracin. La instruccin Option Strict (Instruccin)4 ayuda a reducir errores de lgica y prdidas de datos que puedan producirse al trabajar entre variables de diferentes tipos de datos. Option Compare (Instruccin)5 especifica la manera en que se comparan las cadenas entre s, segn sus valoresBinary o Text.
Instrucciones Imports
Puede incluir Instruccin Imports (Tipo y espacio de nombres de .NET) 6 para importar nombres definidos fuera del proyecto. Las instrucciones Imports permiten que el cdigo haga referencia a clases y otros tipos definidos en el espacio de nombres importado sin tener que calificarlos. Puede utilizar tantas instrucciones Imports como sea necesario. Para obtener ms informacin, vea Referencias y la instruccin Imports (Visual Basic)7.
Instrucciones Namespace
Los espacios de nombres ayudan a organizar y clasificar los elementos de programacin para facilitar la agrupacin y el acceso. Utiliza Namespace (Instruccin)8 para clasificar las instrucciones siguientes dentro de un espacio de nombres determinado. Para obtener ms informacin, vea Espacios de nombres en Visual Basic9.
Instruccin Class (Visual Basic)11 Structure (Instruccin)12 Module (Instruccin)13 Instruccin Interface (Visual Basic)14
Los elementos de datos en el nivel de espacio de nombres son las enumeraciones y los delegados.
Function (Instruccin, Visual Basic)15 Sub (Instruccin, Visual Basic)16 Declare (Instruccin)17 Operator (Instruccin)18 Property (Instruccin)19 Event (Instruccin)20
Los elementos de datos en el nivel de mdulo son las variables, las constantes, las enumeraciones y los delegados.
Procedimiento Main
El procedimiento Main es el primer cdigo que se ejecuta cuando se ha cargado su aplicacin. Main acta como punto de partida y control general de la aplicacin. Hay cuatro variedades de Main:
Sub Main() Sub Main(ByVal cmdArgs() As String) Function Main() As Integer Function Main(ByVal cmdArgs() As String) As Integer
La variedad ms comn de este procedimiento es Sub Main(). Para obtener ms informacin, vea Procedimiento Main en Visual Basic22.
Comentarios
La primera lnea del ejemplo contiene un comentario: VB ' A "Hello, World!" program in Visual Basic. La comilla sencilla (') indica que el resto de la lnea es un comentario y el compilador lo pasar por alto. Es posible tanto hacer un comentario en toda una lnea como anexar un comentario al final de otra instruccin, como se muestra a continuacin: VB MsgBox("Hello, World!") ' Display message on computer screen.
Procedimiento Main
Todas las aplicaciones de Visual Basic deben contener un procedimiento denominado Main.Este procedimiento sirve como punto de partida y control general de la aplicacin. Se llama cuando se carga el mdulo. Hay cuatro variedades de Main: Sub Main() Sub Main(ByVal cmdArgs() As String) Function Main() As Integer Function Main(ByVal cmdArgs() As String) As Integer La variedad ms comn de este procedimiento es Sub Main(). A menos que vaya a crear una aplicacin de Windows Forms, debe escribir el procedimiento Main para las aplicaciones que se ejecutan por s solas. Para obtener ms informacin, vea Procedimiento Main en Visual Basic.
Entrada y salida
Este ejemplo utiliza la biblioteca estndar en tiempo de ejecucin de Visual Basic, a la que se puede obtener acceso a travs del espacio de nombres de Microsoft.VisualBasic. Si compila el programa en el entorno de desarrollo integrado (IDE), puede utilizar todos los procedimientos y las propiedades de Microsoft.VisualBasic sin importarlo. Si compila desde la lnea de comandos, debe utilizar Instruccin Imports (Tipo y espacio de nombres de .NET) en el cdigo fuente o la opcin de lnea de comandos /imports (Visual Basic) del compilador para que los miembros de Microsoft.VisualBasic estn disponibles en el programa. El procedimiento Main llama a la funcin MsgBox para mostrar un cuadro de mensaje que contiene la cadena "Hola a todos": VB MsgBox("Hello, World!") ' Display message on computer screen.
Compilacin y ejecucin
El programa "Hola a todos" se puede compilar en el entorno de desarrollo integrado (IDE) de Visual Studio, o bien mediante la lnea de comandos.
Nota
Si se declara Main en una clase, hay que utilizar la palabra clave Shared. En un mdulo,Main no necesita ser Shared.
La manera ms simple es declarar un procedimiento Sub que no toma los argumentos ni devuelve un valor. Module mainModule Sub Main() MsgBox("The Main procedure is starting the application.") ' Insert call to appropriate starting place in your code. MsgBox("The application is terminating.") End Sub End Module
Main tambin puede devolver un valor Integer, que el sistema operativo utiliza como cdigo de salida del programa. Otros programas pueden comprobar este cdigo examinando el valor de ERRORLEVEL de Windows. Para devolver un cdigo de salida, se debe declarar Main como un procedimiento Function, no como un procedimientoSub. Module mainModule Function Main() As Integer MsgBox("The Main procedure is starting the application.") Dim returnValue As Integer = 0 ' Insert call to appropriate starting place in your code. ' On return, assign appropriate value to returnValue. ' 0 usually means successful completion. MsgBox("The application is terminating with error level " & CStr(returnValue) & ".") Return returnValue End Function End Module Main tambin puede tomar como argumento una matriz de tipo String. Cada cadena de la matriz contiene uno de los argumentos de lnea de comandos que se utiliza para invocar el programa. Puede tomar acciones distintas en funcin de sus valores. Module mainModule Function Main(ByVal cmdArgs() As String) As Integer MsgBox("The Main procedure is starting the application.") Dim returnValue As Integer = 0 ' See if there are any arguments. If cmdArgs.Length > 0 Then For argNum As Integer = 0 To UBound(cmdArgs, 1) ' Insert code to examine cmdArgs(argNum) and take ' appropriate action based on its value. Next argNum End If ' Insert call to appropriate starting place in your code. ' On return, assign appropriate value to returnValue. ' 0 usually means successful completion. MsgBox("The application is terminating with error level " & CStr(returnValue) & ".") Return returnValue End Function End Module Se puede declarar Main para examinar los argumentos de lnea de comandos pero no devolver un cdigo de salida, de la manera siguiente. Module mainModule Sub Main(ByVal cmdArgs() As String) MsgBox("The Main procedure is starting the application.") Dim returnValue As Integer = 0 ' See if there are any arguments. If cmdArgs.Length > 0 Then For argNum As Integer = 0 To UBound(cmdArgs, 1) ' Insert code to examine cmdArgs(argNum) and take ' appropriate action based on its value. Next argNum End If ' Insert call to appropriate starting place in your code. MsgBox("The application is terminating.") End Sub End Module
Instruccin Imports
Los ensamblados incluyen uno o varios espacios de nombres. Cuando se agrega una referencia a un ensamblado, tambin puede agregarse una instruccin Imports a un mdulo para controlar la visibilidad de los espacios de nombres del ensamblado dentro del mdulo.La instruccin Imports proporciona un contexto de control de mbito que permite utilizar solamente la parte del espacio de nombres necesaria para suministrar una referencia nica. La instruccin Imports tiene la siguiente sintaxis: Imports [ | Aliasname =] Namespace Aliasname hace referencia a un nombre corto que se puede utilizar en el cdigo para referirse a un espacio de nombres importado. Namespace es un espacio de nombres que est disponible mediante una referencia de proyecto, una definicin dentro del proyecto o una instruccin Imports anterior. Un mdulo puede contener cualquier nmero de instrucciones Imports. stas deben aparecer detrs de las instrucciones Option, si hay alguna, pero antes de cualquier otro cdigo.
Nota
No hay que confundir las referencias de proyecto con las instrucciones Imports oDeclare. Las referencias de proyecto hacen que los objetos externos, como los objetos de ensamblados, estn disponibles para los proyectos de Visual Basic. La instruccin Importsse utiliza para simplificar el acceso a las referencias de proyecto, pero no facilita el acceso a dichos objetos. La instruccin Declare se utiliza para declarar una referencia a un procedimiento externo de una biblioteca de vnculos dinmicos (DLL).
Para utilizar esta constante en un programa que no tenga un alias, debe escribir el siguiente fragmento de cdigo: VB MsgBox("Some text" & Microsoft.VisualBasic.ControlChars.CrLf & "Some more text") Las instrucciones Imports deben aparecer siempre en las primeras lneas, inmediatamente despus de cualquier instruccin Option de un mdulo. El fragmento de cdigo siguiente muestra cmo se importa y se asigna un alias al mdulo Microsoft.VisualBasic.ControlChars: VB Imports CtrlChrs = Microsoft.VisualBasic.ControlChars Las referencias que despus se hagan a este espacio de nombres pueden ser mucho ms breves: VB MsgBox("Some text" & CtrlChrs.CrLf & "Some more text") Si una instruccin Imports no incluye un nombre de alias, los elementos definidos en el espacio de nombres importado pueden utilizarse en el mdulo sin calificacin. Si se especifica el nombre del alias, debe utilizarse como calificador de los nombres contenidos en dicho espacio de nombres.
' Define a new object based on your ListBox class. Dim LBC As New ListBox ' Define a new Windows.Forms ListBox control. Dim MyLB As New System.Windows.Forms.ListBox
La siguiente ilustracin muestra dos jerarquas de espacios de nombres; ambas contienen un objeto denominado ListBox.
De forma predeterminada, todos los archivos ejecutables creados con Visual Basic contienen un espacio de nombres cuyo nombre es igual que el del proyecto. Por ejemplo, si se define un objeto en un proyecto denominado ListBoxProject, el archivo ejecutable, ListBoxProject.exe, contendr un espacio de nombres denominado ListBoxProject. Varios ensamblados pueden usar el mismo espacio de nombres. Visual Basic los trata como un solo conjunto de nombres. Por ejemplo, pueden definirse clases para un espacio de nombres denominado SomeNameSpace en un ensamblado denominado Assemb1, y definirse clases adicionales para el mismo espacio de nombres desde un ensamblado denominado Assemb2.
Nombres completos
Los nombres completos son referencias de objetos que llevan como prefijo el nombre del espacio de nombres en el que est definido el objeto. Si se crea una referencia a la clase (eligiendo Agregar referencia del men Proyecto) se pueden utilizar objetos definidos en otros proyectos y, despus, utilizar el nombre completo del objeto en el cdigo. En el fragmento de cdigo siguiente se muestra cmo utilizar el nombre completo para un objeto del espacio de nombres de otro proyecto:
VB Dim LBC As New ListBoxProject.Form1.ListBox Los nombres completos evitan los conflictos de nombres porque permiten al compilador determinar qu objeto se utiliza. No obstante, los nombres pueden llegar a ser largos y complicados. Para solucionar este problema, puede utilizar la instruccin Imports para definir un alias, es decir, un nombre abreviado que sustituya al nombre completo. Por ejemplo, en el cdigo siguiente se crean alias para dos nombres completos y se utilizan para definir dos objetos. VB
Imports LBControl = System.Windows.Forms.ListBox Imports MyListBox = ListBoxProject.Form1.ListBox VB Dim LBC As LBControl Dim MyLB As MyListBox Si utiliza la instruccin Imports sin un alias, puede utilizar todos los nombres del espacio de nombres sin calificacin, a condicin de que sean nicos en el proyecto. Si el proyecto contiene instrucciones Imports para espacios de nombres que contienen elementos con el mismo nombre, deber usar nombres completos. Supongamos, por ejemplo, que el proyecto contiene estas instrucciones Imports: VB ' This namespace contains a class called Class1. Imports MyProj1 ' This namespace also contains a class called Class1. Imports MyProj2
Si intenta usar Class1 sin que su nombre sea completo, Visual Basic genera un error para indicar que el nombre de Class1 es ambiguo.
A la nomenclatura se aplican las siguientes sugerencias. Empiece cada palabra independiente de un nombre con una letra mayscula, como enFindLastRecord y RedrawMyForm. Empiece los nombres de mtodo y de funcin con un verbo, como en InitNameArrayo CloseDialog. Empiece los nombres de clase, estructura, mdulo y propiedad con un nombre, como enEmployeeName o CarAccessory. Empiece los nombres de interfaz con el prefijo "I", seguido de un nombre o una frase nominal, como IComponent, o con un adjetivo que describa el comportamiento de la interfaz, como IPersistable. No utilice el subrayado, y utilice lo menos posible las abreviaturas, ya que pueden causar confusiones. Empiece los nombres de controlador de eventos con un nombre que describa el tipo de evento seguido por el sufijo "EventHandler", como en "MouseEventHandler". En nombres de clases de argumento de evento, incluya el sufijo "EventArgs". Si un evento tiene un concepto de antes o despus, utilice un sufijo en tiempo presente o pasado, como en "ControlAdd" o "ControlAdded". Para trminos largos o utilizados con frecuencia, utilice abreviaturas para mantener las longitudes de los nombres dentro un lmite razonable, por ejemplo, "HTML" en lugar de "Lenguaje de marcado de hipertexto". En general, los nombres de variable con ms de 32 caracteres son difciles de leer en una pantalla configurada para una resolucin baja.Adems, asegrese de que sus abreviaturas sean coherentes a lo largo de toda la aplicacin. Si utiliza indistinta y aleatoriamente "HTML" y "Lenguaje de marcado de hipertexto" en un mismo proyecto, puede provocar confusin. Evite utilizar nombres que en un entorno interno sean iguales que otros nombres de un entorno externo. Se producirn errores si se obtiene acceso a la variable equivocada. Si se produce un conflicto entre una variable y la palabra clave del mismo nombre, debe identificar la palabra clave ponindole delante la biblioteca de tipos adecuada. Por ejemplo, si tiene una variable denominada Date, slo puede utilizar la funcin intrnsecaDate llamando a DateTime.Date.
Explicacin
Convenciones de nomenclatura
Las directrices de nomenclatura se tratan en Instrucciones de diseo para desarrollar bibliotecas de clases. No tiene que cambiar el nombre de los objetos que se hayan creado con las herramientas de diseo de Visual Studio para que se ajusten a estas directrices. Utilice las calificaciones de espacios de nombres en lugar de agregar instrucciones Imports. Si un espacio de nombres se importa de manera predeterminada en un proyecto, no tiene que utilizar nombres completos en el cdigo porque se ejecutar sin calificar con IntelliSense cuando se copie y se pegue. Al dividir lneas largas de cdigo para facilitar la lectura del cdigo, los nombres completos pueden cortarse despus del "." Por ejemplo: VB Dim collection As System.Diagnostics. InstanceDataCollectionCollection No utilice "Mi" o "mi" como parte de un nombre de variable. Esto crea confusin con los objetos My.
Convenciones de diseo
Un diseo apropiado utiliza formatos para hacer hincapi en la estructura del cdigo y facilitar su lectura. Utilice la caracterstica de lista descriptiva para dar formato al cdigo con la configuracin predeterminada (sangra automtica, sangras de 4 caracteres, guardar tabuladores como espacios). Para obtener ms informacin, vea Opciones especficas de VB, Basic, Editor de texto, Opciones (Cuadro de dilogo). Utilice slo una instruccin por lnea. No utilice el carcter (:) de continuacin de lnea de Visual Basic. Utilice slo una declaracin por lnea. Si la lista descriptiva no da formato a las lneas de continuacin, aplique una sangra de una posicin de tabulacin a las lneas de continuacin. Agregue al menos una lnea en blanco entre el mtodo y las definiciones de propiedad.
Convenciones de lenguaje
String (Tipo de datos) Utilice & para concatenar cadenas: VB MsgBox("hello" & vbCrLf & "goodbye") Para anexar cadenas en bucles, utilice el objeto StringBuilder: VB Dim longString As New System.Text.StringBuilder For count As Integer = 1 To 1000 longString.Append(count) Next Inferencia de tipo Saque partido de la inferencia de tipos para las variables locales: VB Public Sub GetQuery() Dim filterValue = "London" Dim query = From customer In customers Where customer.Country = filterValue End Sub Delegados flexibles en controladores de eventos Utilice delegados flexibles y omita argumentos de evento si no est utilizando argumentos de evento en el cdigo: VB Public Sub Form1_Load() Handles Form1.Load End Sub
Tipo de datos sin signo Utilice Integer en lugar de tipos sin signo a menos que la memoria sea insuficiente.
Matrices Utilice la sintaxis abreviada al inicializar las matrices en la lnea de declaracin: VB Dim letters1() As String = {"a", "b", "c"} en lugar de: VB Dim letters2() As String = New String() {"a", "b", "c"}
Site el designador de la matriz en la variable, no en el tipo: VB Dim letters3() As String = {"a", "b", "c"} en lugar de: VB Dim letters4 As String() = {"a", "b", "c"}
Utilice la sintaxis {} al declarar e inicializar matrices de tipos de datos bsicos: VB Dim letters5() As String = {"a", "b", "c"} en lugar de: VB Dim letters6(2) As String letters6(0) = "a" letters6(1) = "b" letters6(2) = "c"
Utilice la palabra clave With Cuando utilice una serie de llamadas a un objeto, considere la posibilidad de utilizar la palabra clave With.
VB With orderLog .Log = "Application" .Source = "Application Name" .MachineName = "Computer Name" End With Utilizar la inferencia de tipos para variables de bucle en instrucciones For o For Each Permita que la inferencia de tipos determine el tipo de variable de intervalo de bucle. A continuacin hay un ejemplo de cmo se utiliza la inferencia de tipos en una instruccinFor: VB For count = 0 To 2 MsgBox(names(count)) Next A continuacin hay un ejemplo de cmo se utiliza la inferencia de tipos en una instruccinFor Each: VB For Each name In names MsgBox(name) Next Utilizar las instrucciones Try...Catch y Using para el control de excepciones No utilice On Error Goto. Para controlar las excepciones, utilice una instruccin Try...Catch: VB Dim conn As New SqlConnection("connection string") Try Conn.Open() Catch ex As SqlException Finally Conn.Close() End Try La instruccin Using combina una instruccin Try...Catch con una llamada al mtodoDispose y simplifica el cdigo. Si est utilizando una instruccin Try...Catch y el nico cdigo en el bloque Finally es una llamada al mtodo Dispose, utilice la instruccinUsing en su lugar. VB Using redPen As New Pen(color.Red) ' Insert code here.
End Using Utilizar la palabra clave IsNot Utilice preferentemente la palabra clave IsNot a Not...Is Nothing. Utilizar las palabras clave AndAlso y OrElse Para evitar excepciones y aumentar el rendimiento omitiendo el cdigo innecesario, utiliceAndAlso en lugar de And y OrElse en lugar de Or al realizar las comparaciones: VB ' Avoid a null reference exception. If the left side of the AndAlso ' operator is False, the right side is not evaluated and a null ' exception is not thrown. If nullableObject IsNot Nothing AndAlso nullableObject = testValue Then End If ' Avoid an unnecessary resource-intensive operation. If the left side ' of the OrElse operator is True, the right side is not evaluated and ' a resource-intensive operation is not called. If testCondition OrElse ResourceIntensiveOperation() Then End If Instancias de formularios predeterminadas Utilice Form1.ShowDialog en lugar de My.Forms.Form1.ShowDialog. New (Palabra clave) Utilice la creacin de instancias abreviadas: VB Dim employees As New List(Of String) La lnea anterior es equivalente a esto: VB Dim employees2 As List(Of String) = New List(Of String) Utilice los inicializadores de objeto para los nuevos objetos en lugar del constructor sin parmetros: VB Dim orderLog As New EventLog With { .Log = "Application", .Source = "Application Name",
.MachineName = "Computer Name"} Control de eventos Utilice Handles en lugar de AddHandler. VB Private Sub ToolStripMenuItem1_Click() Handles ToolStripMenuItem1.Click End Sub Utilice AddressOf y no cree instancias explcitas del delegado: VB Dim closeItem As New ToolStripMenuItem( "Close", Nothing, AddressOf ToolStripMenuItem1_Click) Me.MainMenuStrip.Items.Add(closeItem) Cuando defina un evento, utilice la sintaxis corta y permita que el compilador defina el delegado: VB Public Event WhatHappened(ByVal source As Object, ByVal e As WhatHappenedEventArgs) No compruebe si un evento es Nothing (null) antes de llamar al mtodo RaiseEvent.RaiseEvent comprueba Nothing antes de generar el evento.
Utilizar miembros compartidos Llame a los miembros Shared utilizando el nombre de clase y no una variable de instancia. Utilizar la funcin MsgBox Utilice MsgBox en lugar de MessageBox.Show o Console.WriteLine. En entornos que no admiten la funcin MsgBox, como Silverlight, utilice una alternativa adecuada. Utilice el espacio de nombres My Utilice las caractersticas My en preferencia a la biblioteca de clases de .NET Framework o a la biblioteca en tiempo de ejecucin de Visual Basic. Para obtener ms informacin, vea Objetos (Visual Basic). Utilizar literales XML Los literales XML simplifican las tareas ms comunes con las que se encuentra al trabajar con XML (por ejemplo, cargar, consultar y transformar). Al desarrollar con XML, siga estas instrucciones:
Utilice literales XML para crear documentos y fragmentos XML en lugar de llamar directamente a API XML. Importe espacios de nombres XML al archivo o nivel de proyecto para sacar partido de la optimizacin del rendimiento para los literales XML. Utilice las propiedades de eje XML para tener acceso a elementos y atributos en un documento XML. Utilice expresiones incrustadas para incluir valores y crear XML a partir de valores existentes en lugar de utilizar llamadas de API como el mtodo Add: VB Private Function GetHtmlDocument( ByVal items As IEnumerable(Of XElement)) As String Dim htmlDoc = <html> <body> <table border="0" cellspacing="2"> <%= From item In items Select <tr> <td style="width:480"> <%= item.<title>.Value %> </td> <td><%= item.<pubDate>.Value %></td> </tr> %> </table> </body> </html> Return htmlDoc.ToString() End Function
Consultas LINQ Utilice nombres descriptivos para las variables de consulta: VB Dim seattleCustomers = From cust In customers Where cust.City = "Seattle" Cree alias de elementos en una consulta para asegurarse de que los nombres de propiedad de tipos annimos se escriben con las maysculas correctas mediante la grafa Pascal: VB Dim customerOrders = From customer In customers Join order In orders On customer.CustomerID Equals order.CustomerID Select Customer = customer, Order = order
Cambie el nombre de las propiedades cuando los nombres de propiedad en el resultado puedan ser ambiguos. Por ejemplo, si la consulta devuelve un nombre de cliente y un Id. de pedido, en lugar de dejarlos como Name e ID en el resultado, cmbieles el nombre: VB Dim customerOrders2 = From cust In customers Join ord In orders On cust.CustomerID Equals ord.CustomerID Select CustomerName = cust.Name, OrderID = ord.ID
Dim customerList = From cust In customers Alinee las clusulas de consulta bajo la instruccin From: VB Dim newyorkCustomers = From cust In customers Where cust.City = "New York" Select cust.LastName, cust.CompanyName Utilice las clusulas Where antes de otras clusulas de consulta para asegurarse de que las clusulas de consulta posteriores operen en el conjunto de datos reducido y filtrado: VB Dim newyorkCustomers2 = From cust In customers Where cust.City = "New York" Order By cust.LastName Utilice la clusula Join para definir explcitamente una combinacin en lugar de utilizar la clusula Where para definir implcitamente una combinacin: VB Dim customerList2 = From cust In customers Join order In orders On cust.CustomerID Equals order.CustomerID Select cust, order Utilice los miembros de la biblioteca en tiempo de ejecucin de Visual Basic Utilice la biblioteca en tiempo de ejecucin de Visual Basic en preferencia a la biblioteca de clases de .NET Framework.
Nota
Autocompletar no funcionar al editar cdigo y utiliza directivas de compilacin condicional si el cdigo no forma parte de la bifurcacin actual.
Las constantes de compilacin condicional tienen un mbito especial y no est permitido el acceso a ellas desde el cdigo estndar. El mbito de una constante de compilacin condicional depende de cmo se ha definido. En la tabla siguiente se muestra una lista del mbito de las constantes declaradas siguiendo los tres mtodos antes mencionados.
mbito de la constante
Pblico para todos los archivos del proyecto Pblico para todos los archivos que se pasen al compilador de la lnea de comandos Privado para el archivo en que se declara
Antes de crear el archivo ejecutable, defina las constantes en el Diseador de proyectos siguiendo el procedimiento descrito en Cmo: Modificar las propiedades y los valores de configuracin del proyecto.
Use el modificador /d para especificar constantes de compilacin condicional, como en el ejemplo siguiente:
vbc MyProj.vb /d:conFrenchVersion=1:conANSI=0
No se requiere un espacio entre el modificador /d y la primera constante. Para obtener ms informacin, vea /define (Visual Basic). Las declaraciones de la lnea de comandos reemplazan las especificadas en elDiseador de proyectos, pero no las borran. Los argumentos definidos en elDiseador de proyectos permanecen activos durante las compilaciones subsiguientes. A la hora de escribir constantes en el propio cdigo no existen reglas estrictas en cuanto a su ubicacin, puesto que su mbito es el mdulo completo en el que se declaran. Para definir constantes en el cdigo
Site las constantes en el bloque de declaracin del mdulo en el que se utilicen. De esta forma se facilitan la organizacin del cdigo y su lectura.
Nota
El carcter de continuacin de lnea es necesariamente lo ltimo que aparece en una lnea. No es posible agregar nada ms en la misma lnea.
Existen algunas restricciones respecto al uso del carcter de continuacin de lnea en determinadas posiciones, como en medio de un nombre de argumento. Puede segmentar una lista de argumentos con el carcter de continuacin de lnea, pero los nombres individuales de los argumentos deben permanecer intactos.
Nota
No es posible continuar un comentario mediante el carcter de continuacin de lnea. Una vez que se inicia un comentario, el compilador no busca ningn significado especial en los caracteres. Para insertar un comentario de mltiples lneas, repita el smbolo de comentario en cada lnea (').
Aunque el mtodo recomendado consiste en colocar cada instruccin en una lnea independiente, Visual Basic tambin permite colocar varias instrucciones en la misma lnea.
El bloque #Region puede utilizarse varias veces en un archivo de cdigo; de esta forma, los usuarios pueden definir sus propios bloques de procedimientos y clases que, a su vez, pueden contraerse. Los bloques #Region tambin pueden anidarse dentro de otros bloques #Region.
Nota
Al ocultar el cdigo no evita que ste se compile, y no afecta a las instrucciones#If...#End If.
Nota
Las etiquetas slo se pueden utilizar en instrucciones ejecutables dentro de mtodos.
Parntesis
Utilice parntesis al definir un procedimiento, como Sub o Function. Debe incluir entre parntesis todas las listas de argumentos de los procedimientos. Tambin se utilizan parntesis para agrupar las variables o argumentos en grupos lgicos, en particular para reemplazar el orden predeterminado de prioridad de operadores en una expresin compleja.Esto se ilustra en el siguiente ejemplo: VB Dim a = b = c = d = e = a, b, c, d, e As Double 3.2 7.6 2 b + c / a (b + c) / a
Tras la ejecucin del cdigo anterior, el valor de d es 8,225 y el valor de e es 3. El clculo de dutiliza la prioridad predeterminada de / sobre + y es equivalente a d = b + (c / a). Los parntesis del clculo para e reemplazan la prioridad predeterminada.
Separadores
Los separadores hacen lo que su nombre sugiere; separan secciones de cdigo. En Visual Basic, el carcter separador corresponde a los dos puntos (:). Utilice los separadores se desea incluir varias instrucciones en una nica lnea en lugar de escribirlas en lneas independientes.Esto ahorra espacio y mejora la legibilidad del cdigo. En el ejemplo siguiente se muestran tres instrucciones separadas por dos puntos. VB a = 3.2 : b = 7.6 : c = 2 Para obtener ms informacin, vea Cmo: Interrumpir y combinar instrucciones en cdigo (Visual Basic). El carcter de dos puntos (:) tambin se utiliza para identificar una etiqueta de instruccin.Para obtener ms informacin, vea Cmo: Aplicar etiquetas a las instrucciones (Visual Basic).
Concatenacin
Utilice el operador & para concatenar o vincular cadenas entre s. No lo confunda con el operador +, que suma valores numricos. Si utiliza el operador + para concatenar cuando est operando con valores numricos, puede obtener resultados no deseados. En el siguiente ejemplo se muestra cmo. VB
var1 = "10.01" var2 = 11 resultA = var1 + var2 resultB = var1 & var2 Siguiendo la ejecucin del cdigo anterior, el valor de resultA es 21,01 y el valor deresultB es "10,0111".
VB Dim nextForm As New System.Windows.Forms.Form ' Access Text member (property) of Form class (on nextForm object). nextForm.Text = "This is the next form" ' Access Close member (method) on nextForm. nextForm.Close()
Nota
Las referencias a colecciones predeterminadas deben ser explcitas. En particular, no es posible utilizar el operador ! en una variable de enlace en tiempo de ejecucin.
El carcter ! tambin se utiliza como carcter de tipo Single.
Describe qu hace el procedimiento (no cmo lo hace). Enumera cada variable externa, control, archivo abierto u otro elemento al cual el procedimiento tenga acceso.
Efectos
Enumera cada variable externa, control o archivo que est afectado, y el efecto que tienen (nicamente si no es evidente). Especifica el propsito del argumento. Explica los valores que devuelve el procedimiento
Recuerde los siguientes puntos: Cada declaracin de variable importante debe incluir un comentario anterior que describa el uso de la variable que se declara. Las variables, controles y procedimientos deben tener un nombre lo suficientemente claro para asegurar que el uso de comentarios slo sea necesario para detalles de implementacin compleja. Despus de la secuencia de continuacin de lnea no puede escribirse un comentario en la misma lnea.
Puede agregar o quitar smbolos de comentario de un bloque de cdigo seleccionando una o ms lneas de cdigo y eligiendo los botones Seleccin con comentarios ( sin comentarios ( ) de la barra de herramientas Edicin. ) y Seleccin
Nota
Tambin puede agregar comentarios al cdigo poniendo la palabra clave REM antes del texto. Sin embargo, el smbolo ' y los botones Seleccin con comentarios y Seleccin sin comentarios son ms fciles de utilizar y requieren menos espacio y memoria.
Ejemplo
VB ' This entire line is a comment. Dim DailyTotal As Decimal = 0 ' Sales total for today. ' This comment is so long that it requires more than one line, so ' the comment character (') must be repeated on the second line.
Este ejemplo de cdigo tambin est disponible como fragmento de cdigo de IntelliSense.En el selector de fragmentos de cdigo, se encuentra en Lenguaje Visual Basic. Para obtener ms informacin, vea Fragmentos de cdigo de IntelliSense de Visual Basic.
Compilar el cdigo
Este ejemplo necesita: Una referencia al espacio de nombres System.
Nota
No es posible continuar un comentario utilizando la secuencia de continuacin de lnea ( _). Deber repetir el carcter de comentario (') al principio de cada lnea de comentario.
descritos en la documentacin. Si la comprobacin no tiene xito, el compilador emite una advertencia. El atributo cref se puede asociar a cualquier etiqueta para proporcionar una referencia a un elemento de cdigo. El compilador comprueba si existe ese elemento de cdigo. Si la comprobacin no tiene xito, el compilador emite una advertencia. El compilador tambin respeta cualquier instruccin Importscuando busca un tipo descrito en el atributo cref. La etiqueta <summary> la utiliza IntelliSense en Visual Studio para mostrar informacin adicional sobre un tipo o miembro.
Carcter Descripcin N Espacio de nombres No se pueden agregar comentarios de documentacin a un espacio de nombres, pero, si se admiten, se pueden hacer referencias CREF a ellos. T F P M E tipo: Class, Module, Interface, Structure, Enum, Delegate campo: Dim propiedad: Property (incluidas las propiedades predeterminadas) mtodo: Sub, Function, Declare, Operator evento: Event
cadena de error El resto de la cadena proporciona informacin acerca del error. El compilador de Visual Basic genera informacin de error para los vnculos que no se pueden resolver.
La segunda parte de String es el nombre completo del elemento, que comienza en la raz del espacio de nombres. El nombre del elemento, los tipos contenedores y el espacio de nombres se separan mediante puntos. Si el propio nombre del elemento contiene puntos, stos se reemplazan por el signo (#). Se supone que ningn elemento contiene un signo # directamente en su nombre. Por ejemplo, el nombre completo del constructor de String sera System.String.#ctor. Para propiedades y mtodos, si existen argumentos para el mtodo, la lista de argumentos que se encuentra entre parntesis aparece a continuacin. Si no existen argumentos, no se escribe ningn parntesis. Los argumentos se separan por comas. La codificacin de cada argumento indica directamente cmo se codifica en una firma de .NET Framework.
Ejemplo
Los siguientes ejemplos muestran cmo se generaran las cadenas de id. para una clase y sus miembros: VB Namespace SampleNamespace ''' <summary>Signature is ''' "T:SampleNamespace.SampleClass" ''' </summary> Public Class SampleClass ''' <summary>Signature is ''' "M:SampleNamespace.SampleClass.#ctor" ''' </summary> Public Sub New() End Sub ''' <summary>Signature is ''' "M:SampleNamespace.SampleClass.#ctor(System.Int32)" ''' </summary> Public Sub New(ByVal i As Integer) End Sub ''' <summary>Signature is ''' "F:SampleNamespace.SampleClass.SampleField" ''' </summary>
''' "F:SampleNamespace.SampleClass.SampleConstant" ''' </summary> Public Const SampleConstant As Integer = 42 ''' <summary>Signature is ''' "M:SampleNamespace.SampleClass.SampleFunction" ''' </summary> Public Function SampleFunction() As Integer End Function ''' <summary>Signature is ''' "M:SampleNamespace.SampleClass. ''' SampleFunction(System.Int16[],System.Int32[0:,0:])" ''' </summary> Public Function SampleFunction( ByVal array1D() As Short, ByVal array2D(,) As Integer) As Integer End Function ''' <summary>Signature is ''' "M:SampleNamespace.SampleClass. ''' op_Addition(SampleNamespace.SampleClass, ''' SampleNamespace.SampleClass)" ''' </summary> Public Shared Operator +( ByVal operand1 As SampleClass, ByVal operand2 As SampleClass) As SampleClass Return Nothing End Operator ''' <summary>Signature is ''' "P:SampleNamespace.SampleClass.SampleProperty" ''' </summary> Public Property SampleProperty() As Integer Get End Get Set(ByVal value As Integer) End Set End Property ''' <summary>Signature is ''' "P:SampleNamespace.SampleClass.Item(System.String)" ''' </summary> Default Public ReadOnly Property Item( ByVal s As String) As Integer Get End Get End Property
''' <summary>Signature is ''' "T:SampleNamespace.SampleClass.NestedClass" ''' </summary> Public Class NestedClass End Class ''' <summary>Signature is ''' "E:SampleNamespace.SampleClass.SampleEvent(System.Int32)" ''' </summary> Public Event SampleEvent As SampleDelegate ''' <summary>Signature is ''' "T:SampleNamespace.SampleClass.SampleDelegate" ''' </summary> Public Delegate Sub SampleDelegate(ByVal i As Integer) End Class End Namespace
Nota
Es posible que su equipo muestre nombres o ubicaciones diferentes para algunos de los elementos de la interfaz de usuario de Visual Studio incluidos en las instrucciones siguientes. La edicin de Visual Studio que se tenga y la configuracin que se utilice determinan estos elementos. Para obtener ms informacin, vea Valores de configuracin de Visual Studio.
Para crear documentacin XML para un tipo o miembro
1. 2. En el Editor de cdigo, coloque el cursor en la lnea situada encima del tipo o miembro para el que desea crear la documentacin. Escriba ''' (tres comillas simples). Se agrega una estructura XML para el tipo o miembro en el Editor de cdigo. 3. Agregue informacin descriptiva entre las etiquetas adecuadas.
Nota
Si agrega lneas adicionales dentro del bloque de documentacin XML, cada lnea debe comenzar con '''.
4.
Agregue cdigo adicional que utilice el tipo o miembro con los nuevos comentarios de documentacin XML. IntelliSense muestra el texto de la etiqueta <summary> para el tipo o miembro.
5.
Compile el cdigo para generar un archivo XML que incluya los comentarios de la documentacin. Para obtener ms informacin, vea /doc.
Nota
El programa tambin puede incluir nombres de elementos proporcionados por otros ensamblados a los que se haya hecho referencia. Si estos nombres estn en conflicto con palabras clave restringidas, colocarlos entre corchetes hace que Visual Basic los interprete como elementos definidos por el programador.
Me
La palabra clave Me siempre hace referencia a la instancia especfica de una clase o estructura donde se est ejecutando el cdigo. 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 como argumento la instancia actual de la claseForm mediante la instruccin siguiente. ChangeFormColor(Me)
My
La caracterstica My proporciona acceso fcil e intuitivo a una serie de clases de .NET Framework, lo que permite que el usuario de Visual Basic interacte con el equipo, la aplicacin, la configuracin, los recursos, etc.
MyBase
La palabra clave MyBase se comporta como una variable de objeto que hace referencia a la clase base de la instancia actual de una clase. MyBase suele usarse para obtener acceso a los miembros de la clase base que se reemplazan o se sombrean en una clase derivada.MyBase.New se utiliza para llamar explcitamente a un constructor de una clase base desde un constructor de una clase derivada.
MyClass
La palabra clave MyClass se comporta como una variable de objeto que hace referencia a la instancia actual de una clase tal y como se implement originalmente. MyClass es similar aMe, pero todas las llamadas de mtodo realizadas a travs de ella se tratan como si el mtodo fuese NotOverridable.