Definirea unui namespace in VB.NET

Termenul de namespace desemneaza o colectie de elemente de programare, organizate si clasificate pentru operatii de grupare si accesare facile.
Elementele de programare la nivel de namespace includ:

Entitatile namespace pot fi organizate, agregate intr-un ansamblu […]. Un ansamblu poate contine mai multe namespace, care la randul lor contin alte namespace.
In mod implicit, fisierul executabil creat cu mediul Visual Studio contine un namespace cu denumire identica cu cea a proiectului. Mai multe ansambluri pot utiliza acelasi namespace.
Definirea explicita a unui namespace se realizeaza in VB.NET cu specificatiile Namespace si End Namespace. Se considera aplicatia de tip Console Application. Se defineste un namespace ProiectNou care contine:

  • un namespace denumit Formular1;
  • o clasa de obiecte denumita GrupOp ce contine doua metode: Adun si Imp.

Namespace-ul Formular1 contine clasa de obiecte GrupOp cu un eveniment definit si doua metode: Dif si Prod.
Se remarca prezenta a doua clase de obiecte cu aceeasi denumire GrupOp, dar incluse in namespace-uri diferite: ProiectNou, respectiv Formular1.
Namespace-ul ProiectNou se defineste pe acelasi nivel cu modulul in care se afla procedura Main.

Namespace ProiectNou
    Namespace Formular1
        Class GrupOp
            Public Event CalculOp(ByVal x As Integer, ByVal y As Integer)

            Public Function Dif(ByVal a As Integer, ByVal b As Integer)_
As Integer
                Return a - b
            End Function

            Public Function Prod(ByVal a As Integer, ByVal b As Integer)_
As Long
                Return a * b
            End Function
        End Class
    End Namespace

    Class GrupOp
        Public Function Adun(ByVal a As Integer, ByVal b As Integer)_
As Integer
            Return a + b
        End Function

        Public Function Imp(ByVal a As Integer, ByVal b As Integer)_
As Double
            Return a / b
        End Function
    End Class

End Namespace

Module Module1

    Sub Main()
        Dim calc As NameSpaceApp.ProiectNou.GrupOp
        calc = New NameSpaceApp.ProiectNou.GrupOp
        MsgBox("4+6=" & calc.Adun(4, 6))
        Dim calcNou As NameSpaceApp.ProiectNou.Formular1.GrupOp
        calcNou = New NameSpaceApp.ProiectNou.Formular1.GrupOp
        MsgBox("4*6=" & calcNou.Prod(4, 6))
    End Sub

End Module

In procedura Main, se remarca faptul ca pentru a defini o variabila de tip GrupOp trebuie precizata intreaga cale catre clasa de obiecte GrupOp cu ajutorul expresiilor NameSpaceApp.ProiectNou.GrupOp, respectiv NameSpaceApp.ProiectNou.Formular1.GrupOp. Altfel, aplicatia nu poate fi compilata intrucat nu “stie” de unde sa extraga definitia clasei de obiecte GrupOp.
NameSpaceApp este namespace-ul creat la nivel de proiect de catre mediul Visual Studio.
Referirea unui element de programare in cod sursa VB.NET se realizeaza prin specificatia Imports. Referirea elementelor de programare se realizeaza incepand cu colectia (namespace) cu cel mai ridicat nivel de agregare si se precizeaza calea subcolectiilor incluse in aceasta, cu ajutorul operatorului . .

Imports NameSpaceApp.ProiectNou.Formular1

Astfel, se acceseaza elementul de programare GrupOp inclus in Formular1, care la randul sau se afla in namespace-ul ProiectNou. ProiectNou este definit in namespace-ul la nivel de aplicatie, denumit identic cu proiectul NameSpaceApp.
Prin referirea completa a elementelor de programare incluse in namespace-uri, se evita conflictul de denumiri identice atribuite acestora.
Pentru usurinta operarii cu elemente de namespace, se poate atribui un alias pentru a referi un element de programare inclus intr-un namespace. Alias-ul permite referirea directa a acestui element.

Imports GrupOperatii = NameSpaceApp.ProiectNou.Formular

In cazul primului exemplu, namespace-ul a fost definit in acelasi fisier cod sursa VB.NET cu modulul in care s-au utilizat elemente definite in ProiectNou. Daca namespace-ul ProiectNou este definit intr-un alt fisier sursa inclus in proiectul NameSpaceApp, atunci inainte de dezvoltarea modulului Module1 trebuie incluse specificatiile de Imports, astfel:

Imports G1 = NameSpaceApp.ProiectNou

Imports G2 = NameSpaceApp.ProiectNou.Formular1

Module Module1

    Sub Main()
        Dim calc As G1.GrupOp
        calc = New G1.GrupOp
        MsgBox("4+6=" & calc.Adun(4, 6))
        Dim calcNou As G2.GrupOp
        calcNou = New G2.GrupOp
        MsgBox("4*6=" & calcNou.Prod(4, 6))
    End Sub

End Module

De mentionat ca namespace-ul ProiectNou are aceeasi definitie, dar inclusa intr-un alt fisier sursa la nivelul aplicatiei NameSpaceApp.
In cadrul unui namespace nu se pot defini urmatoarele elemente de programare: proprietati […], proceduri […], variabile […] si evenimente […]. Acestea sunt definite in containere de cod sursa: module, structuri si clase de obiecte.