per mantenere logicamente ordinato un programma il codice puo essere suddiviso in namespace.
quando definisco una classe generalmente la includo dentro un namespace. Il namespace è un nome completamente arbitrario che contraddistingue univocamente la tua classe. La buona regole tuttavia è quella di usare dei nomi gerarchici e separare i livelli di gerarchia con il punto.
Es.
Libreria
Libreria.FunzioniMatematiche
Libreria.FunzioniTesto
Sono tre namespace diversi dentro cui puoi definire delle classi. Per poter usare quelle classi devi usare il loro nome completo cioè devi anteporre il nome del namespace per esempio una classe Calcoli dentro Libreria.funzioniMatematiche va usata cosi:
calcolatore = new Libreria.FunzioniMatematiche.Calcoli();
il fatto di dover anteporre il namespace per ogni utilizzo della classe in esso contenuto è un pugno negli occhi e per questo si usano le direttive using.
using Libreria.FunzioniMatematiche;
mi permette di usare la classe Calcoli senza dover ogni volta usare il suo nome completo il quale è dato anche dal namespace.
Una cosa che dovresti tener presente è che, come ti ho detto prima, la gerarchia è una convenzione a tuo uso e consumo ma non è riconosciuta dal compilatore. Se vuoi usare le classi sia di Libreria e sia di Libreria.FunzioniMatematiche devi mettere entrambe le using. Il fatto che hanno un nome che richiama una gerarchia è solo un modo per tenerle in ordine ma per il compilatore sono namespace diversi.
--
Quando si progetta una libreria di classi quindi è bene tenerla suddivisa in namespace e la regola è quella di ordinare i vari namespace gerarchicamente. Una volta compilata, questa libreria diventa un file dll (per es. libreria.dll) per cui per accedere a tutte quelle classi e a quei namespace bisogna prima fare riferimento a questo file dll. da visual studio l'operazione è molto semplice basta cliccare con il destro su riferimenti e puntare alla dll.
Da questo momento in poi tutti i namespace presenti nella dll saranno visibili dal nostro progetto e quindi potremmo usare le classi della dll o con il loro nome completo o attraverso le direttive using in testa al file.
Da qui un altra regola d'oro per l'organizzazione dei namespace: una singola root-name per dll dalla quale poi si diramano i vari sotto-nomi, per esempio in una singola dll (libreria.dll) questa struttura:
Libreria
Libreria.FunzioniMatematiche
Libreria.FunzioniTesto
è ben organizzata
mentre questa:
Libreria1
Libreria1.FunzioniMatematiche
Libreria1.FunzioniTesto
Libreria2
Libreria2.FunzioniSulleDate
non va bene e non vedrai (spero) mai dll organizzate in questo modo.