Interface 为什么这种类型不是接口?
我想为相等和比较函数创建一个带有默认实现的接口 如果我从类型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.IdInterface 为什么这种类型不是接口?,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一个接口不能有方法实现,而您的类型有五个——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