Verwenden von Namespaces (C#-Programmierhandbuch)Using Namespaces (C# Programming Guide)

Namespaces werden häufig in C# -Programmen auf zwei verschiedene Arten verwendet.Namespaces are heavily used within C# programs in two ways. Erstens: Die .NET Framework-Klassen verwenden Namespaces, um ihre zahlreichen Klassen zu organisieren.Firstly, the .NET Framework classes use namespaces to organize its many classes. Zweitens: Eigene Namespaces zu deklarieren kann Ihnen dabei helfen, den Umfang der Klassen- und Methodennamen in größeren Programmierprojekten zu steuern.Secondly, declaring your own namespaces can help control the scope of class and method names in larger programming projects.

Zugriff auf NamespacesAccessing Namespaces

Die meisten C#-Anwendungen beginnen mit einem Abschnitt von using-Anweisungen.Most C# applications begin with a section of using directives. Dieser Abschnitt enthält die von der Anwendung häufig verwendeten Namespaces und erspart dem Programmierer die Angabe eines vollqualifizierten Namens bei jedem Verwenden einer enthaltenen Methode.This section lists the namespaces that the application will be using frequently, and saves the programmer from specifying a fully qualified name every time that a method that is contained within is used.

Z.B. durch das Einfügen der ZeileFor example, by including the line:

using System;

Bei Programmstart kann der Programmierer folgenden Code verwenden:At the start of a program, the programmer can use the code:

Console.WriteLine("Hello, World!");

anstelle von:Instead of:

System.Console.WriteLine("Hello, World!");

NamespacealiaseNamespace Aliases

Die using-Anweisungen kann auch zum Erstellen eines Alias für einen Namespace verwendet werden.The using Directive can also be used to create an alias for a namespace. Wenn Sie einen bereits vorhandenen Namespace verwenden, der geschachtelte Namespaces enthält, können Sie einen Alias deklarieren, als schnelle Möglichkeit um auf einen bestimmten geschachtelten Namespace zu verweisen, wie im folgenden Beispiel gezeigt:For example, if you are using a previously written namespace that contains nested namespaces, you might want to declare an alias to provide a shorthand way of referencing one in particular, as in the following example:

using Co = Company.Proj.Nested;  // define an alias to represent a namespace

Verwenden von Namespaces zur Steuerung des GültigkeitsbereichsUsing Namespaces to control scope

Mit dem Schlüsselwort namespace wird ein Bereich deklariert.The namespace keyword is used to declare a scope. Die Möglichkeit zum Erstellen von Bereichen innerhalb des Projekts, hilft Ihnen den Code zu organisieren und ermöglicht Ihnen die Erstellung von global eindeutigen Typen.The ability to create scopes within your project helps organize code and lets you create globally-unique types. Im folgenden Beispiel, wird eine Klasse mit dem Titel SampleClass in zwei ineinander geschachtelten Namespaces definiert.In the following example, a class titled SampleClass is defined in two namespaces, one nested inside the other. Die . Operator wird verwendet, um zu unterscheiden, welche Methode aufgerufen wird.The . Operator is used to differentiate which method gets called.

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

    // Create a nested namespace, and define another class.
    namespace NestedNamespace
    {
        class SampleClass
        {
            public void SampleMethod()
            {
                System.Console.WriteLine(
                  "SampleMethod inside NestedNamespace");
            }
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            // Displays "SampleMethod inside SampleNamespace."
            SampleClass outer = new SampleClass();
            outer.SampleMethod();

            // Displays "SampleMethod inside SampleNamespace."
            SampleNamespace.SampleClass outer2 = new SampleNamespace.SampleClass();
            outer2.SampleMethod();

            // Displays "SampleMethod inside NestedNamespace."
            NestedNamespace.SampleClass inner = new NestedNamespace.SampleClass();
            inner.SampleMethod();
        }
    }
}

Vollqualifizierte NamenFully Qualified Names

Namespaces und Typen verfügen über eindeutige durch den vollqualifizierten Namen, die eine logische Hierarchie an.Namespaces and types have unique titles described by fully qualified names that indicate a logical hierarchy. Beispielsweise impliziert die Anweisung A.B, dass A der Name des Namespaces oder des Typs ist und, dass B darin geschachtelt ist.For example, the statement A.B implies that A is the name of the namespace or type, and B is nested inside it.

Im folgenden Beispiel gibt es geschachtelte Klassen und Namespaces.In the following example, there are nested classes and namespaces. Der vollqualifizierte Name ist als Kommentar angegeben, der auf jede Entität folgt.The fully qualified name is indicated as a comment following each entity.

namespace N1     // N1
{
    class C1      // N1.C1
    {
        class C2   // N1.C1.C2
        {
        }
    }
    namespace N2  // N1.N2
    {
        class C2   // N1.N2.C2
        {
        }
    }
}

Das vorherige Codesegment weist Folgendes auf:In the previous code segment:

  • Der Namespace N1 ist ein Mitglied des globalen Namespaces.The namespace N1 is a member of the global namespace. Sein vollqualifizierter Name lautet N1.Its fully qualified name is N1.

  • Der Namespace N2 ist ein Mitglied von N1.The namespace N2 is a member of N1. Sein vollqualifizierter Name lautet N1.N2.Its fully qualified name is N1.N2.

  • Die Klasse C1 ist ein Mitglied von N1.The class C1 is a member of N1. Sein vollqualifizierter Name lautet N1.C1.Its fully qualified name is N1.C1.

  • Der Klassenname C2 wird zweimal in diesem Code verwendet.The class name C2 is used two times in this code. Die vollqualifizierten Namen sind jedoch eindeutig.However, the fully qualified names are unique. Die erste Instanz von C2 wird in C1 deklariert; daher lautet der vollqualifizierte Name: N1.C1.C2.The first instance of C2 is declared inside C1; therefore, its fully qualified name is: N1.C1.C2. Die zweite Instanz von C2 wird in einem Namespace N2 deklariert; daher lautet der vollqualifizierte Name: N1.N2.C2.The second instance of C2 is declared inside a namespace N2; therefore, its fully qualified name is N1.N2.C2.

Mithilfe des vorhergehenden Codesegments können Sie dem Namespace N1.N2 ein neues Klassenmitglied C3 wie folgt hinzufügen:Using the previous code segment, you can add a new class member, C3, to the namespace N1.N2 as follows:

namespace N1.N2
{
    class C3   // N1.N2.C3
    {
    }
}

Im Allgemeinen verwenden Sie ::, um auf einen Namespacealias, oder global::, um auf den globalen Namespace zu verweisen, und ., um Typen oder Mitglieder zu qualifizieren.In general, use :: to reference a namespace alias or global:: to reference the global namespace and . to qualify types or members.

Die Verwendung von :: mit einem Alias, der auf einen Typ statt auf einen Namespace verweist ist ein Fehler.It is an error to use :: with an alias that references a type instead of a namespace. Zum Beispiel:For example:

using Alias = System.Console;
class TestClass
{
    static void Main()
    {
        // Error
        //Alias::WriteLine("Hi");

        // OK
        Alias.WriteLine("Hi");
    }
}

Beachten Sie, dass das Wort global kein vorderfinierter Alias ist; deshalb hat global.X keine spezielle Bedeutung.Remember that the word global is not a predefined alias; therefore, global.X does not have any special meaning. Er erhält erst dann eine besondere Bedeutung, wenn er mit :: verwendet wird.It acquires a special meaning only when it is used with ::.

Compilerwarnung CS0440 wird generiert, wenn Sie einen Alias mit dem Namen global definieren, da global:: immer ein Verweis auf den globalen Namespace und nicht auf einen Alias ist.Compiler warning CS0440 is generated if you define an alias named global because global:: always references the global namespace and not an alias. Beispielsweise generiert die folgende Zeile die folgende Warnung:For example, the following line generates the warning:

using global = System.Collections;   // Warning

Die Verwendung von :: mit Aliasen ist ratsam, und verhindert die unbeabsichtigte Einführung von zusätzlichen Typen.Using :: with aliases is a good idea and protects against the unexpected introduction of additional types. Betrachten Sie beispielsweise das folgende Beispiel:For example, consider this example:

using Alias = System;
namespace Library
{
    public class C : Alias.Exception { }
}

Dies funktioniert, aber wenn anschließend ein Typ mit dem Namen Alias eingeführt werden würde, würde Alias. an diesen Typ gebunden.This works, but if a type named Alias were to subsequently be introduced, Alias. would bind to that type instead. Mit Alias::Exception wird sichergestellt, dass Alias als ein Namespacealias behandelt und nicht für einen Typ gehalten wird.Using Alias::Exception insures that Alias is treated as a namespace alias and not mistaken for a type.

Finden Sie im Thema Vorgehensweise: Verwenden des globalen Namespacealias Informationen zum global Alias.See the topic How to: Use the Global Namespace Alias for more information regarding the global alias.

Siehe auchSee Also

C#-ProgrammierhandbuchC# Programming Guide
NamespacesNamespaces
NamespaceschlüsselwörterNamespace Keywords
. Operator. Operator
::-Operator:: Operator
externextern