Udostępnij za pośrednictwem


namespace

Słowo namespace kluczowe służy do deklarowania zakresu zawierającego zestaw powiązanych obiektów. Przestrzeń nazw umożliwia organizowanie elementów kodu i tworzenie globalnie unikatowych typów.

namespace SampleNamespace
{
    class SampleClass { }

    interface ISampleInterface { }

    struct SampleStruct { }

    enum SampleEnum { a, b }

    delegate void SampleDelegate(int i);

    namespace Nested
    {
        class SampleClass2 { }
    }
}

Deklaracje przestrzeni nazw o zakresie plików umożliwiają zadeklarowanie, że wszystkie typy w pliku znajdują się w jednej przestrzeni nazw. Deklaracje przestrzeni nazw o zakresie plików są dostępne w języku C# 10. Poniższy przykład jest podobny do poprzedniego przykładu, ale używa deklaracji przestrzeni nazw o zakresie pliku:

using System;

namespace SampleFileScopedNamespace;

class SampleClass { }

interface ISampleInterface { }

struct SampleStruct { }

enum SampleEnum { a, b }

delegate void SampleDelegate(int i);

Używanie instrukcji w przestrzeniach nazw o zakresie plików

W przypadku korzystania z przestrzeni nazw o zakresie plików umieszczanie instrukcji usingwpływa na ich zakres w pliku. Przestrzenie nazw o zakresie plików są niższe od równoważnej tradycyjnej deklaracji przestrzeni nazw, która kończy się nawiasem zamykającym na końcu pliku. To zachowanie określa, gdzie using dyrektywy są stosowane w następujący sposób:

  • using Jeśli instrukcje są umieszczane przed deklaracją przestrzeni nazw o zakresie pliku, są traktowane jako poza przestrzenią nazw i są interpretowane jako w pełni kwalifikowane przestrzenie nazw.
  • Jeśli instrukcje using są umieszczane po deklaracji przestrzeni nazw o zakresie pliku, są one objęte zakresem w samej przestrzeni nazw.

Na przykład:

// 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...
}

W powyższym przykładzie System jest dostępny globalnie, ale System.Text ma zastosowanie tylko w obrębie SampleNamespace.

Powyższy przykład nie zawiera zagnieżdżonej przestrzeni nazw. Przestrzenie nazw o zakresie plików nie mogą zawierać dodatkowych deklaracji przestrzeni nazw. Nie można zadeklarować zagnieżdżonej przestrzeni nazw ani drugiej przestrzeni nazw o zakresie plików:

namespace SampleNamespace;

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

namespace AnotherNamespace; // Not allowed!

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

W przestrzeni nazw można zadeklarować zero lub więcej z następujących typów:

Kompilator dodaje domyślną przestrzeń nazw. Ta nienazwana przestrzeń nazw, czasami nazywana globalną przestrzenią nazw, znajduje się w każdym pliku. Zawiera deklaracje nieuwzględniane w zadeklarowanej przestrzeni nazw. Dowolny identyfikator w globalnej przestrzeni nazw jest dostępny do użycia w nazwanej przestrzeni nazw.

Przestrzenie nazw niejawnie mają dostęp publiczny. Aby zapoznać się z omówieniem modyfikatorów dostępu, które można przypisać do elementów w przestrzeni nazw, zobacz Modyfikatory dostępu.

Można zdefiniować przestrzeń nazw w co najmniej dwóch deklaracjach. Na przykład w poniższym przykładzie zdefiniowano dwie klasy w ramach MyCompany przestrzeni nazw:

namespace MyCompany.Proj1
{
    class MyClass
    {
    }
}

namespace MyCompany.Proj1
{
    class MyClass1
    {
    }
}

W poniższym przykładzie pokazano, jak wywołać metodę statyczną w zagnieżdżonej przestrzeni nazw.

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

specyfikacja języka C#

Aby uzyskać więcej informacji, zobacz sekcję Przestrzenie nazw specyfikacji języka C#. Aby uzyskać więcej informacji na temat deklaracji przestrzeni nazw o zakresie plików, zobacz specyfikację funkcji.

Zobacz też