Promozione tipo (Visual Basic)

Quando si dichiara un elemento di programmazione in un modulo, Visual Basic promuove l'ambito dell'elemento allo spazio dei nomi contenente il modulo. Questa operazione è denominata promozione tipo.

Nell'esempio riportato di seguito viene illustrata la definizione di base di un modulo e due membri di tale modulo.

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

All'interno di projModule, gli elementi di programmazione dichiarati a livello di modulo vengono promossi al tipo projNamespace. Nell'esempio precedente vengono promossi i tipi basicEnum e innerClass, ma non numberSub, poiché quest'ultimo non è dichiarato a livello di modulo.

Effetto della promozione del tipo

L'effetto della promozione del tipo è che una stringa di qualificazione non deve includere necessariamente il nome del modulo. Nell'esempio riportato di seguito vengono effettuate due chiamate alla routine dell'esempio precedente.

Sub usePromotion()
    projNamespace.projModule.innerClass.numberSub(projNamespace.projModule.basicEnum.one)
    projNamespace.innerClass.numberSub(projNamespace.basicEnum.two)
End Sub

Nell'esempio precedente la prima chiamata utilizza stringhe di qualificazione complete. Questa informazione, tuttavia, non è necessaria grazie alla promozione del tipo. Anche la seconda chiamata accede ai membri del modulo senza includere projModule nelle stringhe di qualificazione.

Annullamento dell'effetto della promozione del tipo

Se lo spazio dei nomi contiene già come membro del modulo un membro con lo stesso nome, gli effetti della promozione del tipo per tale membro vengono annullati. Nell'esempio riportato di seguito viene illustrata la definizione di base di un'enumerazione e un modulo all'interno dello stesso spazio dei nomi.

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

Nell'esempio precedente Visual Basic non può promuovere la classe abc al tipo thisNameSpace perché è già presente un'enumerazione con lo stesso nome a livello di spazio dei nomi. Per accedere a abcSub, è necessario utilizzare la stringa di qualificazione completa thisNamespace.thisModule.abc.abcSub. Tuttavia, la promozione del tipo per la classe xyz viene comunque eseguita ed è quindi possibile accedere a xyzSub utilizzando la stringa di qualificazione più breve thisNamespace.xyz.xyzSub.

Annullamento dell'effetto della promozione del tipo per i tipi parziali

Se una classe o una struttura all'interno di un modulo utilizza la parola chiave Partial (Visual Basic), l'effetto della promozione del tipo per tale classe o struttura viene annullato automaticamente, indipendentemente dal fatto che nello spazio dei nomi sia presente o meno un membro con lo stesso nome. Gli altri elementi nel modulo sono comunque idonei per la promozione del tipo.

Conseguenze. L'annullamento dell'effetto della promozione del tipo per una definizione parziale può causare risultati imprevisti e persino errori del compilatore. Nell'esempio riportato di seguito sono illustrate alcune definizioni parziali di base di una classe, una delle quali si trova all'interno di un modulo.

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

Nell'esempio precedente lo sviluppatore potrebbe aspettarsi che il compilatore unisca le due definizioni parziali di sampleClass. Il compilatore, tuttavia, non prende in considerazione la promozione per la definizione parziale all'interno di sampleModule. Di conseguenza, tenta di compilare due classi distinte e separate, entrambe denominate sampleClass, ma con percorsi di qualificazione differenti.

Il compilatore unisce le definizioni parziali solo se i relativi percorsi completi sono identici.

Consigli

Di seguito sono riportati alcuni consigli che possono risultare utili in fase di programmazione.

  • Nomi univoci. Se si dispone del controllo completo sulla denominazione degli elementi di programmazione, è preferibile utilizzare sempre nomi univoci. I nomi identici richiedono una qualificazione aggiuntiva e rendono più difficile la lettura del codice. Possono, inoltre, causare errori difficili da rilevare nonché generare risultati imprevisti.

  • Nome completo. Quando si utilizzano moduli e altri elementi nello stesso spazio dei nomi, si consiglia di utilizzare sempre il nome completo per tutti gli elementi di programmazione. Se l'effetto della promozione del tipo viene annullato per un membro del modulo e non si dispone del percorso completo per tale membro, è possibile che si acceda inavvertitamente a un elemento di programmazione differente.

Vedere anche

Attività

Procedura: controllare l'ambito di una variabile (Visual Basic)

Riferimenti

Istruzione Module

Istruzione Namespace

Partial (Visual Basic)

Concetti

Ambito in Visual Basic

Altre risorse

Riferimenti a elementi dichiarati (Visual Basic)