Partager via


Espaces de noms (F#)

Un espace de noms vous permet d'organiser le code en zones de fonctionnalités connexes. Pour cela, vous attachez un nom à un regroupement d'éléments de programme.

namespace [parent-namespaces.]identifier

Notes

Si vous voulez placer du code dans un espace de noms, la première déclaration dans le fichier doit déclarer l'espace de noms. Le contenu du fichier entier devient ensuite partie intégrante de l'espace de noms.

Les espaces de noms ne peuvent pas contenir directement de valeurs et de fonctions. À la place, les valeurs et les fonctions doivent être incluses dans des modules, et les modules sont inclus dans des espaces de noms. Les espaces de noms peuvent contenir des types, des modules.

Les espaces de noms peuvent être déclarés explicitement avec le mot clé namespace, ou implicitement lors de la déclaration d'un module. Pour déclarer un espace de noms explicitement, utilisez le mot clé namespace suivi du nom de l'espace de noms. L'exemple suivant montre un fichier de code qui déclare un espace de noms Widgets avec un type et un module inclus dans celui-ci.

namespace Widgets

type MyWidget1 =
    member this.WidgetName = "Widget1"

module WidgetsModule =
    let widgetName = "Widget2"

Si le contenu entier du fichier se trouve dans un module, vous pouvez également déclarer implicitement des espaces de noms en utilisant le mot clé module et en indiquant le nom du nouvel espace de noms dans le nom de module qualifié complet. L'exemple suivant présente un fichier de code qui déclare un espace de noms Widgets et un module WidgetsModule qui contient une fonction.

module Widgets.WidgetModule

let widgetFunction x y =
   printfn "%A %A" x y

Le code suivant équivaut au code précédent, mais le module est une déclaration de module locale. Dans ce cas, l'espace de noms doit apparaître sur sa propre ligne.

namespace Widgets

module WidgetModule =

    let widgetFunction x y =
        printfn "%A %A" x y

Si plusieurs modules sont requis dans le même fichier dans un ou plusieurs espaces de noms, vous devez utiliser des déclarations de module locales. Lorsque vous utilisez des déclarations de module locales, vous ne pouvez pas utiliser l'espace de noms qualifié dans les déclarations de module. Le code suivant présente un fichier avec une déclaration d'espace de noms et deux déclarations de module locales. Dans ce cas, les modules sont contenus directement dans l'espace de noms ; aucun module créé implicitement n'a le même nom que le fichier. Tout autre segment de code dans le fichier, par exemple une liaison do, se trouve dans l'espace de noms mais pas dans les modules internes ; par conséquent, vous devez qualifier le membre de module widgetFunction à l'aide du nom de module.

namespace Widgets

module WidgetModule1 =
   let widgetFunction x y =
      printfn "Module1 %A %A" x y
module WidgetModule2 =
   let widgetFunction x y =
      printfn "Module2 %A %A" x y

module useWidgets =

  do
     WidgetModule1.widgetFunction 10 20
     WidgetModule2.widgetFunction 5 6

La sortie de cet exemple est la suivante.

Module1 10 20
Module2 5 6

Pour plus d'informations, consultez Modules (F#).

Espaces de noms imbriqués

Lorsque vous créez un espace de noms imbriqué, vous devez le qualifier complètement. Sinon, vous créez un espace de noms de niveau supérieur. La mise en retrait est ignorée dans les déclarations d'espace de noms.

L'exemple suivant montre comment déclarer un espace de noms imbriqué.

namespace Outer

    // Full name: Outer.MyClass
    type MyClass() =
       member this.X(x) = x + 1

// Fully qualify any nested namespaces.
namespace Outer.Inner

    // Full name: Outer.Inner.MyClass
    type MyClass() =
       member this.Prop1 = "X"

Espaces de noms dans les fichiers et les assemblys

Les espaces de noms peuvent couvrir plusieurs fichiers dans un projet ou une compilation unique. Le terme fragment d'espace de noms décrit la partie d'un espace de noms qui est incluse dans un fichier. Les espaces de noms peuvent aussi couvrir plusieurs assemblys. Par exemple, l'espace de noms System inclut la totalité du .NET Framework, qui couvre de nombreux assemblys et qui contient plusieurs espaces de noms imbriqués.

Global, espace de noms

Vous utilisez l'espace de noms prédéfini global pour mettre des noms dans l'espace de noms de niveau supérieur .NET.

namespace global

type SomeType() =
    member this.SomeMember = 0

Vous pouvez également utiliser global pour référencer l'espace de noms .NET de niveau supérieur, par exemple, pour résoudre des conflits de noms avec d'autres espaces de noms.

global.System.Console.WriteLine("Hello World!")

Voir aussi

Référence

Modules (F#)

Autres ressources

Référence du langage F#