2010-11-08 75 views
2

使用對象表達式創建接口類型時,有沒有辦法覆蓋System.Object的虛擬方法,特別是ToString使用對象表達式創建接口類型時覆蓋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 

回答

4

可以提供多種類型以在包括具體類型的對象表達式中實現/覆蓋。這允許您在表達式中指定ObjectINamedObject並獲得所需的效果。

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