Namespaces erzeugen und verwenden

Veröffentlicht: 13. Mai 2003 | Aktualisiert: 22. Jun 2004
Von Mathias Schiffer

Namespaces bieten eine übersichtliche, hierarchische Strukturierung funktional zusammengehöriger Klassen und Strukturen an. Ihre optionale Verwendung macht Code übersichtlicher und vereinfacht seine Wiederverwendung.

An der Verwendung von Namespaces kommen Sie bei der .NET Programmierung nicht vorbei - sie bilden die hierarchische Struktur der umfassenden Funktionalität des .NET Frameworks und vereinfachen die Suche nach einer bestimmten Klasse, Struktur oder Funktion durch die logische Gruppierung zusammengehörender Elemente.

Während Sie im Win32 API sehr bewandert sein mussten und sich in den Tiefen des dokumentierenden Platform SDKs nicht verlieren durften, um die vom Betriebssystem über API angebotene Funktionalität nutzen zu können - ja, vielleicht überhaupt erst zu entdecken -, können Sie sich in einer Namespace-Hierarchie geradezu auf Entdeckungsreise begeben. Des Weiteren ist es Ihnen auch möglich thematisch zielgerichtet nach Funktionalität suchen, die das .NET Framework anbietet.

Doch nicht nur das .NET Framework profitiert von einer solchen thematischen Strukturierung. Auch Hersteller von Komponenten können die Funktionalität ihrer Produkte auf diese Weise intuitiv und übersichtlich abbilden, ohne dass ein wochenlanges Studium eines Handbuchs zwingend erforderlich wird.

Nicht weniger Sinn macht es, wenn Sie Ihre eigenen Anwendungen, Bibliotheken und "Codeschnipsel" auf diese Weise katalogisieren: Nicht nur, dass Sie sich im Sourcecode Ihrer Anwendung auch später noch besser zurechtfinden werden. Auch eine Wieder- und Weiterverwendung von Codeteilen wird durch eine Strukturierung erheblich mit unterstützt; eventuelle Namenskollisionen werden vermieden.

Gleichzeitig ist die Definition Ihrer eigenen Namespaces so einfach, dass sie - neben einem logisch schlüssigen Entwurf Ihrer Strukturierung - kaum Aufwand bereitet: Eine Namespace-Ebene erzeugen Sie einfach durch das Umschließen Ihrer Codeteile mit "Namespace MeinNamespace" und "End Namespace". Durch verschachtelte Verwendung entsteht eine übersichtliche Struktur Ihrer Arbeit, durch die Sie sich dank der Intellisense-Mithilfe von Visual Studio .NET einfach "durchhangeln" können.

Im folgenden Beispiel werden verschachtelte Namespaces verwendet, wobei in den Namespaces German und English das Interface ITalk aus dem Namespace Namespaces von deren jeweiliger Klasse Talk implementiert wird:

Namespace AixSoft 
  Namespace Demos 
 Namespace Namespaces 
   Interface ITalk 
  Function SayHello() As String 
   End Interface 
   Namespace German ' Nachbar des Namespace "English" 
  Public Class Talk : Implements ITalk 
 Public Const Language As String = "Deutsch" 
 Public Function SayHello() As String _ 
 Implements ITalk.SayHello 
   Return "Hallo aus AixSoft.Demos.Namespaces.German!" 
 End Function 
  End Class 
   End Namespace 'German 
   Namespace English ' Nachbar des Namespace "German" 
  Public Class Talk : Implements ITalk 
 Public Const Language As String = "English" 
 Public Function SayHello() As String _ 
 Implements ITalk.SayHello 
   Return "Hello from AixSoft.Demos.Namespaces.English!" 
 End Function 
  End Class 
   End Namespace 'English 
 End Namespace 'Namespaces 
  End Namespace 'Demos 
End Namespace 'AixSoft

Die Nutzung dieser simpel gehaltenen Namespace-Struktur ist denkbar einfach und übersichtlich:

Dim objTalk As AixSoft.Demos.Namespaces.ITalk 
' Verwendung von AixSoft.Demos.Namespaces.English.Talk: 
objTalk = New AixSoft.Demos.Namespaces.English.Talk() 
MessageBox.Show(objTalk.SayHello, _ 
 AixSoft.Demos.Namespaces.English.Talk.Language) 
' Verwendung von AixSoft.Demos.Namespaces.German.Talk: 
objTalk = New AixSoft.Demos.Namespaces.German.Talk() 
MessageBox.Show(objTalk.SayHello, _ 
 AixSoft.Demos.Namespaces.German.Talk.Language)

Natürlich können Sie auch hier wie gewohnt mithilfe der Imports-Direktive die jeweils komplette Aufführung des Namespace-Weges abkürzen:

Imports AixSoft.Demos.Namespaces 
' ... 
Dim objTalk As ITalk 
' Verwendung von English.Talk: 
objTalk = New English.Talk() 
MessageBox.Show(objTalk.SayHello, English.Talk.Language) 
' Verwendung von German.Talk: 
objTalk = New German.Talk() 
MessageBox.Show(objTalk.SayHello, German.Talk.Language)

Anzeigen: