2012-11-16 59 views
2

"Automatically implemented properties are part of the initialization of a type, so they must be included before any other member definitions, just like let bindings and do bindings in a type definition"初始化在F#

自动实现的属性但是,如果我以后在类型声明中的其他普通member this.性质把member val的编译器不抱怨。没关系?

我正确地说,初始化一个对象时,而不是当属性第一次被调用时,该属性被初始化?

例如

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

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

+2

你尝试运行呢? –

回答

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代码,在th Ë另一方面,不叫,直到你实际调用t.Bar),所以这个打印:

构造
初始化符
构建