共用方式為


類別中的 let 繫結 (F#)

您可以在類別定義中使用 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 關鍵字 (F#)

您也可以使用成員定義並將 private 關鍵字加入定義中,定義類別中的私用欄位。 如果您要變更成員的存取範圍,但不要重寫程式碼,這麼做會很有用。 如需詳細資訊,請參閱存取控制 (F#)

請參閱

參考

類別中的 do 繫結 (F#)

let 繫結 (F#)

其他資源

成員 (F#)