A namespace (névtér) segítségével lehet globális tereket képezni a láthatósági feltételekhez, a könnyebb kódkarbantartáshoz/átláthatósághoz, és a globális típusdeklarációhoz. C# esetében a .NET keretrendszer miatt ez egészen az operációs rendszer szintjéig megtalálható, és nyelvek közötti átjárásra is lehetőséget ad.
A típusdeklarációk lehetnek: osztályok, interface -ek, struktúrák (struct), iterációs típusok (enum), delegate.
Namespace -ek segítségével rendszereket hozhatunk létre a kódok rendezéséhez. Erre a legjobb mód egy hierarchikus rendszer felépítése. A legáltalánosabb neveket a hierarchia tetejére helyezzük, és az alsóbb szintekre kerülnek az egyre specifikusabb nevek. Ezt a hierarchikus rendszert beágyazott névterekkel reprezentálhatjuk.
Példa:
Mint említettük, a namespace -ek hierarchikusak. Az arun.CSharp.Namespaces egy tömörebb felírása annak, hogy az arun nevű névtér tartalmazza a Csharp névteret, ami pedig a Namespaces névteret foglalja magában a következő módon:
A using kulcsszót kétféleképpen használhatjuk:
Java programozók figyelmébe ajánljuk, hogy a névtereket használhatjuk a using parancs kiadása előtt és fordítva is. Ebben az értelemben a parancs használatának egyetlen célja, hogy kevesebbet kelljen gépelni, és ezáltal a kód is egyszerűbbé válik. Ha a kód alaposztályokat is használ, akkor minden osztályra külön-külön kell biztosítani azt, hogy a fordító megtalálja, amire szüksége van (/r kapcsoló a compilerben).
A következő példa egy konzolos alkalmazás, amely a Hello osztályt használja. Az arun.CSharp.Namespaces.Hello minősítés elég hosszú és kezelhetetlen, ezért using direktíva segítségével lehetővé tesszük az osztály minden típusára a minősítés nélküli használatot.
A C# engedélyezi az aliasok definícióját és használatát. Az aliasok azokban a szituációkban lehetnek hasznosak, amikor névütközés lép fel két könyvtár között vagy ha egy bővebb névtér néhány típusát szeretnénk felhasználni.
Szintaxis:
A fordítási egységben vagy a namespace body részén belüli azon member deklarációk, amelyek egy using-alias-direktívát tartalmaznak, referenciát adnak egy névtérre vagy típusra.
Példa:
Itt az N3 névtérbeli member deklarációkon belül A egy alias lesz az N1.N2.A-ra, míg az N3.B-t az N1.N2.A-ból származtatjuk. Hasonló hatást érhetünk el úgy is, ha létrehozunk egy R aliast az N1.N2-re, és egy referenciát állítunk az R.A-ra.
A using-alias-direktíva azonosítójának egyedinek kell lennie a fordítási egység illetve a direktívát közvetlenül tartalmazó névtér deklarációs részeiben.
Egy using-namespace-direktíva használatakor a névtérbeli típusokat a fordítási egységbe vagy a névtér body részébe importálja, így minden típusazonosítót minősítés nélkül lehet használni.
Szintaxis:
A fordítási egységekben és a névteret megvalósító részekben szereplő, a using-namespace-dírektívát tartalmazó member deklarációkban az adott névtérbeli típusokra közvetlenül hivatkozhatunk.
Példa:
A példában az N3 namespace -en belüli member deklarációkban az N1.N2 típusai közvetlenül elérhetőek. A using-namespace-direktíva és a using-alias-direktíva sem hat a lejjebb lévő fordítási egység vagy névtér deklarációs részének új membereire, csak arra a fordítási egységre van hatással amelyben szerepel.
A using-namespace-direktíva hivatkozása a namespace-name -re, megegyezik a using-alias-direktívával névtérre, vagy típusnévre való hivatkozással.