類別中的 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#)。