F# 在F中实现IList和IReadOnlyList

F# 在F中实现IList和IReadOnlyList,f#,F#,我想在F中为我的结构实现这两个接口,但它们有许多共同的成员。根据我找到的文档,我必须显式地实现这两个接口 在F中有没有办法在不重复实现公共成员的情况下实现它们?我认为在您的场景中,可以很好地使用的方法是将实际实现作为常规的非接口成员。然后,对于接口实现,只需重新扩展这些成员。比如: member this.GetEnumerator() = ... // actual logic goes here ... // other members interface IList<

我想在F中为我的结构实现这两个接口,但它们有许多共同的成员。根据我找到的文档,我必须显式地实现这两个接口


在F中有没有办法在不重复实现公共成员的情况下实现它们?

我认为在您的场景中,可以很好地使用的方法是将实际实现作为常规的非接口成员。然后,对于接口实现,只需重新扩展这些成员。比如:

 member this.GetEnumerator() = ... // actual logic goes here
 ... // other members     

 interface IList<T> with
     member this.GetEnumerator() = this.GetEnumerator()
     ... // other members

 interface IReadOnlyList<T> with
     member this.GetEnumerator() = this.GetEnumerator()
     ... // other members

我认为在您的场景中可以很好地工作的方法是将实际实现作为常规的非接口成员。然后,对于接口实现,只需重新扩展这些成员。比如:

 member this.GetEnumerator() = ... // actual logic goes here
 ... // other members     

 interface IList<T> with
     member this.GetEnumerator() = this.GetEnumerator()
     ... // other members

 interface IReadOnlyList<T> with
     member this.GetEnumerator() = this.GetEnumerator()
     ... // other members

为什么首先要实现这些接口?我并不是说这在任何情况下都是合适的,但是F已经给出了本地列表、数组和seq…F列表不是IList,它们更类似于ML列表。此外,我希望我的列表是可变的。@NET framework设计指南。@MarkSeemann,我知道。然而,就我而言,我认为这是必要的。我正在创建很多这样的对象,我希望它们是结构。在花了很多时间在GC中之后,它已经大大提高了我的应用程序的性能。此外,这些对象被分割成一个多维结构,类似于数组+索引+跨步+大小,因此基本上原始结构是可变的。这些对象只是它的部分变体的代理。为什么要首先实现这些接口?我并不是说这在任何情况下都是合适的,但是F已经给出了本地列表、数组和seq…F列表不是IList,它们更类似于ML列表。此外,我希望我的列表是可变的。@NET framework设计指南。@MarkSeemann,我知道。然而,就我而言,我认为这是必要的。我正在创建很多这样的对象,我希望它们是结构。在花了很多时间在GC中之后,它已经大大提高了我的应用程序的性能。此外,这些对象被分割成一个多维结构,类似于数组+索引+跨步+大小,因此基本上原始结构是可变的。这些对象只是它的一部分变异的代理。