Syntax F#构造函数语法-覆盖和扩充新
我有一个具有打开/关闭语法的非一次性类,我希望能够Syntax F#构造函数语法-覆盖和扩充新,syntax,f#,constructor,Syntax,F#,Constructor,我有一个具有打开/关闭语法的非一次性类,我希望能够使用它,因此我尝试从它继承,并将打开操作转换为新的和关闭操作 第二部分还可以,但我不知道如何打开: type DisposableOpenCloseClass(openargs) = inherit OpenCloseClass() //do this.Open(openargs) <-- compiler no like interface IDisposable with member this
使用它,因此我尝试从它继承,并将打开操作转换为新的和关闭操作
第二部分还可以,但我不知道如何打开:
type DisposableOpenCloseClass(openargs) =
inherit OpenCloseClass()
//do this.Open(openargs) <-- compiler no like
interface IDisposable
with member this.Dispose() = this.Close()
类型DisposableOpenCloseClass(openargs)=
继承OpenCloseClass()
//执行此操作。打开(openargs)键为,如下所示:
type OpenCloseClass() =
member this.Open(x) = printfn "opened %d" x
member this.Close() = printfn "closed"
open System
type DisposableOpenCloseClass(openargs) as this =
inherit OpenCloseClass()
do this.Open(openargs)
interface IDisposable
with member this.Dispose() = this.Close()
let f() =
use docc = new DisposableOpenCloseClass(42)
printfn "inside"
f()
正如Brian所建议的,您可以使用作为这个
子句。然而,在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"