Obory názvů v jazyce Visual Basic

Obory názvů uspořádají objekty definované v sestavení. Sestavení mohou obsahovat více oborů názvů, které mohou zase obsahovat jiné obory názvů. Obory názvů zabraňují nejednoznačnosti a zjednodušují odkazy při použití velkých skupin objektů, jako jsou knihovny tříd.

Například třída .NET Framework v ListBox oboru System.Windows.Forms názvů . Následující fragment kódu ukazuje, jak deklarovat proměnnou pomocí plně kvalifikovaného názvu pro tuto třídu:

Dim LBox As System.Windows.Forms.ListBox

Předcházení kolizím názvů

.NET Framework obory názvů řeší problém, kterému se někdy říká znečištění oborů názvů, ve kterém vývojář knihovny tříd brání použití podobných názvů v jiné knihovně. Tyto konflikty s existujícími komponentami se někdy nazývají kolize názvů.

Pokud například vytvoříte novou třídu s názvem , můžete ji použít uvnitř projektu bez ListBox kvalifikace. Pokud však chcete použít třídu .NET Framework ve stejném projektu, musíte použít plně kvalifikovaný odkaz, aby ListBox byl odkaz jedinečný. Pokud odkaz není jedinečný, Visual Basic chybu s oznámením, že název je nejednoznačný. Následující příklad kódu ukazuje, jak deklarovat tyto objekty:

' Define a new object based on your ListBox class.
Dim LBC As New ListBox
' Define a new Windows.Forms ListBox control.
Dim MyLB As New System.Windows.Forms.ListBox

Následující obrázek znázorňuje dvě hierarchie oborů názvů, obě obsahují objekt s názvem ListBox :

Snímek obrazovky znázorňuje dvě hierarchie oborů názvů

Ve výchozím nastavení každý spustitelný soubor, který vytvoříte pomocí Visual Basic obsahuje obor názvů se stejným názvem jako váš projekt. Pokud například definujete objekt v rámci projektu s názvem ListBoxProject , spustitelný soubor, ListBoxProject.exe obsahuje obor názvů s názvem ListBoxProject .

Více sestavení může používat stejný obor názvů. Visual Basic s nimi zachází jako s jedinou sadu názvů. Můžete například definovat třídy pro obor názvů s názvem v sestavení s názvem a definovat další třídy pro stejný obor názvů SomeNameSpace ze sestavení s názvem Assemb1 Assemb2 .

Plně kvalifikované názvy

Plně kvalifikované názvy jsou odkazy na objekt, které mají předponu s názvem oboru názvů, ve kterém je objekt definován. Objekty definované v jiných projektech můžete použít, pokud vytvoříte odkaz na třídu (výběrem možnosti Přidat odkaz z nabídky Project) a pak použijete plně kvalifikovaný název objektu v kódu. Následující fragment kódu ukazuje, jak použít plně kvalifikovaný název pro objekt z oboru názvů jiného projektu:

Dim LBC As New ListBoxProject.Form1.ListBox

Plně kvalifikované názvy zabraňují konfliktům názvů, protože kompilátoru umožňuje určit, který objekt se používá. Samotné názvy ale mohou být dlouhé a těžkopádné. Pokud chcete tento problém obcházení, můžete použít příkaz k definování aliasu – zkráceného názvu, který můžete použít místo Imports plně kvalifikovaného názvu. Například následující příklad kódu vytvoří aliasy pro dva plně kvalifikované názvy a použije tyto aliasy k definování dvou objektů.

Imports LBControl = System.Windows.Forms.ListBox
Imports MyListBox = ListBoxProject.Form1.ListBox
Dim LBC As LBControl
Dim MyLB As MyListBox

Pokud použijete příkaz bez aliasu, můžete použít všechny názvy v tomto oboru názvů bez kvalifikace za předpokladu, že jsou pro Imports projekt jedinečné. Pokud váš projekt obsahuje příkazy pro obory názvů, které obsahují položky se stejným názvem, musíte tento název plně Imports kvalifikovat, když ho použijete. Předpokládejme například, že váš projekt obsahoval následující dva Imports příkazy:

' This namespace contains a class called Class1.
Imports MyProj1
' This namespace also contains a class called Class1.
Imports MyProj2

Pokud se pokusíte použít bez úplného kvalifikování, Visual Basic zobrazí chybu s oznámením, že název Class1 Class1 je nejednoznačný.

Příkazy na úrovni oboru názvů

V rámci oboru názvů můžete definovat položky, jako jsou moduly, rozhraní, třídy, delegáty, výčty, struktury a další obory názvů. Na úrovni oboru názvů nelze definovat položky, jako jsou vlastnosti, procedury, proměnné a události. Tyto položky musí být deklarovány v rámci kontejnerů, jako jsou moduly, struktury nebo třídy.

Klíčové slovo Global v plně kvalifikovaných názvech

Pokud jste definovali vnořenou hierarchii oborů názvů, může být kódu v této hierarchii zablokován přístup k oboru názvů System .NET Framework. Následující příklad ukazuje hierarchii, ve které obor názvů SpecialSpace.System blokuje přístup k System .

Namespace SpecialSpace  
    Namespace System  
        Class abc  
            Function getValue() As System.Int32  
                Dim n As System.Int32  
                Return n  
            End Function  
        End Class  
    End Namespace  
End Namespace  

V důsledku toho kompilátor Visual Basic úspěšně přeložit odkaz na , protože System.Int32 SpecialSpace.System nedefinuje Int32 . Klíčové slovo můžete použít ke spuštění řetězu kvalifikace na nejvzdálenější úrovni Global knihovny .NET Framework tříd. To vám umožní zadat obor System názvů nebo jakýkoli jiný obor názvů v knihovně tříd. Toto dokládá následující příklad.

Namespace SpecialSpace  
    Namespace System  
        Class abc  
            Function getValue() As Global.System.Int32  
                Dim n As Global.System.Int32  
                Return n  
            End Function  
        End Class  
    End Namespace  
End Namespace  

Můžete použít pro přístup k jiným oborům názvů na úrovni kořenového adresáře, jako je , a všechny obory názvů Global Microsoft.VisualBasic přidružené k projektu.

Klíčové slovo Global v příkazy oboru názvů

Klíčové slovo můžete použít Global také v příkazu oboru názvů. To vám umožní definovat obor názvů z kořenového oboru názvů vašeho projektu.

Všechny obory názvů v projektu jsou založené na kořenovém oboru názvů projektu. Visual Studio přiřadí název projektu jako výchozí kořenový obor názvů pro veškerý kód v projektu. Pokud má například projekt název ConsoleApplication1 , jeho programovací prvky patří do oboru názvů ConsoleApplication1 . Pokud Namespace Magnetosphere deklarujete , odkazy na Magnetosphere v projektu budou mít přístup k ConsoleApplication1.Magnetosphere .

Následující příklady používají klíčové slovo k deklaraci oboru Global názvů z kořenového oboru názvů pro projekt.

Namespace Global.Magnetosphere

End Namespace


Namespace Global
    Namespace Magnetosphere

    End Namespace
End Namespace

V deklaraci oboru názvů Global nelze vnořit do jiného oboru názvů.

Stránku aplikace, Návrhář Project (Visual Basic) můžete použít k zobrazení a úpravě kořenového oboru názvů projektu. Pro nové projekty se v kořenovém oboru názvů jako výchozí název projektu. Pokud chcete, aby byl obor názvů nejvyšší úrovně, můžete vymazat položku Kořenový obor názvů, Global aby pole bylo prázdné. Vymazání kořenového oboru názvů eliminuje potřebu Global klíčového slova v deklaracích oboru názvů.

Pokud příkaz deklaruje název, který je také oborem názvů v .NET Framework, stane se obor názvů .NET Framework nedostupný, pokud klíčové slovo není použito v plně Namespace Global kvalifikovaném názvu. Pokud chcete povolit přístup k .NET Framework oboru názvů bez použití klíčového slova , můžete do příkazu Global Global zahrnout klíčové slovo Namespace .

Následující příklad má v Global deklaraci oboru System.Text názvů klíčové slovo .

Pokud v Global deklaraci oboru názvů nebylo přítomno klíčové slovo , nebylo možné získat přístup StringBuilder bez zadání Global.System.Text.StringBuilder . V případě projektu s názvem ConsoleApplication1 by odkaz na System.Text přistupoval k , pokud se ConsoleApplication1.System.Text klíčové slovo Global nepouží.

Module Module1
    Sub Main()
        Dim encoding As New System.Text.TitanEncoding

        ' If the namespace defined below is System.Text
        ' instead of Global.System.Text, then this statement
        ' causes a compile-time error.
        Dim sb As New System.Text.StringBuilder
    End Sub
End Module

Namespace Global.System.Text
    Class TitanEncoding

    End Class
End Namespace

Viz také