In C#, i namespace sono formati da un gruppo di classi e metodi che possono essere utilizzati in modo coordinato per gestire una particolare funzionalità.

Abbiamo già accennato ai namespace definendoli “cartelle”, senza essere ortodossi, infatti, il concetto è molto simile, si possono raggruppare diverse class sotto un determinato namespace, una sorta di contenitore (come fosse una cartella per i file del computer) in modo che i vari script contenuti in esso possano comunicare tra di loro. I namespace forniscono una struttura organizzativa che consente agli utenti di specificare la posizione dei loro elementi. Ad esempio, le classi in un progetto di programmazione possono facilmente essere raggruppate in namespace come "Modelli" o "Interfaccia Utente", in modo tale da indicare la loro posizione nell'applicazione. Questo permette che si possano caricare variabili e metodi da altre classi contenute nello stesso namespace, tenendo tutto ordinato e separato senza generare confusione tra gli script. Nei progetti più grandi, infatti, sono presenti tante classi che descrivono oggetti differenti ma che probabilmente contengono variabili con gli stessi nomi di altre variabili contenute in altre classi, cosa che potrebbe mandare in tilt il compilatore.

Per esempio immaginiamo di aver scritto uno script che indichi il movimento del giocatore, e aver replicato in larga parte il codice per indicare il movimento dei nemici. Se fosse tutto mischiato nello stesso namespace sarebbe impossibile richiamare una variabile che indichi la posizione iniziale (dichiarata in entrambi gli script come var posizioneIniziale), il compilatore non saprebbe se intendiamo la posizione iniziale del giocatore o del nemico. Dovremmo essere sicuri di usare per ogni script nomi diversi: cosa possibile nei progetti più piccoli, ma che diventa impossibile nei progetti più grandi; o semplicemente tenere tutto separato con namespace differenti.

Ogni variabile quindi è valida, fino ad indicazione contraria, solo nello scope nella classe in cui è dichiarata. Volendola caricare in un altro script si deve richiamare quella determinata class dichiarando di usare quel determinato namespace.

Per dichiarare che una classe faccia parte di un determinato namespace bisogna scriverlo prima di scrivere la class vera e propria:

Es.

 

namespace Nemico {

public class Controller1 : MonoBehaviour { ... }

}

Successivamente si può caricare in un altro script quel determinato namespace indicando ad inizio script la dicitura using nomeDelNamespace.

Es.

using Nemico;