Compartilhar via


Espaços para nome (F#)

Um espaço para nome lhe permite organizar o código em áreas de funcionalidade relacionada, permitindo que você anexe um nome a um agrupamento de elementos do programa.

namespace [parent-namespaces.]identifier

Comentários

Se você deseja colocar o código em um namespace, a primeira declaração no arquivo deve declarar o namespace.O conteúdo do arquivo inteiro se tornarão parte do namespace.

Espaços para nome diretamente não podem conter valores e funções.Em vez disso, valores e funções devem ser incluídas nos módulos e módulos são incluídos nos namespaces.Espaços para nome podem conter tipos de módulos.

Espaços para nome podem ser declarados explicitamente com a palavra-chave do espaço para nome, ou implicitamente ao declarar um módulo.Para declarar um espaço para nome explicitamente, use a palavra-chave do espaço para nome seguida do nome do namespace.O exemplo a seguir mostra um arquivo de código que declara um espaço para nome Widgets com um tipo e um módulo incluído no namespace.

namespace Widgets

type MyWidget1 =
    member this.WidgetName = "Widget1"

module WidgetsModule =
    let widgetName = "Widget2"

Se todo o conteúdo do arquivo estiver em um módulo, você pode também declarar namespaces implicitamente, usando o module palavra-chave e fornecendo o novo nome de namespace no nome do módulo totalmente qualificado.O exemplo a seguir mostra um arquivo de código que declara um espaço para nome Widgets e um módulo de WidgetsModule, que contém uma função.

module Widgets.WidgetModule

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

O código a seguir é equivalente ao código anterior, mas o módulo é uma declaração de local do módulo.Nesse caso, o espaço para nome deve aparecer em sua própria linha.

namespace Widgets

module WidgetModule =

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

Se mais de um módulo é necessário no mesmo arquivo em um ou mais namespaces, você deve usar declarações do módulo local.Quando você usa declarações do módulo local, você não pode usar o espaço para nome qualificado nas declarações do módulo.O código a seguir mostra um arquivo que tenha uma declaração de namespace e duas declarações do módulo local.Nesse caso, os módulos estão contidos diretamente no namespace; Não há nenhum módulo implicitamente criado que tem o mesmo nome do arquivo.Qualquer outro código no arquivo, como um do de ligação, é no namespace, mas não nos módulos internos, para que você precise qualificar o membro do módulo widgetFunction usando o nome do módulo.

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

A saída deste exemplo é o seguinte.

Module1 10 20
Module2 5 6

Para obter mais informações, consulte Módulos (F#).

Espaços para nome aninhados

Quando você cria um namespace aninhado, preciso qualificá-la totalmente.Caso contrário, você pode criar um novo namespace de nível superior.Recuo é ignorado nas declarações de namespace.

O exemplo a seguir mostra como declarar um namespace aninhado.

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"

Espaços para nomes de arquivos e Assemblies

Espaços para nome podem abranger vários arquivos em um único projeto ou a compilação.O termo fragmento do namespace descreve a parte de um namespace que está incluído em um arquivo.Espaços para nome também podem abranger vários assemblies.Por exemplo, o System namespace inclui todo o .NET Framework, que engloba vários módulos (assemblies) e contém vários namespaces aninhados.

Namespace global

Você usa o namespace predefinido global para colocar os nomes na.NET namespace de nível superior.

namespace global

type SomeType() =
    member this.SomeMember = 0

Você também pode usar global para fazer referência de nível superior.NET namespace, por exemplo, para resolver o nome conflita com outros espaços para nome.

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

Consulte também

Referência

Módulos (F#)

Outros recursos

Referência de linguagem do F#