如何将本地构造函数变量转换为成员

Joh*_*lds 0 f#

我在构造函数中创建一个计时器,并希望使计时器成为构造类的成员.由于计时器未被任何其他类成员引用,因此它被编译为构造函数本地的变量,因此垃圾被收集和终止.

防止这种情况发生的一种方法是制作虚拟参考,例如

type MyClass() as o =
    let timer = new Timer((fun _ -> o.Tick()), null, 0, 1000)

    member private o.DummyRef = timer
    member o.Tick() = printfn "Tick!"
Run Code Online (Sandbox Code Playgroud)

有没有更简洁的方式强迫timer成为会员?

Dan*_*iel 5

如果你想让它成为一个成员,那么let这个工作是错误的工具,因为根据规范,编译形式(局部变量或字段)由编译器决定.你可能想要一个私有财产:

type MyClass() as o =
    member val private Timer = new Timer((fun _ -> o.Tick()), null, 0, 1000)
Run Code Online (Sandbox Code Playgroud)