Sdílet prostřednictvím


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ů. Deklarace oboru názvů s vymezeným oborem souborů jsou k dispozici v jazyce C# 10. 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ů

Při použití oborů názvů s oborem souborů ovlivní umístění using příkazů jejich rozsah v 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:

  • using Pokud jsou příkazy umístěny před deklaraci oboru názvů v oboru souborů, jsou považovány za mimo obor názvů a jsou interpretovány jako plně kvalifikované obory názvů.
  • using Pokud jsou příkazy umístěny za deklaraci oboru názvů s oborem souborů, jsou vymezeny v rámci 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 System je globálně přístupný, zatímco System.Text platí pouze v rámci SampleNamespace.

Předchozí příklad neobsahuje vnořený obor názvů. Obory názvů s oborem souborů nemůžou obsahovat další deklarace oboru názvů. Nelze deklarovat vnořený obor názvů nebo druhý obor názvů s oborem souborů:

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é