Freigeben über


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);

Verwenden von Anweisungen in Namespaces mit Dateibereich

Bei Verwendung von Namespaces mit Dateibereich wirkt sich die Platzierung von using Anweisungen auf ihren Bereich innerhalb der Datei aus. Dateibereichsnamespaces unter der entsprechenden herkömmlichen Namespacedeklaration, die mit einer schließenden Klammer am Ende der Datei endet. Dieses Verhalten bestimmt, wo using Direktiven wie folgt angewendet werden:

  • Wenn die using Anweisungen vor der Deklaration mit Dateibereichsnamespace platziert werden, werden sie als außerhalb des Namespaces behandelt und als vollqualifizierte Namespaces interpretiert.
  • Wenn die using Anweisungen nach der Deklaration mit Dateibereichsnamespace platziert werden, werden sie innerhalb des Namespaces selbst festgelegt.

Zum Beispiel:

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

Im obigen Beispiel System ist global zugänglich, gilt jedoch System.Text nur innerhalb SampleNamespacevon .

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