Promoción de tipos (Visual Basic)
Cuando se declara un elemento de programación en un módulo, Visual Basic promueve su ámbito al espacio de nombres que contiene el módulo.Esto se conoce como promoción de tipos.
El ejemplo siguiente muestra una definición esquemática de un módulo y dos miembros de ese módulo.
Namespace projNamespace
Module projModule
Public Enum basicEnum As Integer
one = 1
two = 2
End Enum
Public Class innerClass
Shared Sub numberSub(ByVal firstArg As Integer)
End Sub
End Class
End Module
End Namespace
Dentro de projModule, los elementos de programación declarados en el nivel de módulo se promueven a projNamespace.En el ejemplo anterior, basicEnum e innerClass se promueven, pero numberSub no, porque no está declarado en el nivel de módulo.
Efecto de promoción de tipos
El efecto de promoción de tipos es que una cadena de calificación no necesita incluir el nombre del módulo.El ejemplo siguiente realiza dos llamadas al procedimiento del ejemplo anterior.
Sub usePromotion()
projNamespace.projModule.innerClass.numberSub(projNamespace.projModule.basicEnum.one)
projNamespace.innerClass.numberSub(projNamespace.basicEnum.two)
End Sub
En el ejemplo anterior, la primera llamada utiliza las cadenas de calificación completas.Sin embargo, esto no es necesario debido a la promoción de tipos.La segunda llamada también tiene acceso a los miembros del módulo sin incluir projModule en las cadenas de calificación.
Rechazo de promoción de tipos
Si el espacio de nombres ya tiene un miembro con el mismo nombre que un miembro del módulo, se rechaza la promoción de tipos para ese miembro del módulo.El ejemplo siguiente muestra una definición esquemática de una enumeración y un módulo dentro del mismo espacio de nombres.
Namespace thisNamespace
Public Enum abc
first = 1
second
End Enum
Module thisModule
Public Class abc
Public Sub abcSub()
End Sub
End Class
Public Class xyz
Public Sub xyzSub()
End Sub
End Class
End Module
End Namespace
En el ejemplo anterior, Visual Basic no puede promover la clase abc a thisNameSpace porque ya hay una enumeración con el mismo nombre en el nivel del espacio de nombres.Para tener acceso a abcSub, debe utilizar la cadena de calificación completa thisNamespace.thisModule.abc.abcSub.Sin embargo, todavía se promueve la clase xyz y puede tener acceso a xyzSub con la cadena de calificación más corta thisNamespace.xyz.xyzSub.
Rechazo de promoción de tipos para tipos parciales
Si una clase o estructura dentro de un módulo utiliza la palabra clave Partial (Visual Basic), se rechaza automáticamente la promoción de tipos para esa clase o estructura, ya tenga o no el espacio de nombres un miembro con el mismo nombre.Otros elementos en el módulo reúnen todavía los requisitos necesarios para la promoción de tipos.
Consecuencias. El rechazo de la promoción de tipos de una definición parcial puede provocar unos resultados inesperados e incluso errores del compilador.El ejemplo siguiente muestra definiciones esquemáticas parciales de una clase, una de las cuales está dentro de un módulo.
Namespace sampleNamespace
Partial Public Class sampleClass
Public Sub sub1()
End Sub
End Class
Module sampleModule
Partial Public Class sampleClass
Public Sub sub2()
End Sub
End Class
End Module
End Namespace
En el ejemplo anterior, el desarrollador podría esperar que el compilador combinara las dos definiciones parciales de sampleClass.Sin embargo, el compilador no considera la promoción para la definición parcial dentro de sampleModule.En consecuencia, intenta compilar dos clases separadas y distintas, ambas denominadas sampleClass pero con rutas de acceso de calificación diferentes.
El compilador sólo combina las definiciones parciales cuando sus rutas de acceso completas son idénticas.
Recomendaciones
Las recomendaciones siguientes representan un buen hábito de programación.
Nombres únicos. Si tiene el control completo sobre la denominación de los elementos de programación, suele ser una buena idea utilizar nombres únicos en todas partes.Unos nombres idénticos requieren calificación adicional y pueden dificultar la lectura del código.También pueden llevar a errores poco claros y a unos resultados inesperados.
Calificación completa. Si trabaja con módulos y otros elementos en el mismo espacio de nombres, el enfoque más seguro es utilizar siempre una calificación completa para todos los elementos de programación.Si la promoción de tipos se rechaza para un miembro del módulo y no califica ese miembro por completo, puede tener acceso por error a un elemento de programación diferente.
Vea también
Tareas
Cómo: Controlar el ámbito de una variable (Visual Basic)