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:
- clase de obiecte […];
- structuri […];
- module […];
- interfete […];
- delegati […];
- enumerari […];
- alte namespace-uri.
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.