A C# programozási nyelv

Névterek

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.

namespace név[.név1...]
{
 típus deklarációk;
}

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:

namespace arun.CSharp.Namespaces
{
 public class Hello
 {
  public string GetMessage()
  {
   return "Hello, world";
  }
 }
}

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:

namespace arun
{
 namespace CSharp
 {
  namespace Namespaces
  {...}
 }
}

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 "using" direktíva

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.

using system;
using arun.CSharp.Namespaces;
class Hello
{
 static void Main()
 {
  Hello m = new Hello ();
  System.Console.WriteLine(m.GetMessage());
 }
}

Az "alias" direktíva

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:

using azonosító = névtér-vagy-típusnév;

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:

namespace N1.N2
{
 class A {}
}

namespace N3
{
 using A = N1.N2.A;
 class B: A {}
}

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.

namespace N3
{
 using R = N1.N2;
 class B: R.A {}
}

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.

A "using-namespace" direktíva

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:

using namespace-name;

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:

namespace N1.N2
{
 class A {}
}

namespace N3
{
 using N1.N2;
 class B: A {}
}

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.