Модули 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.)

(См. Также этот вопрос для обсуждения "технического различия" между пространствами имен и модулями. Этот вопрос и мой ответ выше касаются "преднамеренных различий", например, когда вы решите использовать каждое из них.)

Другие вопросы по тегам