共用方式為


類型升級 (Visual Basic)

當您在模組中宣告程式設計專案時,Visual Basic 會將其範圍升階為包含模組的命名空間。 這稱為 類型升級

下列範例顯示模組的基本架構定義,以及該模組的兩個成員。

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

projModule 中,模組層級宣告的程式設計元素會升階為 projNamespace。 在上述範例中, basicEnuminnerClass 會升級,但 numberSub 不是,因為它不會在模組層級宣告。

類型升階的效果

類型提升的效果是限定字串不需要包含模組名稱。 下列範例會對上述範例中的程序進行兩次呼叫。

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

在上述範例中,第一次呼叫會使用完整的限定字串。 不過,這並非必要,因為型別提升。 ** 第二次呼叫也能存取模組的成員,並且在限定字串中不包含 projModule

類型升階失敗

如果命名空間已經有與模組成員同名的成員,該模組成員的類型升級就會失敗。 下列範例示範列舉的框架定義,以及相同命名空間內的模組。

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

在上述範例中,Visual Basic 無法將 類別 abc 升階為 thisNameSpace ,因為命名空間層級已經有具有相同名稱的列舉。 若要存取 abcSub,您必須使用完整限定字串 thisNamespace.thisModule.abc.abcSub。 不過,類別xyz仍會提升,並且您可以使用較短的限定字串xyzSub來存取thisNamespace.xyz.xyzSub

部分類型的類型升級失敗

如果模組內的類別或結構使用 Partial 關鍵詞,則不論命名空間是否有同名的成員,該類別或結構都會自動取消類型升級。 模組中的其他元素仍符合類型升級的資格。

後果。 部分定義的類型升級失敗可能會導致非預期的結果,甚至編譯程序錯誤。 下列範例顯示類別的基本架構部分定義,其中一個位於模組內。

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

在上述範例中,開發人員可能會預期編譯程式合併 sampleClass 的兩個部分定義。 不過,編譯程式不會考慮在 sampleModule 內的部分定義進行提升。 因此,它會嘗試編譯兩個不同的和不同的類別,這兩個類別都命名 sampleClass ,但具有不同的限定路徑。

只有在完整路徑完全相同時,編譯程式才會合併部分定義。

建議

下列建議代表良好的程序設計做法。

  • 唯一名稱。 當您完全控制程式設計元素的命名時,在任何地方使用唯一名稱一律是個好主意。 相同的名稱需要額外的限定性,而且可能會讓您的程式代碼更難讀取。 它們也可能導致細微的錯誤和非預期的結果。

  • 完整資格。 當您使用相同命名空間中的模組和其他元素時,最安全的方法是一律對所有程式設計元素使用完整資格。 如果模組成員的型別提升失敗,而且您未完全限定該成員,可能不慎存取不同的程式設計元素。

另請參閱