如何正确覆盖约束方法

rob*_*kuz 5 f# type-constraints

我如何覆盖Zero以下代码中的方法,以便我可以返回Euro(0)到中的定义type Euro

[<AbstractClass>] 
type Currency () =
    abstract member Zero<'T when 'T :> Currency > : unit -> 'T

type Euro (value: int) =
    inherit Currency()
    member this.Value = value
    override this.Zero() = Euro(0) :> _
Run Code Online (Sandbox Code Playgroud)

pbl*_*cci 7

您是否尝试将通用约束提升到类级别?

[<AbstractClass>] 
type Currency<'T when 'T :> Currency<'T>>() =
    abstract member Zero : unit -> 'T

type Euro (value: int) =
    inherit Currency<Euro>()
    member this.Value = value
    override this.Zero() = Euro(0)
Run Code Online (Sandbox Code Playgroud)

虽然自我引用的泛型对我来说总是很奇怪,但这就是它在C#中的表现方式.

  • Coolio ......什么是替代解决方案?使成员静态并放弃继承? (2认同)