2

“自动实现的属性是类型初始化的一部分,因此它们必须包含在任何其他成员定义之前,就像类型定义中的 let 绑定和 do 绑定一样”

member val但是如果我在类型声明中放在其他普通member this.属性之后,编译器不会抱怨。没关系?

我是否正确地说在初始化对象时初始化属性,而不是在第一次调用属性时?

例如

   member val = let printf "%A" "initializing"
                3 with get, set

所以每次我创建一个对象时,它都会打印“正在初始化?

4

1 回答 1

4

是的,自动实现的初始化代码member作为对象构造的一部分运行(即使您member x.Bar = ...在 之前放置了一些其他声明member val):

type Test() =
  do printfn "constructor"
  member x.Bar = 
    printfn "calling Bar"
    10
  member val Foo = 
    printfn "initializing Foo" 
    3 with get, set

let t = Test()
printfn "constructed"
t.Foo

构造函数中的代码首先运行,然后是Foo初始化(Bar另一方面,在您实际调用之前不会调用中的代码t.Bar),因此会打印:

构造函数
初始化 Foo
构造

于 2012-11-16T11:06:03.187 回答