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!")