F#等价于析构函数
我正在翻译一个将非托管库包装成F的C类。我遇到了一个看似简单的问题,即重写下面的析构函数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#代码如下:
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)教的一节课上听到过。