18. Przestrzenie nazw (namespaces)

18. Przestrzenie nazw (namespaces)

Autor: Daniel Celeda

Opublikowano: 6/6/2006, 12:00 AM

Liczba odsłon: 79972

Do tej pory używaliśmy przestrzeni nazw stworzonych na potrzeby platformy .NET. Przypomnijmy czym są owe przestrzenie.
Są to zbiory zdefiniowanych klas, pogrupowanych w pewnego rodzaju „paczki”. Grupujemy klasy po to aby łatwiej je odnaleźć w przyszłości oraz aby uniknąć konfliktów.
Odpowiednia hierarchia przestrzeni nazw pozwala na łatwe i szybkie odnajdywanie potrzebnych klas. Jeśli nasz program używałby klas opisujących rodzaje budynków, przestrzenie nazw mogły wyglądać następująco:

Budynki,
Budynki.Duze (zawierający klasy Zamek, Wieżowiec, Blok),
Budynki.Male (zawierająca klasy Lepianka, Domek).

Kiedy może pojawić się konflikt?
Wyobraźmy sobie, że mamy dwie różne klasy „Zamek”. Pierwsza definiuje zamek będący budynkiem, druga natomiast zamek błyskawiczny. Gdyby nie było przestrzeni nazw, poniższy kod nie określałby jednoznacznie o jaką klasę nam chodzi.

Zamek obiekt = new Zamek();

Dlatego należałoby umieści definicje tych klas w różnych przestrzeniach nazw np. „Budynki.Duze” oraz „Ubrania.Akcesoria”. Kod należałoby zmodyfikować na następująco:

Budynki.Duze.Zamek obiekt1 = new Budynki.Duze.Zamek();
Ubrania.Akcesoria.Zamek obiekt2 = new Ubrania.Akcesoria.Zamek();
 

Wbudowane przestrzenie nazw

.NET udostępnia nam ogromną ilość zdefiniowanych przestrzeni nazw wraz z klasami. Z najważniejszymi powinniśmy się zapoznać.
System – najważniejsza i najpowszechniejsza przestrzeń, definiuje podstawowe klasy oraz jest korzeniem wielu podrzędnych przestrzeni,
System.Collections – przechowuje klasy będące kolekcjami,
System.Data – obsługa operacji na danych, głównie do pracy z bazami danych,
System.Drawing – obsługa grafiki (rysowanie po ekranie),
System.IO – operacje wejścia/wyjścia, a więc np. operacje na plikach,
System.Web – klasy służące do tworzenia stron internetowych w technologii ASP.NET,
System.Windows.Forms – programowanie w Windows, a więc tworzenie okienek, przycisków itp.

Słowo kluczowe „using”

Do tej pory używaliśmy już niejednokrotnie klas zdefiniowanych w jakiejś przestrzeni nazw np. System.Console. Zgodzicie się na pewno ze mną, że ciągłe powtarzanie długiej nazwy przestrzeni jest niewygodne, szczególnie gdy często chcemy wypisywać tekst na ekranie. Czy nie wygodniej byłoby raz zadeklarować jakich przestrzeni używamy w naszej aplikacji i gdzie mają być szukane używane przez nas klasy (w jakiej przestrzeni)? Taki program wyglądałby tak:

namespace Przestrzenie
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Witam !");
            Console.ReadKey();
        }
    }
}

Jednak oczywiście nie zadziała. Jest jednak na to sposób. Po prostu wcześniej musimy zadeklarować jakich przestrzeni nazw używamy. Możemy tego dokonać z pomocą słowa „using” umieszczanego na samym początku naszego programu. Po słówku tym wypisujemy przestrzeń nazw, z której to klas będziemy chcieli używać.

using System;
 
namespace Przestrzenie
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Witam !");
            Console.ReadKey();
        }
    }
}

I oczekiwany wynik:

Możemy użyć „using” wielokrotnie, w przypadku gdy chcemy użyć kilku przestrzeni nazw.

using System;
using System.Collections;
 
namespace Przestrzenie
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Witam !");
            Console.ReadKey();
        }
    }
}

Przestrzeń System.Collections poznamy w następnych artykułach.

@STRONA@

Tworzenie własnych (niestandardowych) przestrzeni nazw

Podczas tworzenia rozbudowanych aplikacji należy grupować klasy w przestrzenie nazw, czyli samemu tworzyć hierarchię przestrzeni. Proces ten warto dobrze przemyśleć zanim zaczniemy kodować, ponieważ pomoże to nam w przyszłości „zapanować” nad naszym programem i jego architekturą.
Napiszmy prosty program matematyczny, który zobrazuje nam to zagadnienie. Będziemy potrzebowali przestrzeni nazw:
- zawierającej definicje figur geometrycznych,
- zawierającej klasę główną naszej aplikacji.

Pierwszy krok to stworzenie nowej solucji i projektu.

Następny to zmiana nazwy pliku na KlasaGlowna.cs (automatycznie zmieni się nazwa klasy na KlasaGlowna).

Dodajemy nowy plik z klasą zawierającą definicje figur.

Zmodyfikujmy kod tego pliku, aby wyglądał następująco:

using DefinicjeFigur;
 
namespace Figury
{
    class KlasaGlowna
    {
        static void Main(string[] args)
        {
            Figura obiekt = new Figura();
        }
    }
}

Metodę „Main()” definiuje się tylko w jednej klasie, ponieważ program rozpoczyna swoje wykonanie od tej metody.

Jak wykorzystać Copilot w codziennej pracy? Kurs w przedsprzedaży
Jak wykorzystać Copilot w codziennej pracy? Kurs w przedsprzedaży

Wydarzenia