In diesem Kapitel werden die Datentypen erläutert, die wir nicht in Kapitel 3, »Klassendesign«, behandelt haben. Dies sind unter anderem Strukturen, Enumerationen, Attribute und generische sowie anonyme Klassen.
4 Weitere Datentypen
Da alle Objekte in .NET letztendlich auf der Klasse Object basieren, gibt es keine absolute Notwendigkeit, mit etwas anderem als Klassen als Datentyp zu arbeiten. Der einzige, aber in der Praxis enorm wichtige Grund, weitere Datentypen einzuführen, besteht in den an sie gekoppelten Automatismen, die das Leben eines Programmierers enorm erleichtern, aber den Speicherverbrauch und die Laufzeit einer Anwendung erhöhen können. Ein Beispiel, das Sie bereits kennengelernt haben, sind Ereignisse. Jedes Ereignis wird vom Compiler durch einige automatisch erzeugte Klassenmitglieder ersetzt (siehe Abschnitt 3.10, »Ereignisse«). Andere Datentypen haben andere Automatismen, die sich nicht in neuen Klassenmitgliedern niederschlagen und zum Teil in der Laufzeitumgebung implementiert sind. Da nicht alle Konstrukte bereits zur Compilezeit ausreichend auswertbar sind, haben diese Datentypen nicht alle Möglichkeiten einer allgemeinen Klasse. Das ist der Preis, der für diese Annehmlichkeit zu zahlen ist.
4.1 Module 

Wir haben Module schon oft benutzt. Daher fasst dieser Abschnitt nur kurz einige Eigenheiten zusammen. Hier ist eine kurze Auflistung einiger Merkmale:
- Alle Mitglieder sind klassengebunden, werden aber nicht mit Shared gekennzeichnet.
- Es können keine Objekte mit New von einem Modul erzeugt werden.
- Auf Mitglieder kann zugegriffen werden, als stünden sie direkt unterhalb der Namensraumdeklaration.
- Weder darf mit Inherits eine Elternklasse angegeben werden noch darf mit Implements eine Schnittstelle implementiert werden.
- Me, MyClass und MyBase sind nicht erlaubt.
- Auf objektgebundene Mitglieder der Klasse Object besteht kein Zugriff (da kein Objekt erzeugbar ist), wohl aber auf klassengebundene.
- Felder ohne Sichtbarkeitsmodifikatoren sind privat, alle anderen öffentlich.
- Gegenüber Klassen sind nicht erlaubt: Konstruktoren mit Parametern, Operatoren und Standardeigenschaften (Default Property).
Auf eine Besonderheit der Module möchte ich besonders hinweisen: den Zugriff ohne Qualifikation mit dem Modulnamen. Diese Eigenart sorgt dafür, dass das folgende Codefragment einen Compilerfehler erzeugt. In der Methode WahlergebnisBekanntgeben() sind beide Methoden Wahlergebnis() aus den Modulen Demokraten und Republikaner gleichermaßen bekannt. Daher ist der unqualifizierte Zugriff nicht eindeutig, und der Compiler meldet diesen Fehler. Die Lösung ist der qualifizierte Zugriff, also Demokraten.Wahlergebnis() oder Republikaner.Wahlergebnis().
'...\Datentypen\Module\Geltungsbereich.vb |
Option Strict On
Namespace Datentypen
Module Demokraten
Sub Wahlergebnis()
Console.WriteLine("Der Präsident ist ein Demokrat.")
End Sub
End Module
Module Republikaner
Sub Wahlergebnis()
Console.WriteLine("Der Präsident ist ein Republikaner.")
End Sub
End Module
Module Nachrichten
Sub WahlergebnisBekanntgeben()
Wahlergebnis() 'Compilerfehler!!
End Sub
End Module
End Namespace
Hinweis |
Gehen Sie mit allgemeinen Namen innerhalb von Modulen sparsam um, um Namenskonflikte mit anderen Modulen des gleichen Namensraums zu vermeiden. |
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.