Visual Basic 2012 Voorbeelden
   

visual basic 2012 broncode voorbeelden

Blijf op de hoogte van de recente aanpassingen op vbvoorbeelden!

Microsoft Visual Studio 2012Microsoft Developers Network - Visual BasicMicrosoft .NET Framework

35.2. Global Keyword in Namespace Statements

Print Email Deel op Twitter Deel op Facebook

Dit artikel is gepubliceerd op maandag 15 oktober 2012 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.

In een IDE als Visual Studio wordt bij het creëren van een project de rootnamespace-naam overgenomen van de project-naam.

Door in een project met de naam ConsoleApplication1 een klasse als Person te definiëren, zal de "fully qualified identifier" van dit type ConsoleApplication1.Person zijn:
Visual Basic 2012 Broncode - Codevoorbeeld 837
Class Person : End Class
Namespace School
    Class Student : Inherits Person : End Class
End Namespace
Class Client
    Public Shared Sub Main()
        Console.WriteLine(GetType(Person).FullName)
        Console.WriteLine(GetType(School.Student).FullName)
        '
        Console.ReadLine()
    End Sub
End Class
Console Application Output
ConsoleApplication1.Person
ConsoleApplication1.School.Student
Het Person type wordt hier rechtstreeks in de rootnamespace gedefinieerd.  Student zit in een "subnamespace" School, waardoor de fully qualified name van dit type ConsoleApplication1.School.Student is.

Vergeet niet dat het belangrijk kan zijn op de hoogte te zijn van de fully qualified identifier.  Deze kan je immers gebruiken om volledig onambigue naar dit datatype te verwijzen.
Zo is het in volgend voorbeeld noodzakelijk de fully qualified name ConsoleApplication1.Employee te gebruiken om te verwijzen naar type (1):
Visual Basic 2012 Broncode - Codevoorbeeld 838
Class Employee : End Class                                                ' (1)
Namespace School
    Class Employee : End Class                                            ' (2)
    Class Client
        Private _Employee1 As New ConsoleApplication1.Employee            ' (1)
    End Class
End Namespace
Hadden we in onze code gesproken over New Employee in plaats van New ConsoleApplication1.Employee dan hadden we een object geïnstantieerd van type (2).

35.2.1. Lege Rootnamespace Eigenschap in Visual Studio Project

Het kan ook gebeuren dat je een datatype, of om exacter te zijn een Class, Structure, Interface, Enum of Module, liever niet in de rootnamespace gaat uitschrijven, maar liever er buiten.  Ook dit is mogelijk, hiervoor kan je in een tool als Visual Studio de rootnamespace eigenschap in de project settings gaan leegmaken.

Dit zou er bijvoorbeeld voor zorgen dat in volgend voorbeeld de fully qualified identifier van type Address ook gewoon Address is:
Visual Basic 2012 Broncode - Codevoorbeeld 839
Class Address : End Class                                                 ' (1)
Namespace Administration
    Class Invoice : End Class
End Namespace
Aan de hand van een Namespace ... End Namespace statementblok kan je dan zelf natuurlijk nog altijd "rootnamespaces" hercreëren.
De fully qualified identifier van type Invoice is hier Administration.Invoice.

35.2.2. Global Keyword in Fully Qualified Identifier

Als in vorig voorbeeld de fully qualified identifier van Address gewoon Address is, is in onderstaand voorbeeld het datatype van _Address1 dan ook Address (1) uit vorige voorbeeld?
Visual Basic 2012 Broncode - Codevoorbeeld 840
Namespace Administration
    Class Address : End Class                                             ' (2)
    Class Client1
        Private _Address1 As New Address
    End Class
End Namespace
Nee, uiteraard niet, de compiler zal altijd eerst lokaal op zoek gaan een constructie met deze naam.  Omdat Client1 in de namespace Administration zit, zal eerst in deze namespace gezocht worden naar een datatype met de naam Address.
Wat hier ook wordt gevonden, namelijk type met fully qualified identifier Administration.Address (2).

Als we dan toch naar type Address (1) willen verwijzen dan kunnen we gebruik maken van het Global keyword:
Visual Basic 2012 Broncode - Codevoorbeeld 841
Namespace Administration
    Class Client2
        Private _Address1 As New Global.Address                            ' (1)
    End Class
End Namespace
Het Global keyword wordt gebruikt om aan te geven dat het gaat over een constructie of namespace in de root.  Type Address (1) zit hier immers op de root gedefinieerd.
Zo zouden we ook naar type Address (2) kunnen verwijzen door te spreken over Global.Administration.Address, daar was het immers zo dat Administration in de root is geplaatst.

35.2.3. Global Keyword in Namespace Statement

Tot zover niets nieuws.  Alles wat tot hiertoe besproken is was ook mogelijk in Visual Basic 2010.

Een kleine uitbreiding in verband met het Global keyword is toegevoegd aan Visual Basic 2012 (ook wel Visual Basic 11 of 11.0 genoemd).  Het gaat eigenlijk om een alternatief voor het leegmaken van de rootnamespace-naam eigenschap in de project settings van Visual Studio.  Vanaf Visual Basic 2012 is het ook mogelijk om in code aan te geven dat een bepaalde constructie (Namespace, Class, Structure, Interface, Enum of Module) zich buiten de - in het project - ingestelde rootnamespace moet bevinden:
Visual Basic 2012 Broncode - Codevoorbeeld 842
Namespace Global.Stock
    Class Product : End Class
End Namespace
...
Namespace Global
    Class Delivery : End Class
    Namespace Stock
        Class Supplier : End Class
    End Namespace
End Namespace
De types Product, Delivery en Supplier hebben respectievelijk de fully qualified identifiers Stock.Product, Delivery en Stock.Supplier.

Waar het dus al mogelijk was om keyword Global te gebruiken in een fully qualified identifier als een verwijzing naar een soort van toplevel namespace, kan men nu ook bij het definiëren van een constructie Global gebruiken om aan te geven dat de constructie in de root (of dus net onder toplevel) wordt gedefinieerd.

Dit artikel is gepubliceerd op maandag 15 oktober 2012 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.