代码之家  ›  专栏  ›  技术社区  ›  Daniel

使用对象表达式创建接口类型时重写ToString

f#
  •  3
  • Daniel  · 技术社区  · 15 年前

    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
    
    1 回复  |  直到 15 年前
        1
  •  5
  •   JaredPar    15 年前

    在包含具体类型的对象表达式中,可以提供多个类型来实现/重写。这允许您指定 Object INamedObject 在表达式中获得所需的效果。

    let makeNamedObject name =  
        { 
            new System.Object() with 
                member x.ToString() = name
            interface INamedObject with
                member x.Name = name  }