Sdílet prostřednictvím


Klíčové slovo namespace

Klíčové namespace slovo slouží k deklaraci oboru, který obsahuje sadu souvisejících objektů. Obor názvů můžete použít k uspořádání prvků kódu a k vytváření globálně jedinečných typů.

namespace SampleNamespace
{
    class SampleClass { }

    interface ISampleInterface { }

    struct SampleStruct { }

    enum SampleEnum { a, b }

    delegate void SampleDelegate(int i);

    namespace Nested
    {
        class SampleClass2 { }
    }
}

Deklarace oboru názvů s oborem souborů umožňují deklarovat, že všechny typy v souboru jsou v jednom oboru názvů. Následující příklad je podobný předchozímu příkladu, ale používá deklaraci oboru názvů s oborem souboru:

using System;

namespace SampleFileScopedNamespace;

class SampleClass { }

interface ISampleInterface { }

struct SampleStruct { }

enum SampleEnum { a, b }

delegate void SampleDelegate(int i);

Using – příkazy v oborech názvů s vymezeným oborem souborů

Když použijete názvové prostory s rozsahem souboru, umístění příkazů using ovlivňuje jejich platnost v rámci souboru. Obory názvů s oborem souborů jsou nižší na ekvivalentní tradiční deklaraci oboru názvů, která končí pravou závorkou na konci souboru. Toto chování určuje, kde using se direktivy použijí takto:

  • Pokud jsou příkazy using umístěny před deklaraci oboru názvů s oborem souborů, považují se za mimo obor názvů a jsou interpretovány jako plně kvalifikované obory názvů.
  • Pokud jsou příkazy using umístěny za deklarací oboru názvů v rámci souboru, jsou součástí samotného oboru názvů.

Příklad:

// This using is outside the namespace scope, so it applies globally
using System;

namespace SampleNamespace; // File-scoped namespace declaration

// This using is inside the namespace scope
using System.Text;

public class SampleClass
{
    // Class members...
}

V předchozím příkladu je System globálně přístupný, zatímco System.Text platí pouze v rámci SampleNamespace.

Předchozí příklad neobsahuje vnořený obor názvů. Názvové prostory omezené na soubor nemohou obsahovat více deklarací názvového prostoru. Nelze deklarovat vnořený obor názvů ani druhý obor názvů na úrovni souboru.

namespace SampleNamespace;

class AnotherSampleClass
{
    public void AnotherSampleMethod()
    {
        System.Console.WriteLine(
            "SampleMethod inside SampleNamespace");
    }
}

namespace AnotherNamespace; // Not allowed!

namespace ANestedNamespace // Not allowed!
{
   // declarations...
}

V rámci oboru názvů můžete deklarovat nula nebo více z následujících typů:

Kompilátor přidá výchozí obor názvů. Tento nepojmenovaný obor názvů, někdy označovaný jako globální obor názvů, se nachází v každém souboru. Obsahuje deklarace, které nejsou zahrnuty do deklarovaného oboru názvů. Jakýkoli identifikátor v globálním oboru názvů je k dispozici pro použití v pojmenovaném oboru názvů.

Obory názvů mají implicitně veřejný přístup. Diskuzi o modifikátorech přístupu, které můžete přiřadit k prvkům v oboru názvů, najdete v tématu Modifikátory accessu.

Obor názvů je možné definovat ve dvou nebo více deklaracích. Následující příklad například definuje dvě třídy jako součást MyCompany oboru názvů:

namespace MyCompany.Proj1
{
    class MyClass
    {
    }
}

namespace MyCompany.Proj1
{
    class MyClass1
    {
    }
}

Následující příklad ukazuje, jak volat statickou metodu v vnořeném oboru názvů.

namespace SomeNameSpace
{
    public class MyClass
    {
        static void Main()
        {
            Nested.NestedNameSpaceClass.SayHello();
        }
    }

    // a nested namespace
    namespace Nested
    {
        public class NestedNameSpaceClass
        {
            public static void SayHello()
            {
                Console.WriteLine("Hello");
            }
        }
    }
}
// Output: Hello

specifikace jazyka C#

Další informace najdete v části Obory názvů specifikace jazyka C#. Další informace o deklaracích oborů názvů s vymezeným oborem souborů najdete ve specifikaci funkce.

Viz také