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.