C# PRZESTRZENIE NAZW


Ta lekcja chodź krótka, to tyczy się bardzo ciekawej kwestii, albowiem przestrzeni nazw. Już nie raz korzystałeś z przestrzeni nazw, więc wiesz co to jest, wiesz, że przestrzeń nazw zawiera klasy, delegaty, interfejsy i inne. Tym razem poznasz jak deklarować własne przestrzenie nazw. Posłużymy się tutaj naszą starą klasą której użyliśmy podczas deklaracji metod wirtualnych, tym razem zamkniemy część klas w przestrzeni nazw Mata. Ale zacznijmy może od ogólnej deklaracji:

namespace nazwa_przestrzeni_nazw

{

}

Musisz pamiętać o tym, że jeżeli chcesz używać jakiejś przestrzeni nazw w naszym programie to musisz się zadeklarować za pomocą using. Ale przejdźmy do naszego przykładu:

Początek kodu:
using System;
using Mata;


namespace Mata
{


class DwaD
{
public int x;
public int y;


public DwaD(int podaj_x, int podaj_y)
{
x = podaj_x;
y = podaj_y;
}

public virtual double Pole()
{
return x * y;
}
}

class Kwadrat : DwaD
{
public Kwadrat(int bok_a)
: base(bok_a, bok_a)
{
}
}

class Trojkat : DwaD
{
public int c;
public double h;

public Trojkat(int bok_a, int bok_b, int bok_c, double wysokosc)
: base(bok_a, bok_b)
{
c = bok_c;
h = wysokosc;
}

public override double Pole()
{
return 0.5 * x * h;
}

}
}


class Pokaz
{
public static void Main()
{
DwaD figura = new DwaD(3, 3);


string wybor = „”;


Console.WriteLine(„Wybierz figurę:\n1 – Kwadrat\n2 -Trójkąt\n”);
Console.Write(„Twój wybór to: „);
wybor = Console.ReadLine();


switch (wybor)
{
case „1″:
figura = new Kwadrat(10);
break;
case „2″:
figura = new Trojkat(10, 6, 7, Math.Sqrt(11));
break;
default:
Console.WriteLine(„Zły wybór”);
break;
}
Console.WriteLine(„Pole figury: ” + figura.Pole());
}
}

Koniec kodu:

Jak widzisz korzystanie z przestrzeni nazw jest bardzo proste i nie powinno ci przysparzać problemów. Poznasz teraz kilka ciekawych rzeczy, a mianowicie pierwszą z nich będą aliasy czyli zastępcze nazwy dla przestrzeni nazw bądź klas w nich będących:

Początek kodu:


using System;
using K = Mata.Kwadrat;
using Mata;


namespace Mata
{


class DwaD
{
public int x;
public int y;


public DwaD(int podaj_x, int podaj_y)
{
x = podaj_x;
y = podaj_y;
}

public virtual double Pole()
{
return x * y;
}
}

class Kwadrat : DwaD
{
public Kwadrat(int bok_a)
: base(bok_a, bok_a)
{
}
}

class Trojkat : DwaD
{
public int c;
public double h;


public Trojkat(int bok_a, int bok_b, int bok_c, double wysokosc)
: base(bok_a, bok_b)
{
c = bok_c;
h = wysokosc;
}


public override double Pole()
{
return 0.5 * x * h;
}


}

}

class Pokaz
{
public static void Main()
{
DwaD figura = new DwaD(3, 3);


string wybor = „”;


Console.WriteLine(„Wybierz figurę:\n1 – Kwadrat\n2 -Trójkąt\n”);
Console.Write(„Twój wybór to: „);
wybor = Console.ReadLine();


switch (wybor)
{
case „1″:
figura = new K(10);
break;
case „2″:
figura = new Trojkat(10, 6, 7, Math.Sqrt(11));
break;
default:
Console.WriteLine(„Zły wybór”);
break;
}
Console.WriteLine(„Pole figury: ” + figura.Pole());
}

}

Koniec kodu:

Ten zapis pozwala nam:

using K = Mata.Kwadrat;
zastąpić nazwą ‘k’ klasę kwadrat, nadal można pisać Kwadrat na przykład przy deklaracji obiektów, ale też można użyć samego K, jak w przykładzie powyżej.

Dozwolone są również zagnieżdżone przestrzenie nazw, czyli jedna w drugiej i tak dalej, wtedy aby wywołać zagnieżdżoną korzystamy z operatora kropki przy używaniu using:

namespace N1
{

namespace N2
{

}
}

Deklaracja:

using N1 ;
using N1.N2 ;

To mniej więcej na tyle, już znasz podstawy więc ze zrozumieniem pojęcia przestrzeni nazw nie powinieneś mieć problemów jeżeli czytałeś dokładnie nasze kursy.