類別中的 let 繫結

您可以在類別定義中使用 let 繫結,定義 F# 類別的私用欄位和私用函式。

語法

// Field.
[static] let [ mutable ] binding1 [ and ... binding-n ]

// Function.
[static] let [ rec ] binding1 [ and ... binding-n ]

備註

先前的語法會出現在類別標題和繼承宣告之後,但出現在任何成員定義之前。 語法就像是類別外部的 let 繫結,但類別中定義的名稱範圍僅限於該類別。 let 繫結會建立私用欄位或函式;若要公開資料或函式,請宣告屬性或成員方法。

非靜態的 let 繫結稱為執行個體 let 繫結。 執行個體 let 繫結會在建立物件時執行。 靜態 let 繫結為該類別的靜態初始設定式的一部分,保證會在首次使用該類型之前執行。

執行個體 let 繫結中的程式碼可以使用主要建構函式參數。

類別中的 let 繫結不得包含屬性和存取範圍修飾詞。

下列程式碼範例說明類別中的數種 let 繫結類型。

type PointWithCounter(a: int, b: int) =
    // A variable i.
    let mutable i = 0

    // A let binding that uses a pattern.
    let (x, y) = (a, b)

    // A private function binding.
    let privateFunction x y = x * x + 2 * y

    // A static let binding.
    static let mutable count = 0

    // A do binding.
    do count <- count + 1

    member this.Prop1 = x
    member this.Prop2 = y
    member this.CreatedCount = count
    member this.FunctionValue = privateFunction x y

let point1 = PointWithCounter(10, 52)

printfn "%d %d %d %d" (point1.Prop1) (point1.Prop2) (point1.CreatedCount) (point1.FunctionValue)

輸出如下。

10 52 1 204

建立欄位的替代方式

您也可以使用 val 關鍵字來建立私用欄位。 使用 val 關鍵字時,在建立物件時不會為該欄位指定值,而是使用預設值進行初始化。 如需詳細資訊,請參閱明確欄位:val 關鍵字

您也可以使用成員定義,並將 private 關鍵字新增至定義,藉此定義類別中的私用欄位。 如果您希望在不重寫程式碼的情況下變更成員的存取範圍,這個做法相當實用。 如需詳細資訊,請參閱存取控制

另請參閱