类中的 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
,定义类中的专用字段。 如果希望在不重写代码的情况下更改成员的可访问性,这会很有用。 有关详细信息,请参阅访问控制。