Namespace

Das namespace-Schlüsselwort wird verwendet, um einen Gültigkeitsbereich zu deklarieren, der eine Gruppe von verwandten Objekten enthält. Sie können einen Namespace verwenden, um Codeelemente zu organisieren und global eindeutige Typen zu erstellen.

namespace SampleNamespace
{
    class SampleClass { }

    interface ISampleInterface { }

    struct SampleStruct { }

    enum SampleEnum { a, b }

    delegate void SampleDelegate(int i);

    namespace Nested
    {
        class SampleClass2 { }
    }
}

Mit dateibezogenen Namespacedeklarationen können Sie deklarieren, dass alle Typen in einer Datei sich in einem einzigen Namespace befinden. Dateibezogene Namespacedeklarationen sind ab C# 10 verfügbar. Das folgende Beispiel ähnelt dem vorherigen Beispiel, verwendet jedoch eine dateibezogene Namespacedeklaration:

using System;

namespace SampleFileScopedNamespace;

class SampleClass { }

interface ISampleInterface { }

struct SampleStruct { }

enum SampleEnum { a, b }

delegate void SampleDelegate(int i);

Das vorherige Beispiel enthält keinen geschachtelten Namespace. Dateibezogene Namespaces können keine zusätzlichen Namespacedeklarationen enthalten. Es ist nicht möglich, einen geschachtelten Namespace oder einen zweiten dateibezogenen Namespace zu deklarieren:

namespace SampleNamespace;

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

namespace AnotherNamespace; // Not allowed!

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

Innerhalb eines Namespace können Sie 0 (null) oder mehr der folgenden Typen deklarieren:

Der Compiler fügt einen Standardnamespace hinzu. Dieser unbenannte Namespace, der manchmal auch als der globale Namespace bezeichnet wird, ist in jeder Datei vorhanden. Er enthält Deklarationen, die nicht in einem deklarierten Namespace enthalten sind. Jeder Bezeichner im globalen Namespace ist für die Verwendung in einem benannten Namespace verfügbar.

Namespaces verfügen implizit über öffentlichen Zugriff. Eine Erläuterung der Zugriffsmodifizierer, die Sie einem Element in einem Namespace zuweisen können, finden Sie unter Zugriffsmodifizierer.

Es ist möglich, einen Namespace in zwei oder mehr Deklarationen zu definieren. Im folgenden Beispiel werden beispielsweise zwei Klassen als Teil des MyCompany-Namespace definiert:

namespace MyCompany.Proj1
{
    class MyClass
    {
    }
}

namespace MyCompany.Proj1
{
    class MyClass1
    {
    }
}

Im folgenden Beispiel wird veranschaulicht, wie eine statische Methode in einem geschachtelten Namespace aufgerufen wird.

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

C#-Sprachspezifikation

Weitere Informationen finden Sie im Abschnitt Namespaces der C#-Sprachspezifikation. Weitere Informationen zu dateibezogenen Namespacedeklarationen finden Sie unter Featurespezifikation.

Weitere Informationen