В исходном определении F2
является свойством только для чтения, и функция PostProcess
будет вызываться при каждом обращении к нему. Это легко проверить:
let PostProcess s = printfn "%s" s; s
type Foo(f1: int, f2: string) =
member x.F1 = f1
member x.F2 = PostProcess f2
let f = Foo(1,"test")
let s1 = f.F2
let s2 = f.F2
Вот как я написал бы класс для обработки только один раз:
type Foo(f1: int, f2: string) =
let pf2 = PostProcess f2
member x.F1 = f1
member x.F2 = pf2