使用对象表达式创建接口类型时覆盖ToString

Dan*_*iel 3 f#

有没有一种方法可以覆盖System.Object的虚拟方法,尤其是ToString在使用对象表达式创建接口类型时?

type INamedObject =
    abstract Name : string

let makeNamedObject name = 
    { new INamedObject with
        member x.Name = name
        override x.ToString() = x.Name } //would like to do this, but doesn't work
Run Code Online (Sandbox Code Playgroud)

Jar*_*Par 5

可以提供多种类型来实现/覆盖包含具体类型的对象表达式。这使您既可以在表达式中指定ObjectINamedObject在表达式中获得所需的效果。

let makeNamedObject name =  
    { 
        new System.Object() with 
            member x.ToString() = name
        interface INamedObject with
            member x.Name = name  }
Run Code Online (Sandbox Code Playgroud)