2009-07-20 134 views
8

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

#light 
namespace random 

module bar 

type foo() = ... 

现在,当我去消费型random.foo.bar,C#智能感知将其视为bar类型,嵌套在random.foo类型。

现在的问题是:C#将外部可用代码定义到模块而不是名称空间中有什么优势吗?我明白模块是组合函数的好方法,但类怎么样?

+0

可能的dupe,http:// stackoverflow .com/questions/795172 /命名空间与模块之间的区别是什么 – harms 2009-07-20 19:37:44

+1

有点类似,但我更多地寻找非f#interop的最佳实践。那就是说,一个是另一个的必然结果。 – kolosy 2009-07-20 20:40:02

回答

16

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

(模块或者是一种方便的方法来发布F# - 只成分,或作为一个发布.NET类的F#组件的“内部”的实施细则。中值,函数和类型)

(不要见this question讨论命名空间和模块之间的'技术区别'。这个问题和我上面的回答更多地是关于'故意的区别',例如,当你选择使用每一个时。)