我有一个F#类,派生自一个带有多个构造函数的.net类.为了公开它们,我实现了一个没有主构造函数的类型.现在我想添加一个静态字段.如何初始化静态字段?考虑一下:
type MyType =
inherit DotNetType
[<DefaultValue>] static val mutable private myStatic : int
new () = { inherit DotNetType() }
new (someArg:string) = { inherit DotNetType(someArg) }
Run Code Online (Sandbox Code Playgroud)
现在,如何在使用类型的情况下以一次运行的方式初始化"myStatic"字段,如果从未使用该类型,则根本不运行?本质上,我需要等效的C#静态构造函数块.
请参阅F# 规范的第8.6.3节“类中的其他对象构造函数”:
对于没有主构造函数的类,可以在对象的字段初始化后使用
additional-constr-expr then stmt表单来执行副作用。
例子:
type MyType =
inherit DotNetType
[<DefaultValue>] static val mutable private myStatic : int
new () = { inherit DotNetType() } then MyType.myStatic <- 1
new (someArg:string) = { inherit DotNetType(someArg) }
static member Peek = MyType.myStatic
MyType.Peek |> printfn "%d" // prints 0
MyType() |> ignore
MyType.Peek |> printfn "%d" // prints 1
Run Code Online (Sandbox Code Playgroud)