创建一个干净的抽象层

时间:2014-02-07 14:13:34

标签: design-patterns f#

我遇到了一个问题,我不确定要使用哪种数据类型。目前我已经去了Array2D<'T>,但我将来可能会改变主意使用另一个容器。在C ++中,我将使用实例方法,我可以使用typedef,我可以随时更改(只要我的新容器支持所有必需的方法)。这将提供一个干净的抽象层,允许我按照我认为合适的方式进行更改。

我如何在F#中做同样的事情? typedef有用吗?这是否会使用Haskell的“更高级别的类型”?

1 个答案:

答案 0 :(得分:2)

如果所有使用的方法在缩写类型

中相同,则

Type abbreviations可以正常工作

type MyType<'T> = Array2D<'T>

您可以使用MyType&lt;'T&gt;到处都可以取代实际的实施。缩写在编译时被删除。

尽管正如Gustavo在评论中所说,在.NET中,相同的方法在类型/类上并不常见,除非它们是从相同的基类型/类派生或实现相同的接口 - 然后使用它更自然直接接口。