Udostępnij za pośrednictwem


Przestrzenie nazw (F#)

Obszar nazw umożliwia organizowanie kodu w obszarach związanych z nimi funkcji umożliwiając dołączyć nazwę do grupowania elementów programu.

namespace [parent-namespaces.]identifier

Uwagi

Jeśli chcesz umieścić kod w przestrzeni nazw, pierwszego zgłoszenia w pliku należy zadeklarować obszaru nazw.Następnie zawartość całego pliku stają się częścią obszaru nazw.

Przestrzenie nazw bezpośrednio nie mogą zawierać, wartości i funkcje.Zamiast tego wartości i funkcje, które muszą być uwzględnione w modułach i moduły są uwzględniane w przestrzeni nazw.Przestrzenie nazw może zawierać typy modułów.

Obszary nazw może być deklarowana jawnie ze słowem kluczowym obszaru nazw lub niejawnie podczas deklarowania moduł.Aby jawnie deklarować przestrzeni nazw, należy użyć słowa kluczowego namespace następuje nazwa obszaru nazw.W poniższym przykładzie przedstawiono plik kodu, który deklaruje obszaru nazw elementów widget typu i moduł, zawarte w tym obszarze nazw.

namespace Widgets

type MyWidget1 =
    member this.WidgetName = "Widget1" 

module WidgetsModule =
    let widgetName = "Widget2"

Jeśli w jednym modułem całą zawartość pliku, można także deklarować przestrzeni nazw niejawnie przy użyciu module słowa kluczowego i dostarczanie nową nazwę obszaru nazw w polu Nazwa modułu w pełni kwalifikowana.Poniższy przykład ilustruje plik kodu, który jest deklarowany obszar nazw Widgets i moduł WidgetsModule, która zawiera funkcję.

module Widgets.WidgetModule

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

Poniższy kod jest równoważne z powyższym kodzie, ale moduł jest deklaracja lokalnych modułu.W takim przypadku obszar nazw musi znajdować się w osobnym wierszu.

namespace Widgets

module WidgetModule =

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

Jeśli więcej niż jeden moduł jest wymagane w tym samym pliku w jednej lub więcej obszarów nazw, należy użyć deklaracji lokalnych modułu.Używane deklaracje lokalne moduł, nie można użyć nazw kwalifikowaną deklaracji modułu.Poniższy kod ilustruje plik, który ma deklaracja obszaru nazw i dwie deklaracje lokalnych modułu.W przypadku modułów znajdują się bezpośrednio w obszarze nazw; nie istnieje żadne niejawnie utworzony moduł, który ma taką samą nazwę jak plik.Inny kod w pliku, takie jak do wiążące, jest w obszarze nazw, ale nie w wewnętrzne moduły, więc trzeba kwalifikują się do członka moduł widgetFunction przy użyciu nazwy modułu.

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

W tym przykładzie danych wyjściowych jest następująca:

Module1 10 20
Module2 5 6

Aby uzyskać więcej informacji, zobacz Moduły (F#).

Zagnieżdżone obszarów nazw

Podczas tworzenia zagnieżdżonych nazw pełni należy zakwalifikować go.W przeciwnym razie utwórz nowy obszar nazw najwyższego poziomu.Wcięcie jest ignorowana w deklaracji obszaru nazw.

Poniższy przykład pokazuje, jak zadeklarować zagnieżdżonych nazw.

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"

Przestrzenie nazw plików i zestawów

Przestrzenie nazw może obejmować wiele plików w pojedynczy projekt lub kompilacji.Określenie fragment obszaru nazw opisuje część obszaru nazw, który znajduje się w jednym pliku.Przestrzenie nazw mogą obejmować wiele zespołów.Na przykład System nazw obejmuje całość .NET Framework, który obejmuje wiele zestawów i zawiera wiele zagnieżdżonych przestrzeni nazw.

Globalny obszar nazw

Użyj wstępnie zdefiniowanych nazw global do nazwy.NET przestrzeni nazw najwyższego poziomu.

namespace global 

type SomeType() =
    member this.SomeMember = 0

Umożliwia także globalne Aby odwołać się za najwyższego poziomu.NET nazw, na przykład, aby rozwiązać konflikty nazw w innych obszarach nazw.

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

Zobacz też

Informacje

Moduły (F#)

Inne zasoby

Materiały referencyjne dotyczące języka F#