Как предлагает Брайан, вы можете использовать предложение as this
.Однако в F # обычно рекомендуется использовать подклассы (наследование) только тогда, когда для этого есть действительно веские причины (например, вам нужно реализовать какой-то виртуальный класс и передать его в библиотеку .NET).
Если бы я реализовывал ваш пример, я бы, вероятно, предпочел бы функцию, возвращающую IDisposable
с использованием простого выражения объекта :
let disposableOpenClose(openargs) =
let oc = new OpenCloseClass()
oc.Open(openargs)
{ new IDisposable with
member this.Dispose() = oc.Close() }
let f() =
use docc = disposableOpenClose(42)
printfn "inside"
В какой-то момент это всего лишь личные предпочтения, но ядумаю, что это предпочтительный вариант, потому что он проще, чем использование наследования (хотя у меня нет документа для ссылки здесь :-)).Кроме того, скомпилированный код может быть немного проще, потому что обработка as this
может потребовать некоторых проверок во время выполнения.