Модули v. Пространства имен в F#
У меня есть библиотека, написанная на F#, потребляемая C# и F#. эта библиотека определяет класс foo
в модуле bar
в пространстве имен random
:
#light
namespace random
module bar
type foo() = ...
Теперь, когда я иду, чтобы потреблять тип random.foo.bar
, C# intellisense видит его как тип bar
, вложенный в тип random.foo
,
Вопрос заключается в следующем: есть ли преимущество в C# для определения потребляемого извне кода в модули, а не в пространствах имен? Я понимаю, что модули - хороший способ группировать функции, но как насчет классов?
1 ответ
Если вы публикуете компоненты F# для использования из других языков.Net, вам следует избегать модулей в открытых интерфейсах и придерживаться пространств имен, содержащих классы, структуры и перечисления.
(Модули - это удобный способ публикации значений, функций и типов только среди компонентов F# или в виде "внутренних" подробностей реализации компонента F#, публикующего классы.Net.)
(См. Также этот вопрос для обсуждения "технического различия" между пространствами имен и модулями. Этот вопрос и мой ответ выше касаются "преднамеренных различий", например, когда вы решите использовать каждое из них.)