Arbeiten mit .NET: Grundlagen: Datentypen/ Überblick über Datentypen

Aus Wikibooks

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:

JavaScript-Quelltext:

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:

 Fehler: Der Typ string kann nicht implizit in int konvertiert werden.
C++-Quelltext
// 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.";
C#-Quelltext
// 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.";
VB.NET-Quelltext
' 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.

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.