我有一个用F#编写的库,由C#和F#使用。此库在模块foo
中定义了类bar
,在名称空间random
中:
#light
namespace random
module bar
type foo() = ...
现在,当我去消费类型random.foo.bar
时,C#intellisense将其视为bar
类型,嵌套在random.foo
类型中。
问题是:C#将外部可消耗代码定义到模块而不是名称空间中是否有优势?我知道模块是分组函数的好方法,但类呢?
答案 0 :(得分:16)
如果您要发布F#组件以供其他.Net语言使用,那么您应该避免使用公共接口中的模块,并坚持使用包含类,结构和枚举的名称空间。
(模块是在F#-only组件中发布值,函数和类型,或者作为发布.Net类的F#组件的“内部”实现细节的便捷方式。)
(请参阅this question讨论名称空间和模块之间的“技术区别”。这个问题和我上面的答案更多地是关于“故意差异”,例如当您选择使用每个时。)