从方法自己的实现中调用抽象函数

NoI*_*his 2 f# abstract

我试图从方法自己的实现中调用抽象函数.

[<AbstractClass>]
type CallAnAbstract () = 

    let doSomethingElse () = printfn "Done Something.."

    abstract doSomethingAbstract: unit -> unit

    member this.DoSomething =
        printfn "Done Something.."
        doSomethingElse ()
        doSomethingAbstract ()
Run Code Online (Sandbox Code Playgroud)

这导致错误:

错误FS0039:未定义值或构造函数"doSomethingAbstract"

从方法自己的实现调用抽象函数是非法的还是问题出在其他地方?

如果这是非法的, 这里(见答案)@Mark Seemann解释了继承的构成:

[<AbstractClass>]
type UseComposition (doSomethingElseDefinedLater) = 

    let doSomethingElse () = printfn "Done Something.."

    member this.DoSomething =
        printfn "Done Something.."
        doSomethingElse ()
        doSomethingElseDefinedLater ()
Run Code Online (Sandbox Code Playgroud)

有哪些替代方案?我避免通过构造函数传递函数,我想重用一些代码,DoSomething在调用抽象函数之前有"一些实现".

Dan*_*iel 5

您需要使用this参考:

this.doSomethingAbstract()
Run Code Online (Sandbox Code Playgroud)

  • 这是一个`abstract` _member_. (2认同)
  • `let`绑定不能用`this`引用调用,只能用成员调用.确实,`abstract`成员定义不包含关键字`member`,但是覆盖或默认实现. (2认同)