Arbeiten mit .NET: Grundlagen: Datentypen/ Überblick über Datentypen
In jedem Programm ist es wichtig, wie Werte verarbeitet werden. .NET ist dabei besonders streng: Jeder Wert (jede Variable, jedes Objekt) muss zu einem ganz bestimmten Typ gehören. In diesem Kapitel erhalten Sie einen Überblick über verschiedene Arten von Datentypen; in den folgenden und späteren Kapiteln werden diese genauer behandelt.
Strenge Typbindung
[Bearbeiten]Im Gegensatz zu anderen Programmiersprachen und -umgebungen arbeitet .NET stark typgebunden. Das bedeutet: Für jede Variable und jedes Objekt muss von vornherein (während der Compiler das Programm erstellt) bekannt sein, von welchem Typ es ist. Während das Programm abläuft, können nicht verschiedene Typen mit derselben Variablen verknüpft werden.
Unter JavaScript ist so etwas möglich:
var x;
// Wir weisen x eine Zahl zu.
x = 1;
// Wir weisen x einen String zu.
x = "Das ist jetzt ein String.";
Unter .NET ist das so nicht möglich:
// Wir weisen x sofort eine Zahl zu.
int x = 1;
// Wir weisen x jetzt einen String zu.
x = "Das geht nicht, denn x wurde als int-Datentyp deklariert.";
// Wir weisen x sofort eine Zahl zu.
int x = 1;
// Wir weisen x jetzt einen String zu.
x = "Das geht nicht, denn x wurde als int-Datentyp deklariert.";
' Wir weisen x sofort eine Zahl zu.
Dim x As Integer = 1
' Wir weisen x jetzt einen String zu.
x = "Das geht nicht, denn x wurde als int-Datentyp deklariert."
Auch wenn wir x (bei C# Version 3.x) als var deklarieren, wird ein ähnlicher Fehler gemeldet.
Aber was machen wir, wenn wir eine Zahl als Zeichenkette (z.B. als Teil einer Textdatei) bekommen und mit ihr rechnen müssen? Dann benötigt man immer Typumwandlungen (Konvertierungen).
Werte und Referenzen
[Bearbeiten]Mit diesen beiden Begriffen wird unterschieden, wie Daten im Arbeitsspeicher verwaltet werden. Inwieweit dies auch für die "normale" Programmiererpraxis von Bedeutung ist, wird im Kapitel Wertetypen und Verweistypen behandelt.
Einfache Datentypen
[Bearbeiten]Darunter versteht man die Basistypen, die das .NET Framework selbst zur Verfügung stellt.
Die folgende Aufstellung nennt die Bezeichnungen, die das .NET Framework im System-Namespace definiert hat, sowie eine kurze Beschreibung. Außerdem werden die Bezeichnungen genannt, die in der jeweiligen Programmiersprache üblicherweise benutzt werden. Weitere Erläuterungen wie den möglichen Wertebereich gibt es in den anderen Kapiteln zu den Datentypen.
Klassenname | Beschreibung | CLS | VB | C# | C++ | Prism | JScript |
---|---|---|---|---|---|---|---|
• Ganze Zahlen | |||||||
Byte | Eine 8-Bit-Ganzzahl ohne Vorzeichen. | ja | Byte | byte | unsigned char | Byte | Byte |
SByte | Eine 8-Bit-Ganzzahl mit Vorzeichen. | nein | SByte | sbyte | signed char | ShortInt | SByte |
Int16 | Eine 16-Bit-Ganzzahl mit Vorzeichen. | ja | Short | short | short | SmallInt | short |
Int32 | Eine 32-Bit-Ganzzahl mit Vorzeichen. | ja | Integer | int | int und/oder long | Integer | int |
Int64 | Eine 64-Bit-Ganzzahl mit Vorzeichen. | ja | Long | long | long und/oder long long (Microsoft: __int64) | Int64 | long |
UInt16 | Eine ganze 16-Bit-Zahl ohne Vorzeichen. | nein | UShort | ushort | unsigned short | Word | UInt16 |
UInt32 | Eine ganze 32-Bit-Zahl ohne Vorzeichen. | nein | UInteger | uint | unsigned int und/oder unsigned long | LongWord | UInt32 |
UInt64 | Eine ganze 64-Bit-Zahl ohne Vorzeichen. | nein | ULong | ulong | unsigned long und/oder unsigned long long (Microsoft: unsigned __int64) | UInt64 | |
• Dezimalzahlen (Gleitkommazahlen) | |||||||
Single | Eine Gleitkommazahl einfacher Genauigkeit (32 Bit). | ja | Single | float | float | Single | float |
Double | Eine Gleitkommazahl doppelter Genauigkeit (64 Bit). | ja | Double | double | double | Double | double |
Decimal | Ein exakter Dezimalwert (128 Bit). | ja | Decimal | decimal | long double | Decimal | Decimal |
• Logisch | |||||||
Boolean | Ein boolescher Wert (true oder false). | ja | Boolean | bool | bool | Boolean | bool |
• Weitere Standardtypen | |||||||
Char | Ein Unicode-Zeichen (16 Bit). | ja | Char | char | char16_t | (Wide)Char | char |
DateTime | Angabe für Datum + Uhrzeit | ja | Date | DateTime | time_point | DateTime | DateTime |
String | Eine unveränderliche Zeichenfolge fester Länge mit Unicode-Zeichen. | ja | String | string | char16_t[LÄNGE] | String | String |
Object | Der Stamm der Objekthierarchie, also aller Klassen | ja | Object | object | - | Object | Object |
• Sonstige | |||||||
IntPtr | Eine ganze Zahl mit Vorzeichen, deren Größe von der zugrunde liegenden Plattform abhängt (32-Bit-Wert auf einer 32-Bit-Plattform und 64-Bit-Wert auf einer 64-Bit-Plattform). | ja | IntPtr Kein integrierter Typ. |
IntPtr | |||
UIntPtr | Eine ganze Zahl, deren Größe von der zugrunde liegenden Plattform abhängt (32-Bit-Wert auf einer 32-Bit-Plattform und 64-Bit-Wert auf einer 64-Bit-Plattform). | nein | UIntPtr Kein integrierter Typ. |
UIntPtr |
Ein besonderer Hinweis ist für die Spalte CLS nötig: Alle Programmiersprachen für .NET müssen diejenigen Datentypen kennen, die in der Common Language Specification (CLS) genannt werden. Diese sind in der Aufstellung mit "ja" gekennzeichnet, ihre Namen sind fett gedruckt. Wenn Sie einen der mit "nein" markierten Typen verwenden, müssen Sie damit rechnen, dass eine andere .NET-Sprache diesen Programmteil nicht nutzen kann.
Die C++-Datentypen wurden entsprechend ihrer üblichen Größen eingetragen, der C++-Standard selbst macht keine konkreten Angaben über die Größe der Datentypen. Des Weiteren stammen die Datentypen char16_t und time_point aus dem noch nicht verabschiedetem Standard C++0x, welcher derzeit für das Jahr 2011 geplant ist.
DateTime wird genau genommen nicht zu den Einfachen Datentypen oder den Standardtypen gezählt. Dieser Typ ist aber so grundlegend und wird so oft benötigt, dass wir ihn gleichzeitig behandeln.
Diese Typen werden in den folgenden Kapiteln genauer besprochen.
- Ganze Zahlen
- Dezimalzahlen
- Zeichen und Zeichenketten
- Andere Typen wie Datum/Uhrzeit und logische Werte
- Schreibweise
Wie genau ein Datentyp bezeichnet wird, ist völlig gleichwertig; Beispiel in einem C#-Programm:
- System.Int32 oder Int32 (mit vorangehendem using System;) oder int
Sie sollten sich lediglich wegen der Übersichtlichkeit auf eine Schreibweise festlegen. Wir benutzen vorzugsweise die folgenden Formulierungen:
- In Code-Auszügen sowie in den Büchern, die sich mit einer Programmiersprache befassen, wird der Alias dieser Sprache angegeben.
Beispiel: int bei C# oder Integer bei VB - In Kapiteln, die nicht zu einer Programmiersprache gehören, wird der .NET-Name des Datentyps angegeben; System wird nicht geschrieben.
Beispiel: Int32
Weitere Datentypen
[Bearbeiten]Darunter fassen wir einige Sonderformen zusammen:
- Strukturen (struct) sind Kombinationen einfacher Werte, die ähnlich wie die einfachen Datentypen verwendet werden.
- Aufzählungen – als Enumerationen (Enum) bezeichnet – stehen für eine Struktur, die nur bestimmte Werte annehmen kann.
Komplexe Datentypen
[Bearbeiten]In späteren Abschnitten werden wir weitere Datenstrukturen behandeln, die aus vorhandenen abgeleitet werden: beispielsweise Arrays oder Listen.
Und schließlich wollen wir schon jetzt betonen:
Hinweis Jede Klasse ist ein Datentyp. Jedes Objekt ist von einem bestimmten Typ. |