Share via


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)

Referencia

Module (Instrucción)

Namespace (Instrucción)

Partial (Visual Basic)

Conceptos

Ámbito en Visual Basic

Referencias a elementos declarados (Visual Basic)