模块v。F#中的命名空间

时间:2009-07-20 19:26:09

标签: f#

我有一个用F#编写的库,由C#和F#使用。此库在模块foo中定义了类bar,在名称空间random中:

#light
namespace random

module bar

type foo() = ...

现在,当我去消费类型random.foo.bar时,C#intellisense将其视为bar类型,嵌套在random.foo类型中。

问题是:C#将外部可消耗代码定义到模块而不是名称空间中是否有优势?我知道模块是分组函数的好方法,但类呢?

1 个答案:

答案 0 :(得分:16)

如果您要发布F#组件以供其他.Net语言使用,那么您应该避免使用公共接口中的模块,并坚持使用包含类,结构和枚举的名称空间。

(模块是在F#-only组件中发布值,函数和类型,或者作为发布.Net类的F#组件的“内部”实现细节的便捷方式。)

(请参阅this question讨论名称空间和模块之间的“技术区别”。这个问题和我上面的答案更多地是关于“故意差异”,例如当您选择使用每个时。)