共用方式為


命名空間 (F#)

命名空間可讓您將名稱附加至程式項目群組,將程式碼依相關功能分類。

namespace [parent-namespaces.]identifier

備註

如果您要將程式碼放在命名空間中,檔案中的第一個宣告必須宣告命名空間, 整個檔案的內容接著會成為命名空間的一部分。

命名空間不可以直接包含值和函式。 值和函式必須包含在模組中,而模組則是包含在命名空間中。 命名空間可以包含型別、模組。

命名空間可以透過 namespace 關鍵字明確宣告,或在宣告模組時隱含宣告。 若要明確宣告命名空間,請使用 namespace 關鍵字,後面接著命名空間名稱。 下列範例示範會宣告命名空間 Widgets 的程式碼檔,而該命名空間中包含型別和模組。

namespace Widgets

type MyWidget1 =
    member this.WidgetName = "Widget1"

module WidgetsModule =
    let widgetName = "Widget2"

如果整個檔案內容是在一個模組中,您也可以使用 module 關鍵字並在完整限定的模組名稱中提供新命名空間名稱,以隱含宣告命名空間。 下列範例示範會宣告命名空間 Widgets 和模組 WidgetsModule (其中包含函式) 的程式碼檔。

module Widgets.WidgetModule

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

下列程式碼相當於上述程式碼,但是模組是區域模組宣告。 在此情況下,命名空間必須放在在本身所在的那一行。

namespace Widgets

module WidgetModule =

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

如果一個或多個命名空間的同一個檔案中需要多個模組,您必須使用區域模組宣告。 使用區域模組宣告時,不可以在模組宣告中使用限定命名空間。 在下列程式碼中,會示範包含一個命名空間宣告和兩個區域模組宣告的檔案。 在此情況下,模組直接包含在命名空間中,因此沒有和檔案相同名稱的隱含建立模組。 檔案中的任何其他程式碼 (例如 do 繫結) 都是在命名空間中,而不是在內部模組中,因此您必須使用模組名稱來限定模組成員 widgetFunction。

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

這個範例的輸出如下。

Module1 10 20
Module2 5 6

如需詳細資訊,請參閱模組 (F#)

巢狀的命名空間

建立巢狀命名空間時,必須完整限定這個命名空間, 否則就會建立新的最上層命名空間。 命名空間宣告中的縮排將予以忽略。

下列範例示範如何宣告巢狀命名空間。

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"

檔案和組件中的命名空間

命名空間可以跨單一專案或編譯中的多個檔案。 「命名空間片段」(Namespace Fragment) 描述包含在一個檔案中之命名空間的一部分。 命名空間也可以跨多個組件。 例如,System 命名空間包含整個 .NET Framework,它跨許多組件並且包含許多巢狀命名空間。

全域命名空間

您可以使用預先定義的 global 命名空間,以將名稱放在 .NET 最上層命名空間中。

namespace global

type SomeType() =
    member this.SomeMember = 0

您也可以使用最上層 .NET 命名空間的全域參考,例如,解決與其他命名空間的名稱衝突。

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

請參閱

參考

模組 (F#)

其他資源

F# 語言參考