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

kol*_*osy 9 f#

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

#light
namespace random

module bar

type foo() = ...
Run Code Online (Sandbox Code Playgroud)

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

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

Bri*_*ian 16

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

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

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