Obory názvů v jazyce Visual BasicNamespaces in Visual Basic

Obory názvů organizují objekty definované v sestavení.Namespaces organize the objects defined in an assembly. Sestavení mohou obsahovat více oborů názvů, které mohou zase obsahovat jiné obory názvů.Assemblies can contain multiple namespaces, which can in turn contain other namespaces. Obory názvů zabraňují nejednoznačnosti a zjednodušují odkazy při použití velkých skupin objektů, jako jsou knihovny tříd.Namespaces prevent ambiguity and simplify references when using large groups of objects such as class libraries.

Například .NET Framework definuje třídu ListBox v oboru názvů System.Windows.Forms.For example, the .NET Framework defines the ListBox class in the System.Windows.Forms namespace. Následující fragment kódu ukazuje, jak deklarovat proměnnou pomocí plně kvalifikovaného názvu pro tuto třídu:The following code fragment shows how to declare a variable using the fully qualified name for this class:

Dim LBox As System.Windows.Forms.ListBox

Zamezení kolizí názvůAvoiding Name Collisions

.NET Framework obory názvů řeší problém, který se někdy nazývá znečišťování oboru názvů, ve kterém je vývojář knihovny tříd zabráněno použitím podobných názvů v jiné knihovně..NET Framework namespaces address a problem sometimes called namespace pollution, in which the developer of a class library is hampered by the use of similar names in another library. Konflikty se stávajícími součástmi jsou někdy označovány jako kolize názvů.These conflicts with existing components are sometimes called name collisions.

Například pokud vytvoříte novou třídu s názvem ListBox, můžete ji použít uvnitř projektu bez kvalifikace.For example, if you create a new class named ListBox, you can use it inside your project without qualification. Pokud však chcete použít třídu .NET Framework ListBox ve stejném projektu, je nutné použít plně kvalifikovaný odkaz, který odkaz nastaví jako jedinečný.However, if you want to use the .NET Framework ListBox class in the same project, you must use a fully qualified reference to make the reference unique. Pokud odkaz není jedinečný, Visual Basic vytvoří chybu oznamující, že název je nejednoznačný.If the reference is not unique, Visual Basic produces an error stating that the name is ambiguous. Následující příklad kódu ukazuje, jak deklarovat tyto objekty:The following code example demonstrates how to declare these objects:

' 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í ilustrace znázorňuje dvě hierarchie oboru názvů, které obsahují objekt s názvem ListBox:The following illustration shows two namespace hierarchies, both containing an object named ListBox:

Snímek obrazovky, který ukazuje dvě hierarchie oboru 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.By default, every executable file you create with Visual Basic contains a namespace with the same name as your project. Například pokud definujete objekt v rámci projektu s názvem ListBoxProject, spustitelný soubor ListBoxProject. exe obsahuje obor názvů nazvaný ListBoxProject.For example, if you define an object within a project named ListBoxProject, the executable file ListBoxProject.exe contains a namespace called ListBoxProject.

Více sestavení může používat stejný obor názvů.Multiple assemblies can use the same namespace. Visual Basic je považuje za jednu sadu názvů.Visual Basic treats them as a single set of names. Můžete například definovat třídy pro obor názvů s názvem SomeNameSpace v sestavení s názvem Assemb1a definovat další třídy pro stejný obor názvů ze sestavení s názvem Assemb2.For example, you can define classes for a namespace called SomeNameSpace in an assembly named Assemb1, and define additional classes for the same namespace from an assembly named Assemb2.

Plně kvalifikované názvyFully Qualified Names

Plně kvalifikované názvy jsou odkazy na objekty, které jsou s předponou názvu oboru názvů, ve kterém je objekt definován.Fully qualified names are object references that are prefixed with the name of the namespace in which the object is defined. Můžete použít objekty definované v jiných projektech, pokud vytvoříte odkaz na třídu (kliknutím na Přidat odkaz z nabídky projekt ) a potom použijete plně kvalifikovaný název objektu v kódu.You can use objects defined in other projects if you create a reference to the class (by choosing Add Reference from the Project menu) and then use the fully qualified name for the object in your code. Následující fragment kódu ukazuje, jak použít plně kvalifikovaný název objektu z jiného oboru názvů projektu:The following code fragment shows how to use the fully qualified name for an object from another project's namespace:

Dim LBC As New ListBoxProject.Form1.ListBox

Plně kvalifikované názvy zabraňují konfliktům názvů, protože umožňují kompilátoru určit, který objekt se používá.Fully qualified names prevent naming conflicts because they make it possible for the compiler to determine which object is being used. Vlastní jména ale můžou být dlouhá a nenáročný.However, the names themselves can get long and cumbersome. Chcete-li se tomuto problému vyhnout, můžete použít příkaz Imports k definování aliasu– zkrácený název, který můžete použít místo plně kvalifikovaného názvu.To get around this, you can use the Imports statement to define an alias—an abbreviated name you can use in place of a fully qualified name. 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ů.For example, the following code example creates aliases for two fully qualified names, and uses these aliases to define two objects.

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

Použijete-li příkaz Imports bez aliasu, můžete použít všechny názvy v tomto oboru názvů bez kvalifikace, pokud jsou pro projekt jedinečné.If you use the Imports statement without an alias, you can use all the names in that namespace without qualification, provided they are unique to the project. Pokud váš projekt obsahuje Imports příkazy pro obory názvů, které obsahují položky se stejným názvem, je nutné plně kvalifikovat tento název při použití.If your project contains Imports statements for namespaces that contain items with the same name, you must fully qualify that name when you use it. Předpokládejme například, že váš projekt obsahuje následující dva Imports příkazy:Suppose, for example, your project contained the following two Imports statements:

' 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 Class1 bez úplného zařazení, Visual Basic vytvoří chybu s oznámením, že název Class1 je dvojznačný.If you attempt to use Class1 without fully qualifying it, Visual Basic produces an error stating that the name Class1 is ambiguous.

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

V rámci oboru názvů můžete definovat položky, jako jsou moduly, rozhraní, třídy, delegáty, výčty, struktury a jiné obory názvů.Within a namespace, you can define items such as modules, interfaces, classes, delegates, enumerations, structures, and other namespaces. Na úrovni oboru názvů nelze definovat položky, jako jsou vlastnosti, procedury, proměnné a události.You cannot define items such as properties, procedures, variables and events at the namespace level. Tyto položky musí být deklarovány v rámci kontejnerů, jako jsou moduly, struktury nebo třídy.These items must be declared within containers such as modules, structures, or classes.

Klíčové slovo Global v plně kvalifikovaném názvuGlobal Keyword in Fully Qualified Names

Pokud jste definovali vnořenou hierarchii oborů názvů, kód uvnitř této hierarchie může být zablokován pro přístup k oboru názvů System .NET Framework.If you have defined a nested hierarchy of namespaces, code inside that hierarchy might be blocked from accessing the System namespace of the .NET Framework. Následující příklad znázorňuje hierarchii, ve které SpecialSpace.System obor názvů blokuje přístup k System.The following example illustrates a hierarchy in which the SpecialSpace.System namespace blocks access to 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 nemůže úspěšně přeložit odkaz na System.Int32, protože SpecialSpace.System nedefinuje Int32.As a result, the Visual Basic compiler cannot successfully resolve the reference to System.Int32, because SpecialSpace.System does not define Int32. Pomocí klíčového slova Global můžete spustit řetěz kvalifikace na krajní úrovni .NET Framework knihovny tříd.You can use the Global keyword to start the qualification chain at the outermost level of the .NET Framework class library. To umožňuje zadat obor názvů System nebo jakýkoli jiný obor názvů v knihovně tříd.This allows you to specify the System namespace or any other namespace in the class library. Toto dokládá následující příklad.The following example illustrates this.

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  

Global můžete použít pro přístup k dalším oborům názvů na kořenové úrovni, jako je například Microsoft.VisualBasic, a jakémukoli oboru názvů přidruženému k vašemu projektu.You can use Global to access other root-level namespaces, such as Microsoft.VisualBasic, and any namespace associated with your project.

Klíčové slovo Global v příkazech NamespaceGlobal Keyword in Namespace Statements

Můžete také použít klíčové slovo Global v příkazu Namespace.You can also use the Global keyword in a Namespace Statement. To umožňuje definovat obor názvů mimo kořenový obor názvů vašeho projektu.This lets you define a namespace out of the root namespace of your project.

Všechny obory názvů v projektu jsou založené na kořenovém oboru názvů projektu.All namespaces in your project are based on the root namespace for the project. Visual Studio přiřadí název vašeho projektu jako výchozí kořenový obor názvů pro veškerý kód v projektu.Visual Studio assigns your project name as the default root namespace for all code in your project. Například pokud je projekt pojmenován ConsoleApplication1, jeho programovací prvky patří do oboru názvů ConsoleApplication1.For example, if your project is named ConsoleApplication1, its programming elements belong to namespace ConsoleApplication1. Pokud deklarujete Namespace Magnetosphere, odkazy na Magnetosphere v projektu budou přistupovat ConsoleApplication1.Magnetosphere.If you declare Namespace Magnetosphere, references to Magnetosphere in the project will access ConsoleApplication1.Magnetosphere.

Následující příklady používají klíčové slovo Global k deklaraci oboru názvů mimo kořenový obor názvů pro projekt.The following examples use the Global keyword to declare a namespace out of the root namespace for the project.

Namespace Global.Magnetosphere

End Namespace


Namespace Global
    Namespace Magnetosphere

    End Namespace
End Namespace

V deklaraci oboru názvů nelze Global vnořovat do jiného oboru názvů.In a namespace declaration, Global cannot be nested in another namespace.

Můžete použít stránku aplikace, Návrhář projektu (Visual Basic) k zobrazení a úpravě kořenového oboru názvů projektu.You can use the Application Page, Project Designer (Visual Basic) to view and modify the Root Namespace of the project. Pro nové projekty je výchozím kořenovým oborem názvů název projektu.For new projects, the Root Namespace defaults to the project name. Chcete-li Global být oborem názvů nejvyšší úrovně, můžete vymazat položku kořenového oboru názvů tak, aby bylo pole prázdné.To cause Global to be the top-level namespace, you can clear the Root Namespace entry so that the box is empty. Vymazání kořenového oboru názvů odebere potřebu klíčového slova Global v deklaracích oboru názvů.Clearing Root Namespace removes the need for the Global keyword in namespace declarations.

Pokud příkaz Namespace deklaruje název, který je také obor názvů v .NET Framework, .NET Framework obor názvů bude k dispozici, pokud klíčové slovo Global není použito v plně kvalifikovaném názvu.If a Namespace statement declares a name that is also a namespace in the .NET Framework, the .NET Framework namespace becomes unavailable if the Global keyword is not used in a fully qualified name. Chcete-li povolit přístup k tomuto oboru názvů .NET Framework bez použití klíčového slova Global, můžete do příkazu Namespace zahrnout klíčové slovo Global.To enable access to that .NET Framework namespace without using the Global keyword, you can include the Global keyword in the Namespace statement.

V následujícím příkladu je klíčové slovo Global v deklaraci oboru názvů System.Text.The following example has the Global keyword in the System.Text namespace declaration.

Pokud klíčové slovo Global nebylo v deklaraci oboru názvů přítomno, StringBuilder nelze přistupovat bez zadání Global.System.Text.StringBuilder.If the Global keyword was not present in the namespace declaration, StringBuilder could not be accessed without specifying Global.System.Text.StringBuilder. V případě projektu s názvem ConsoleApplication1má odkaz na System.Text přístup ConsoleApplication1.System.Text, pokud nebylo použito klíčové slovo Global.For a project named ConsoleApplication1, references to System.Text would access ConsoleApplication1.System.Text if the Global keyword was not used.

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é:See also