Partager via


namespace

Le mot clé namespace est utilisé pour déclarer une portée qui contient un ensemble d’objets connexes. Vous pouvez utiliser un espace de noms pour organiser les éléments de code et créer des types globaux uniques.

namespace SampleNamespace
{
    class SampleClass { }

    interface ISampleInterface { }

    struct SampleStruct { }

    enum SampleEnum { a, b }

    delegate void SampleDelegate(int i);

    namespace Nested
    {
        class SampleClass2 { }
    }
}

Les déclarations d’espace de noms délimitées aux fichiers vous permettent de déclarer que tous les types d’un fichier se trouvent dans un espace de noms unique. Les déclarations d’espace de noms délimitées aux fichiers sont disponibles avec C# 10. L’exemple suivant est similaire à l’exemple précédent, mais il utilise une déclaration d’espace de noms délimitée par un fichier :

using System;

namespace SampleFileScopedNamespace;

class SampleClass { }

interface ISampleInterface { }

struct SampleStruct { }

enum SampleEnum { a, b }

delegate void SampleDelegate(int i);

Utilisation d’instructions dans des espaces de noms délimités par des fichiers

Lors de l’utilisation d’espaces de noms délimités par un fichier, l’emplacement des using instructions affecte leur étendue dans le fichier. Espaces de noms délimités par un fichier inférieur à la déclaration d’espace de noms traditionnelle équivalente qui se termine par un crochet fermant à la fin du fichier. Ce comportement détermine où using les directives sont appliquées comme suit :

  • Si les using instructions sont placées avant la déclaration d’espace de noms délimitée par un fichier, elles sont traitées comme étant en dehors de l’espace de noms et sont interprétées comme des espaces de noms complets.
  • Si les using instructions sont placées après la déclaration d’espace de noms délimitée par le fichier, elles sont délimitées dans l’espace de noms lui-même.

Par exemple :

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

Dans l’exemple ci-dessus, System est globalement accessible, tout en s’appliquant System.Text uniquement dans SampleNamespace.

L’exemple précédent n’inclut pas d’espace de noms imbriqué. Les espaces de noms délimités aux fichiers ne peuvent pas inclure de déclarations d’espace de noms supplémentaires. Vous ne pouvez pas déclarer un espace de noms imbriqué ou un deuxième espace de noms délimité au fichier :

namespace SampleNamespace;

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

namespace AnotherNamespace; // Not allowed!

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

Dans un espace de noms, vous pouvez déclarer zéro ou plusieurs des types suivants :

  • class
  • interface
  • struct
  • enum
  • delegate
  • les espaces de noms imbriqués peuvent être déclarés, sauf dans les déclarations d’espace de noms délimitées aux fichiers

Le compilateur ajoute un espace de noms par défaut. Cet espace de noms sans nom, parfois appelé espace de noms global, est présent dans chaque fichier. Il contient des déclarations non incluses dans un espace de noms déclaré. Tout identificateur dans l’espace de noms global peut être utilisé dans un espace de noms nommé.

Les espaces de noms ont implicitement un accès public. Consultez Modificateurs d’accès pour connaître les modificateurs d’accès que vous pouvez assigner à des éléments dans un espace de noms.

Il est possible de définir un espace de noms dans deux déclarations ou plus. Par exemple, l’exemple suivant définit deux classes comme appartenant à l’espace de noms MyCompany :

namespace MyCompany.Proj1
{
    class MyClass
    {
    }
}

namespace MyCompany.Proj1
{
    class MyClass1
    {
    }
}

L’exemple suivant montre comment appeler une méthode statique dans un espace de noms imbriqué.

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

spécification du langage C#

Pour plus d’informations, voir la section Espace de noms de la spécification du langage C#. Pour plus d’informations sur les déclarations d’espace de noms délimitées aux fichiers, consultez la spécification des fonctionnalités.

Voir aussi