2009-07-20 15 views
8

Mam bibliotekę napisaną w języku F #, pochłoniętą przez C# i F #. Biblioteka ta definiuje klasę foo, w module bar w przestrzeni nazw random:Moduły v. Namespaces w F #

#light 
namespace random 

module bar 

type foo() = ... 

Teraz, kiedy idę do spożywania typ random.foo.bar, C# intellisense widzi go jako typ bar, zagnieżdżona w typie random.foo.

Pytanie brzmi następująco: czy C# ma więcej możliwości definiowania kodu zużywalnego zewnętrznie w modułach niż przestrzeni nazw? Rozumiem, że moduły to dobry sposób grupowania funkcji, ale co z klasami?

+0

Możliwe dupe, http: // stackoverflow .pl/questions/795172/what-the-difference-between-a-namespace-and-a-a-module-in-f – harms

+1

coś w stylu, ale bardziej szukałem najlepszych praktyk dla non-f # interop. powiedział, że jeden jest następstwem drugiego. – kolosy

Odpowiedz

16

Jeśli publikujesz komponenty F # do użytku z innych języków .Net, powinieneś unikać modułów w publicznych interfejsach i trzymać się przestrzeni nazw zawierających klasy, struktury i enums.

(Moduły są wygodnym sposobem albo publikowania wartości, funkcje i rodzaje pomiędzy F # -tylko komponentów, lub jako „wewnętrzne” szczegóły wdrożenia # komponentu F, która publikuje klas .NET.)

(ma tu również this question do dyskusji na temat "technicznego rozróżnienia" między przestrzeniami nazw i modułami. To pytanie i moja odpowiedź powyżej dotyczą raczej "różnic celowych", np. Kiedy zdecydujesz się użyć każdego.)