Interface 为什么这种类型不是接口?

Interface 为什么这种类型不是接口?,interface,f#,default-method,Interface,F#,Default Method,我想为相等和比较函数创建一个带有默认实现的接口 如果我从类型IKeyable IComparable>= 抽象成员键:“A” 默认值为this.Equals obj=//为清晰起见隐藏 默认值this.GetHashCode=//为清晰起见隐藏 接口与 member this.CompareTo otherKey=//为清晰起见隐藏 接口i可与 member this.CompareTo obj=//为清晰起见隐藏 类型操作= {Id:Guid} 接口IKeyable with//Error:类

我想为相等和比较函数创建一个带有默认实现的接口

如果我从类型IKeyable IComparable>= 抽象成员键:“A” 默认值为this.Equals obj=//为清晰起见隐藏 默认值this.GetHashCode=//为清晰起见隐藏 接口与 member this.CompareTo otherKey=//为清晰起见隐藏 接口i可与 member this.CompareTo obj=//为清晰起见隐藏 类型操作= {Id:Guid} 接口IKeyable with//Error:类型“IKeyable”不是接口类型 成员this.Key=this.Id
我想使用IKeyable一个接口不能有方法实现,而您的类型有五个——Equals、GetHashCode、IEquatable.Equals、IComparable.CompareTo和IComparable.CompareTo

接口纯粹是一组方法和属性。它不像基类,它不能给实现者一些默认的实现或基类行为或实用程序方法

要使您的类型成为接口,请放弃所有实现:

type IKeyable<'A when 'A: equality and 'A :> IComparable> = 
    inherit IEquatable<'A>
    inherit IComparable<'A>
    abstract member Key : 'A

谢谢,我认为使用默认实现是可能的,因为这样:但是,您可以提供一个默认实现,它还包括一个单独的成员定义作为一个方法,以及默认关键字source:That语句在技术上是正确的,因为您可以使用抽象成员。但它不适用于接口。这看起来像是文档中的一个bug。
type Operation(id: Guid)
    inherit IKeyable<Guid>
    override this.Key = id
    member val Id = id