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, funções e os valores 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 de namespace 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 do namespace do nome totalmente qualificado do módulo. O exemplo a seguir mostra um arquivo de código 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 namespace 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 as declarações do módulo local. Quando você usa as declarações do módulo local, é possível usar o espaço para nome qualificado nas declarações do módulo. O código a seguir mostra um arquivo que tem 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 criado implicitamente que tem o mesmo nome do arquivo. Qualquer outro código no arquivo, como um do a ligação, é no namespace, mas não nos módulos internos, portanto você precisa 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#).

Namespaces 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"

Namespaces em arquivos e Assemblies

Namespaces podem abranger vários arquivos em um único projeto ou a compilação. O termo o fragmento de namespace descreve a parte de um namespace que está incluído em um arquivo. Namespaces também podem abranger vários assemblies. Por exemplo, o System namespace inclui todo o .NET Framework, que abrange muitos 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 conflitos de nome com outros namespaces.

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

Consulte também

Referência

Módulos (F#)

Outros recursos

Referência de linguagem do F#