2009-07-20 12 views
8

Ho una libreria scritta in F #, consumata da C# e F #. questa biblioteca definisce una classe foo, nel modulo bar, nel namespace random:Moduli v. Namespace in F #

#light 
namespace random 

module bar 

type foo() = ... 

Ora, quando vado a consumare tipo random.foo.bar, C# IntelliSense vede come tipo bar, annidato nel tipo random.foo.

La domanda è questa: c'è un vantaggio in C# per definire il codice consumabile esternamente in moduli, piuttosto che in namespace? Capisco che i moduli siano un buon modo per raggruppare le funzioni, ma per quanto riguarda le classi?

+0

Possibile dupe, http: // StackOverflow .com/questions/795172/what-the-difference-between-a-namespace-and-a-module-in-f – harms

+1

sorta di, ma ero più alla ricerca di best practice per l'interoperabilità non-f #. detto questo, uno è un corollario dell'altro. – kolosy

risposta

16

Se si pubblicano componenti F # per il consumo da altri linguaggi .Net, è necessario evitare i moduli nelle interfacce pubbliche e attenersi a spazi dei nomi contenenti classi, strutture ed enumerazioni.

(moduli sono un modo pratico sia di pubblicare valori, funzioni e tipi tra F # componenti -solo, o come i dettagli 'interni' implementazione di un # componente di F che pubblica classi .Net.)

(si vede anche this question per una discussione sulla "distinzione tecnica" tra namespace e moduli.Questa domanda e la mia risposta sopra sono più sulle "differenze intenzionali", ad esempio quando si sceglie di utilizzare ciascuna.)