Ответ 1
Вы пробовали искать финализатор F #?
override x.Finalize() = ...
Я переводил класс С#, который обертывает неуправляемую библиотеку в 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()
Как я могу изменить этот код F #, чтобы иметь такое же поведение? Мои поиски F # destructor не показали результатов в книгах, которые у меня есть или в Интернете.
Спасибо.
Вы пробовали искать финализатор F #?
override x.Finalize() = ...
namespace FSharp.Library
type MyClass() as self =
let mutable disposed = false;
// TODO define your variables including disposable objects
do // TODO perform initialization code
()
// internal method to cleanup resources
let cleanup(disposing:bool) =
if not disposed then
disposed <- true
if disposing then
// TODO dispose of managed resources
()
// TODO cleanup unmanaged resources
()
// implementation of IDisposable
interface IDisposable with
member self.Dispose() =
cleanup(true)
GC.SuppressFinalize(self)
// override of finalizer
override self.Finalize() =
cleanup(false)
Шаблон библиотеки классов F #
http://blogs.msdn.com/b/mcsuksoldev/archive/2011/06/05/f-class-library-template.aspx