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