Datentypen in .NET - Access im Unternehmen

Werbung
Know-how
Datentypen in .NET
Datentypen in .NET
Christoph Spielmann, Düsseldorf
Wie es sich für eine vernünftige Programmiersprache gehört, stellt auch VB.NET eine Reihe von
Datentypen zur Verfügung, die Sie in Ihrem Programmcode verwenden können. Dieser Artikel gibt
Ihnen einen Überblick über die wichtigsten Datentypen und erläutert Besonderheiten, die Sie unbedingt berücksichtigen sollten.
1
Der passende Datentyp
Programmiersprachen stellen in der Regel einen
kompletten Satz an Datentypen zur Verfügung.
Jeder Datentype hat hierbei bestimmte Fähigkeiten und belegt eine bestimmte Menge an Speicherplatz.
Zu einem guten Programmierstil gehört es, einen
Datentyp auszuwählen, der bei minimalem Speicherplatzbedarf die gewünschte Anforderung
erfüllen kann. Wenn Sie also beispielsweise das
Alter einer Person speichern möchten, ist der
Datentyp Byte (= 8 Bit) in der Regel ausreichend.
Er unterstützt Werte im Bereich von 0 bis 255.
Jedoch gibt es eine wichtige Ausnahme von
dieser Regel: Heutzutage sind die meisten Prozessoren als 32-bit-Prozessoren ausgelegt. Dies
führt dazu, dass sie mit aus 32 Bit bestehenden
Zahlen schneller rechnen können, als mit kleineren oder größeren Zahlen. In der Praxis wird
daher auch für Zahlen mit kleinen Wertebereichen häufig der Datentyp Integer eingesetzt.
Inhalt
1
2
3
4
5
6
Priorität hat (weil Sie beispielsweise sehr viele
Werte in einem Array ablegen möchten), sollten
Sie einen möglichst Speicherplatzsparenden Type
auswählen. Insgesamt unterstützt VB.NET die
numerischen Datentypen aus Tab. 1.
Typ
Speicherplatz (Bits)
Byte
8
Short
16
Integer
32
Single
32
Long
64
Double
64
Decimal
128
Tab. 1: Numerische Datentypen unter .NET
Die ersten 5 Datentypen können nun ganzzahlige
Werte aufnehmen. Die letzten beiden Datentypen Double und Decimal unterstützten dagegen
auch Dezimalbruchzahlen.
2
Der Wertebereich entspricht dem eines LongAutoWert-Feldes von Access und ist damit sehr
groß. Außerdem werden sowohl negative als
auch positive Ganzzahlen unterstützt.
Wenn Sie also auf eine gute Performance Ihrer
Anwendung Wert legen, sollten Sie für Ganzzahlen den Datentyp Integer verwenden. Wenn
dagegen ein möglichst geringer Speicherbedarf
computer.haufe.de
Der passende Datentyp ................................... 1
Deklaration einer Variablen ........................... 1
Boxing................................................................... 2
Nicht numerische Datentypen...................... 3
Typkonvertierung .............................................. 5
Zusammenfassung und Ausblick.................. 5
Deklaration einer Variablen
Die Deklaration einer Variablen erfolgt in VB.NET
auf die gleiche Weise, wie in VBA unter Access
mit Hilfe der Dim-Anweisung. Das folgende
Beispiel definiert eine neue Variable mit dem Typ
Integer und weist dieser einen Wert zu:
Dim Alter As Integer
Alter = 23
Access, SQL & .NET
PREVIEW
1
Know-how
Datentypen in .NET
Wenn Sie die Anwendung nun mit der Taste F5
starten, wird das Alter in einem Konsolenfenster
ausgegeben.
Imports System
Module Main
Sub Main()
Dim Alter As Integer
Die Deklaration einer Variablen mit dem Datentyp Double erfolgt auf die gleiche Weise. Bei der
Zuweisung eines Wertes müssen Sie darauf achten, dass Sie als Dezimaltrennzeichen den Punkt
verwenden (s. Abb. 1):
Alter = 23
Console.WriteLine (Alter)
End Sub
End Module
Quellcode 1
Um dieses Beispiel in SharpDevelop nachzuvollziehen, gehen Sie wie folgt vor:
Dim Wechselkurs As Double
Wechselkurs = 1.2333
step by step
Praxis-Tipp
Falls noch nicht geschehen, installieren Sie
SharpDevelop und das .NET-Framework nach der
Beschreibung im Artikel .NET-Programmierung
mit SharpDevelop.
Wenn Sie einer Variablen des Typs Double eine
Ganzzahl zuweisen möchten, sollten Sie dies im
Programmcode immer inklusive „.0“ angeben
(beispielsweise 4.0). Dies verbessert die Lesbarkeit. „
1
2
3
Starten Sie SharpDevelop.
3
Wählen Sie den Menüpunkt
tei → Neu → Combine aus.
4
Klicken Sie auf die Kategorie VBNET und
die Schablone Konsolenanwendung.
5
Geben Sie unter Name den Projektnamen
Datentypen ein.
6
7
Boxing
Da-
Bestätigen Sie mit Erstellen.
Ergänzen Sie die Sub Main wie in Quellcode 1. „
Bei der Entwicklung von .NET war es das Ziel,
alles als Objekt zu behandeln. Dies sollte auch
auf einfache Variablen (Value Types) des Typs
Integer oder Double zutreffen.
Das Problem bei Objekten ist, dass diese in einem
speziellen Speicherbereich abgelegt werden
(Heap), was viel Zeit in Anspruch nimmt und
damit die Performance der Anwendung verschlechtert. Die Lösung besteht darin, dass .NET
eine Value-Type-Variable bei Bedarf in ein einfaches Objekt umwandelt. Dieser Vorgang wird
auch als „Boxing“ bezeichnet.
Das folgende Beispiel demonstriert dies:
Sub Main()
Console.WriteLine _
((3.4).ToString())
End Sub
Abb. 1: Die Testprozedur in SharpDevelop
2
Access, SQL & .NET
PREVIEW
Hier wird die Zahl 3,4 mit Hilfe
der ToString-Methode in einen
Text umgewandelt und schließlich ausgegeben. Die Klammern
um die Zahl herum sind nur
erforderlich, damit .NET den
Dezimalpunkt von dem übli-
computer.haufe.de
Know-how
Datentypen in .NET
chen Punkt zum Verweis auf Methoden unterscheiden kann. Bei der Ausführung der Anweisung liest .NET die Zahl in ein temporäres Objekt
ein, so dass es die ToString-Methode ausführen
kann. Wird das Objekt danach nicht mehr benötigt, zerstört es .NET automatisch. Von dem kompletten Vorgang bekommen Sie als Programmierer nichts mit.
durch den zur Verfügung stehenden Speicherplatz beschränkt. Wenn Sie also beispielsweise
den Inhalt eines Access-Memo-Feldes in .NET
weiterverarbeiten möchten, ist der StringDatentyp hierfür ideal geeignet. Es folgt ein
Beispiel, in dem eine entsprechende Variable
deklariert und ein Text zugewiesen wird:
Dim Nachname As String
4
Nicht numerische Datentypen
Neben den bereits vorgestellten numerischen
Datentypen unterstützt VB.NET noch die folgenden Typen:
Nachname = "Müller"
Um zu prüfen, ob eine String-Variable einen
Inhalt hat, können Sie eine der folgenden Varianten verwenden:
Sub Main()
Typ
Verwendungszweck
Boolean
True/False
Nachname = ""
String
Zeichenketten
If Nachname = "" Then
Char
Ein einzelnes Zeichen
DateTime
Datums- und Zeitangaben
Object
Ein beliebiges Objekt
Dim Nachname As String
Console.WriteLine("Leer")
End If
If Nachname.Length = 0 Then
Console.WriteLine("Leer")
End If
Tab. 2: Nicht numerische Datentypen
If Nachname = String.Empty Then
In den folgenden Abschnitten werden die
Einsatzzwecke kurz beschrieben.
End If
Console.WriteLine("Leer")
4.1 Boolean
Der Datentyp Boolean dient zum speichern von
zwei Zuständen, nämlich True oder False. Das
folgende Beispiel deklariert eine BooleanVariable und weist dieser den Wert True zu:
End Sub
In einigen Fällen kann eine String-Variable nicht
nur leer sein, sondern auf überhaupt kein Objekt
verweisen. Dies kann mit dem folgenden Ausdruck geprüft werden:
If Nachname Is Nothing Then
Console.WriteLine("Leer")
Dim IstAngestellt As Boolean
End If
IstAngestellt = True
Anders als bei Access beziehungsweise VBA basieren True und False nicht mehr durch numerische Werte. Die folgende Anweisung würde daher bei VBA funktionieren, bei .NET jedoch zu
einem Kompilierfehler führen:
Da VB.NET einer neuen String-Variable schon bei
der Deklaration einen Leerstring zuweist, sollte
der Zustand Nothing in der Regel nicht auftreten. Einige Klassen des .NET-Frameworks verhalten sich hier jedoch anders, so dass eine entsprechende Prüfung erforderlich ist.
IstAngestellt = -1
4.3 Char
4.2 String
Der Char-Datentyp hat die Aufgabe, ein einzelnes Zeichen zu speichern. Das folgende Beispiel
zerlegt einen String in einzelne Zeichen und gibt
diese in der Konsole aus (s. Abb. 2):
Der Datentyp String unterstützt das Speichern
von Texten. Die Länge des Textes ist hierbei nur
computer.haufe.de
Access, SQL & .NET
PREVIEW
3
Know-how
Datentypen in .NET
Sub Main()
Dim Nachname As String
Ausdruck gibt beispielsweise nur das Datum,
ohne Uhrzeit aus:
Dim Zeichen As Char
Nachname = "Müller"
Console.WriteLine (Geburtsda-
For Each Zeichen In Nachname
tum.ToString("d"))
Console.WriteLine(Zeichen)
Next
End Sub
Abb. 2: Die Zerlegung einer Zeichenkette
4.4 DateTime
Das „d“ steht hierbei für ein vordefiniertes Standardformat, ähnlich wie Sie es zum Beispiel von
Access her kennen. In der Dokumentation zum
.NET-Framework finde Sie noch weitere Formate
für die verschiedensten Einsatzzwecke.
Natürlich stellt das .NET-Framework zum Rechnen mit Datumswerten eine Reihe von Funktionen in Form von Objektmethoden zur Verfügung.
Das folgende Beispiel addiert zu dem angegebenen Datum 6 Monate und gibt das Ergebnis aus:
Sub Main()
Dim Geburtsdatum As DateTime
Der DateTime-Datentyp unterstützt das Speichern von Datums- und Zeitangaben. Streng
genommen handelt es sich hierbei nicht um
einen Value-Type, sondern um eine „normale“
Objektklasse. Das folgende Beispiel definiert eine
DateTime-Variable und weist dieser ein festes
Datum zu:
Geburtsdatum = _
New DateTime(1970, 12, 30)
Dim NeuesDatum As DateTime
NeuesDatum = _
Geburtsdatum.AddMonths(6)
Console.WriteLine _
(NeuesDatum.ToString("d"))
End Sub
Sub Main()
Dim Geburtsdatum As DateTime
4.5 Objekt
Geburtsdatum = _
New DateTime(1970,12,30)
Console.WriteLine (Geburtsdatum)
End Sub
Anders als bei Access werden feste Datumswerte
im Quellcode nicht in der Form #mm/dd/yyyy#
sondern durch Angabe der einzelnen Bestandteile eines Datums definiert. Die Angabe erfolgt
hierbei innerhalb des Konstruktors, der bei der
Anlage eines neuen Objekts aufgerufen wird.
Nach dem Start des Beispiels erscheint in der
Konsole das folgende Ergebnis:
Der Datentyp Object hat eine besondere Bedeutung. Er ist das Basis-Objekt aller anderen Objekte und kann damit Referenzen auf alle anderen
Objekte speichern.
Er ist daher mit dem aus VBA bekannten Datentyp Variant vergleichbar, der in .NET nicht mehr
verfügbar ist.
Das folgende Beispiel speichert ein Datum in
einer Variablen des Typs Object:
Sub Main()
Dim MeinDatum As Object
30.12.1970 00:00:00
MeinDatum = New DateTime(2004, 1, 12)
Console.WriteLine _
Die Nullwerte stehen hierbei für eine Uhrzeit. Um
die Ausgabe anders zu formatieren, können Sie
die ToString-Anweisung einsetzen. Der folgende
4
Access, SQL & .NET
PREVIEW
(DirectCast(MeinDatum, _
DateTime).ToString("d"))
End Sub
computer.haufe.de
Know-how
Datentypen in .NET
Die Zuweisung eines Datums zu einer ObjectVariablen funktioniert auf die gewohnte Art und
Weise.
mit der ToString-Methode kennengelernt. Diese
Methode steht grundsätzlich bei allen Objekten
zur Verfügung.
Um das Datum aber aus der variablen wieder
heraus zu bekommen, muss mit Hilfe der DirectCast-Anweisung angegeben werden, welchen
Typ der Programmierer in der Variablen erwartet.
Der andere Weg, nämlich die Umwandlung eines
Textes in eine Zahl tritt häufig bei der Verarbeitung von Benutzereingaben auf.
Auf diese Weise kann der Compiler von .NET den
Quellcode auf Richtigkeit prüfen, was Fehler
vermeidet. Sollte während der Ausführung des
Programms nicht der erwartete Typ in der Variablen sein, tritt ein Laufzeitfehler aus, wie das
folgende Beispiel zeigt:
Zu diesem Zweck stellt .NET die Convert-Klasse
zu Verfügung. Das folgende Beispiel wandelt
einen Text in eine Zahl um:
Sub Main()
Dim MeineEingabe As String
Console.WriteLine_
("Bitte geben Sie eine Zahl ein:")
Sub Main()
MeineEingabe = Console.ReadLine()
Dim MeineZahl As Object
Dim MeineZahl As Integer
MeineZahl = 5
MeineZahl = _
Console.WriteLine _
Convert.ToInt32(MeineEingabe)
(DirectCast(MeineZahl, _
Console.WriteLine _
DateTime).ToString())
(MeineZahl.ToString())
End Sub
End Sub
In diesem Beispiel wird einer Object-Variablen
eine Zahl zugewiesen, beim Auslesen jedoch ein
Datum erwartet. Dies quittiert .NET durch einen
Fehler des Typs InvalidCastException (s. Abb. 3).
5
Hinweis
Falls Sie bei der Eingabe einen Text eingeben, der
nicht in eine Zahl konvertiert werden kann, meldet .NET einen Laufzeitfehler. „
Typkonvertierung
Eine wichtige Aufgabe bei der Programmierung
ist die Umwandlung von einem Typ in einen
anderen.
Eine Variante, nämlich die von einer Zahl in einen String, haben Sie bereits im Zusammenhang
Neben der ToInt-Methode stellt die ConvertKlasse noch eine Vielzahl anderer Methoden zur
Verfügung, mit der Sie jeden Value-Type in jeden
anderen Value-Type verwandeln können.
6
Zusammenfassung und Ausblick
Nach diesem kurzen Überblick
über .NET-Datentypen fällt es
Ihnen sicherlich leichter, den
passenden Datentyp für Ihre
Zwecke auszuwählen.
Abb. 3: Der von .NET ausgelöste Fehler
computer.haufe.de
In zukünftigen Artikeln in weiteren Ausgaben von Access im
Unternehmen werden wir
anhand von Praxisbeispielen
noch genauer auf den Umgang
mit den verschiedenen Typen
eingehen.
Access, SQL & .NET
PREVIEW
5
Herunterladen