Referencias a elementos declarados (Visual Basic)
Si el código hace referencia a un elemento declarado, el compilador de Visual Basic busca la coincidencia del nombre de la referencia con la declaración pertinente del nombre.Si se han declarado varios elementos con el mismo nombre, es posible controlar a cuál de ellos se hace referencia mediante la calificación de su nombre.
El compilador intenta buscar la coincidencia entre una referencia del nombre y una declaración del nombre con el ámbito más limitado.Esto significa que comienza con el código que realiza la referencia y se mueve hacia afuera a través de los sucesivos niveles de elementos contenedores.
El ejemplo siguiente muestra las referencias a dos variables con el mismo nombre.En el ejemplo se declaran dos variables, cada una denominada totalCount, en los diferentes niveles de ámbito del módulo container.Cuando el procedimiento showCount muestra totalCount sin la calificación, el compilador de Visual Basic resuelve la referencia a la declaración con el ámbito más restringido, concretamente la declaración local dentro de showCount.Cuando califica totalCount con el módulo contenedor container, el compilador resuelve la referencia en la declaración con el ámbito más ancho.
' Assume these two modules are both in the same assembly.
Module container
Public totalCount As Integer = 1
Public Sub showCount()
Dim totalCount As Integer = 6000
' The following statement displays the local totalCount (6000).
MsgBox("Unqualified totalCount is " & CStr(totalCount))
' The following statement displays the module's totalCount (1).
MsgBox("container.totalCount is " & CStr(container.totalCount))
End Sub
End Module
Module callingModule
Public Sub displayCount()
container.showCount()
' The following statement displays the containing module's totalCount (1).
MsgBox("container.totalCount is " & CStr(container.totalCount))
End Sub
End Module
Calificar un nombre de elemento
Si quiere omitir este proceso de búsqueda y especificar un nombre declarado en un ámbito más ancho, debe calificar el nombre con el elemento contenedor del ámbito más ancho.En algunos casos, podría tener que calificar también el elemento contenedor.
Calificar un nombre significa que hay que hacerlo preceder en la instrucción de origen con información que identifique dónde se ha definido el elemento de destino.Esta información se denomina cadena de la calificación.Puede incluir uno o más espacios de nombres y un módulo, clase o estructura.
La cadena de la calificación debe especificar de forma inequívoca el módulo, clase o estructura que contiene el elemento de destino.Se puede buscar a su vez el contenedor en otro elemento contenedor, normalmente un espacio de nombres.Es posible que necesite incluir varios elementos contenedores en la cadena de la calificación.
Para tener acceso a un elemento declarado mediante la calificación de su nombre |
|
También podría tener que calificar una referencia de nombre si la aplicación tiene acceso a más de un elemento de programación con el mismo nombre.Por ejemplo, los espacios de nombres System.Windows.Forms y System.Web.UI.WebControls contienen los dos una clase Label (System.Windows.Forms.Label y System.Web.UI.WebControls.Label).Si una aplicación utiliza los dos o si define su propia clase Label, debe distinguir los objetos Label diferentes.Incluya el espacio de nombres o un alias de importación en la declaración de variable.El ejemplo siguiente utiliza el alias de importación.
' The following statement must precede all your declarations.
Imports win = System.Windows.Forms, web = System.Web.UI.WebControls
' The following statement references the Windows.Forms.Label class.
Dim winLabel As New win.Label()
Miembros de otros elementos contenedores
Si se utiliza un miembro no compartido de otra clase o estructura, primero debe calificarse el nombre del miembro con una variable o una expresión que se refiera a una instancia de la clase o de la estructura.En el ejemplo siguiente, demoClass es una instancia de una clase denominada class1.
Dim demoClass As class1 = New class1()
demoClass.someSub[(argumentlist)]
No puede utilizarse el propio nombre de la clase para calificar a un miembro que no es Shared (Visual Basic).Debe crear primero una instancia en una variable de objeto (en este caso demoClass) y, a continuación, hacer referencia a ella por el nombre de variable.
Si una clase o estructura tiene un miembro Shared, puede calificar ese miembro con el nombre de clase o estructura, o con una variable o expresión que señale a una instancia.
Un módulo no tiene ninguna instancia separada y todos sus miembros son de manera predeterminada Shared.Por consiguiente, califica un miembro de módulo con el nombre del módulo.
El ejemplo siguiente muestra referencias calificadas a procedimientos de miembros de módulos.En el ejemplo se declaran dos procedimientos Sub, ambos denominados perform, en módulos diferentes de un proyecto.Los dos pueden especificarse sin calificación en su propio módulo, pero deben ser calificados si se les hace referencia desde otra sección.Como la referencia final en module3 no califica perform, el compilador no puede resolver esa referencia.
' Assume these three modules are all in the same assembly.
Module module1
Public Sub perform()
MsgBox("module1.perform() now returning")
End Sub
End Module
Module module2
Public Sub perform()
MsgBox("module2.perform() now returning")
End Sub
Public Sub doSomething()
' The following statement calls perform in module2, the active module.
perform()
' The following statement calls perform in module1.
module1.perform()
End Sub
End Module
Module module3
Public Sub callPerform()
' The following statement calls perform in module1.
module1.perform()
' The following statement makes an unresolvable name reference
' and therefore generates a COMPILER ERROR.
perform() ' INVALID statement
End Sub
End Module
Referencia a proyectos
Para poder utilizar elementos Public (Visual Basic) definidos en otro proyecto, primero debe definirse una referencia al ensamblado o a la biblioteca de tipos del proyecto.Para establecer una referencia, haga clic en Agregar referencia en el menú Proyecto o utilice la opción del compilador de línea de comandos /reference (Visual Basic).
Por ejemplo, puede utilizar el modelo de objetos XML de .NET Framework.Si establece una referencia en el espacio de nombres System.Xml, puede declarar y utilizar cualquiera de sus clases, como XmlDocument.El ejemplo siguiente utiliza XmlDocument.
' Assume this project has a reference to System.Xml
' The following statement creates xDoc as an XML document object.
Dim xDoc As System.Xml.XmlDocument
Importar elementos contenedores
Puede utilizar Instrucción Imports (Tipo y espacio de nombres de .NET) para importar los espacios de nombres que contienen los módulos o clases que desea utilizar.Esto permite hacer referencia a los elementos definidos en un espacio de nombres importado sin calificar por completo sus nombres.En el ejemplo siguiente se escribe de nuevo el ejemplo anterior para importar el espacio de nombres System.Xml.
' Assume this project has a reference to System.Xml
' The following statement must precede all your declarations.
Imports System.Xml
' The following statement creates xDoc as an XML document object.
Dim xDoc As XmlDocument
Asimismo, la instrucción Imports puede definir un alias de importación para cada espacio de nombres importado.De esta forma el código fuente es más corto y más fácil de leer.En el ejemplo siguiente se escribe de nuevo el ejemplo anterior para utilizar xD como un alias para el espacio de nombres System.Xml.
' Assume this project has a reference to System.Xml
' The following statement must precede all your declarations.
Imports xD = System.Xml
' The following statement creates xDoc as an XML document object.
Dim xDoc As xD.XmlDocument
La instrucción Imports no hace que los elementos de otros proyectos estén disponibles para su aplicación.Es decir, no sustituye a la configuración de una referencia.La importación de un espacio de nombres sencillamente evita la necesidad de calificar los nombres definidos en él.
También puede utilizar la instrucción Imports para importar módulos, clases, estructuras y enumeraciones.Después puede utilizar los miembros de estos elementos importados sin calificación.No obstante, debe calificar siempre los miembros no compartidos de clases y estructuras con una variable o expresión que se evalúe en una instancia de la clase o estructura.
Instrucciones de nomenclatura
Si se definen dos o más elementos de programación con el mismo nombre, puede producirse una ambigüedad de nombres cuando el compilador intente resolver una referencia al nombre.Si hay más de una definición en el ámbito, o no hay ninguna, la referencia es irresoluble.Para obtener un ejemplo, vea el "Ejemplo de referencia calificada" en esta página Ayuda.
Puede evitar la ambigüedad de nombres si asigna a todos los elementos nombres únicos.Puede hacer referencia a cualquier elemento sin necesidad de calificar su nombre con un espacio de nombres, módulo o clase.También reduce las posibilidades de hacer referencia accidentalmente a un elemento equivocado.
Sombrear
Si dos elementos de programación comparten el mismo nombre, uno de ellos puede ocultar o sombrear al otro.No hay un elemento sombreado como referencia; en su lugar, cuando el código usa el nombre del elemento sombreado, el compilador de Visual Basic lo resuelve en el elemento que sombrea.Para obtener una explicación más detallada, con ejemplos, vea Sombrear en Visual Basic.
Vea también
Tareas
Cómo: Modificar las propiedades y los valores de configuración del proyecto
Referencia
Instrucción Imports (Tipo y espacio de nombres de .NET)
Conceptos
Nombres de elementos declarados (Visual Basic)