F#等价于析构函数

F#等价于析构函数,f#,finalizer,c#-to-f#,F#,Finalizer,C# To F#,我正在翻译一个将非托管库包装成F的C类。我遇到了一个看似简单的问题,即重写下面的析构函数 class Wrapper { // P/Invoke ellided private SomeType x; public Wrapper() { x = new SomeType(); Begin(); } public ~Wrapper() { End(); } 此时,我得到的简化F#代码如下:

我正在翻译一个将非托管库包装成F的C类。我遇到了一个看似简单的问题,即重写下面的析构函数

class Wrapper {

    // P/Invoke ellided

    private SomeType x;

    public Wrapper() {
        x = new SomeType();
        Begin();
    }

    public ~Wrapper() {
        End();
    }
此时,我得到的简化F#代码如下:

type Wrapper() =
  [<Literal>]
  static let wrappedDll = "Library.dll"

  [<DllImport(wrappedDll , EntryPoint = "Begin")>]
  static extern void Begin()

  [<DllImport(wrappedDll , EntryPoint = "End")>]
  static extern void End()

  let x = new SomeType()

  do
    Begin()
类型包装器()=
[]
静态let wrappedll=“Library.dll”
[]
静态外部无效开始()
[]
静态外部无效结束()
设x=newsometype()
做
开始
如何修改此F#代码以使其具有相同的行为?我对F#destructor的搜索在我拥有的书籍或网络上都没有找到结果


谢谢。

你试过寻找F#finalizer吗

override x.Finalize() = ...
命名空间FSharp.Library
将MyClass()键入为self=
设可变=假;
//TODO定义包括一次性对象在内的变量
do//TODO执行初始化代码
()
//清除资源的内部方法
让清理(处理:bool)=
如果不处理,则

您有一个C#类,它有一个终结器,但没有实现
IDisposable
?多么奇怪-这里有一篇关于如何正确实现IDisposable的博客文章:根据经验,如果聚合一次性对象,或者保留非托管资源,则需要实现IDisposable。对于这两种情况,清理的方式不同。否则,请保持简单,不要将你的代码与网络主义混为一谈。@GregC:Wow,这是一种很好的表达方式。@ildjarn:我在学校里,在文卡特·苏布拉曼尼亚姆(Venkat Subramaniam)教的一节课上听到过。