C# bietet 16 vordefinierte eingebaute Datentypen an, unterteilt in 13 einfache Typen und 3 nicht einfache Typen. Alle Namen vordefinierter Typen werden vollständig kleingeschrieben.
graph TD
A[Vordefinierte Typen] --> B[Einfache Typen]
A --> C[object]
A --> D[string]
A --> E[dynamic]
B --> F[Nicht numerisch]
B --> G[Numerisch]
F --> H[bool]
F --> I[char]
G --> J[Ganzzahlen]
G --> K[Gleitkommazahlen]
J --> L[8-Bit]
J --> M[16-Bit]
J --> N[32-Bit]
J --> O[64-Bit]
L --> P[sbyte]
L --> Q[byte]
M --> R[short]
M --> S[ushort]
N --> T[int]
N --> U[uint]
O --> V[long]
O --> W[ulong]
K --> X[decimal]
K --> Y[float]
K --> Z[double]
%% Blattknoten grün einfärben
style H fill:#90ee90
style I fill:#90ee90
style P fill:#90ee90
style Q fill:#90ee90
style R fill:#90ee90
style S fill:#90ee90
style T fill:#90ee90
style U fill:#90ee90
style V fill:#90ee90
style W fill:#90ee90
style X fill:#90ee90
style Y fill:#90ee90
style Z fill:#90ee90
style C fill:#90ee90
style D fill:#90ee90
style E fill:#90ee9013 einfache Datentypen
- Numerische Typen (insgesamt 11): 8 Ganzzahlvarianten
sbyte/byte, short/ushort, int/uint, long/ulong; 3 Gleitkommatypenfloat, double, decimal(decimal ist ausschließlich für hochgenaue Geldberechnungen vorgesehen) - Nicht numerische Typen (insgesamt 2):
char(ein einzelnes Unicode-Zeichen),bool(nur die Werte true oder false)
Eigenschaft: Im Gegensatz zu C/C++ lassen sich numerische Werte in C# nicht direkt als boolesche Bedingung verwenden.
3 nicht einfache Referenztypen
string (Zeichenfolge), object (Basisklasse aller Typen), dynamic (Interoperabilität mit dynamischen Sprachen)
C#-Typen und .NET-Typen
Jeder vordefinierte C#-Typ bildet sich direkt auf einen zugrundeliegenden .NET-Typ ab. C#-Schlüsselwörter sind lediglich Aliase der zugehörigen .NET-Typen. Der Code kompiliert auch mit den vollen .NET-Klassenbezeichnungen, doch die offiziellen Codierrichtlinien raten davon ab. Beim Schreiben von C#-Code sollten Sie stets die eingebauten C#-Schlüsselwortaliase statt der vollständigen .NET-Klassennamen verwenden.
Vordefinierte einfache Typen
| C# Schlüsselwort | Beschreibung | Wertebereich | Zugrundeliegender .NET-Typ | Standardwert |
|---|---|---|---|---|
| sbyte | 8-Bit vorzeichenbehaftete Ganzzahl | -128 ~ 127 | System.SByte | 0 |
| byte | 8-Bit vorzeichenlose Ganzzahl | 0 ~ 255 | System.Byte | 0 |
| short | 16-Bit vorzeichenbehaftete Ganzzahl | -32768 ~ 32767 | System.Int16 | 0 |
| ushort | 16-Bit vorzeichenlose Ganzzahl | 0 ~ 65535 | System.UInt16 | 0 |
| int | 32-Bit vorzeichenbehaftete Ganzzahl | -2147483648 ~ 2147483647 | System.Int32 | 0 |
| uint | 32-Bit vorzeichenlose Ganzzahl | 0 ~ 4294967295 | System.UInt32 | 0 |
| long | 64-Bit vorzeichenbehaftete Ganzzahl | -9223372036854775808 ~ 9223372036854775807 | System.Int64 | 0 |
| ulong | 64-Bit vorzeichenlose Ganzzahl | 0 ~ 18446744073709551615 | System.UInt64 | 0 |
| float | Einfachgenaue Gleitkommazahl | 1,5×10⁻⁴⁵ ~ 3,4×10³⁸ | System.Single | 0.0f |
| double | Doppelgenaue Gleitkommazahl | 5×10⁻³²⁴ ~ 1,7×10³⁰⁸ | System.Double | 0.0d |
| bool | Boolescher Typ | true / false | System.Boolean | false |
| char | Unicode-Zeichen | U+0000 ~ U+FFFF | System.Char | \x0000 (Nullzeichen) |
| decimal | Hochgenaue Dezimalzahl (28 signifikante Stellen) | ±1,0×10⁻²⁸ ~ ±7,9×10²⁸ | System.Decimal | 0m |
Vordefinierte nicht einfache Typen
| C# Schlüsselwort | Beschreibung | Zugrundeliegender .NET-Typ |
|---|---|---|
| object | Basisklasse aller Typen, inklusive einfacher Werttypen | System.Object |
| string | Text aus null oder mehreren Unicode-Zeichen | System.String |
| dynamic | Dynamischer Typ zur Kompatibilität mit Assemblys dynamischer Sprachen | Kein fest zugehöriger .NET-Typ |
int ist vollständig gleichwertig mit System.Int32, string entspricht System.String; der Compiler erkennt beide Formen automatisch und wandelt sie gegenseitig um.
Codierstandards empfehlen dringend die Verwendung der nativen C#-Schlüsselwörter (verwenden Sie int statt Int32), um die Lesbarkeit des Codes zu erhöhen.
Einfache Typen werden auch als Werttypen (Value Type) bezeichnet
Sie speichern einen einzelnen Wert und werden im Stack-Speicher abgelegt;
Wird eine Variable deklariert ohne manuelle Wertzuweisung, erhält sie automatisch den in der Tabelle aufgeführten Standardwert;
Alle einfachen Typen erben direkt von object und unterstützen Boxing- und Unboxing-Vorgänge (später erläutert).
Ganzzahlreihe
- Typen mit Präfix
u(uint/ushort/ulong/byte): vorzeichenlos, speichern nur nicht negative Zahlen; - sbyte/short/int/long: vorzeichenbehaftet, speichern positive und negative Ganzzahlen.
Gleitkommareihe
float: Einfachgenau, Suffixf. Geringere Genauigkeit, schnelle Berechnungen, geeignet für Grafik und 3D-Berechnungen;double: Doppelgenau, Suffixd. Standardtyp für Gleitkommaliterale, universell für wissenschaftliche Berechnungen;decimal: Hochgenaue Dezimalzahl, Suffixm. Entwickelt für Finanz- und Währungsberechnungen ohne Gleitkomma-Genauigkeitsverlust.
Boolescher Typ und Zeichentyp
bool: Nur zwei mögliche Werte, implizite Umwandlung zwischen Zahl und Bool ist unzulässig;char: Speichert ein einzelnes Unicode-Zeichen, intern als 16-Bit vorzeichenlose Ganzzahl repräsentiert.
Nicht einfache Typen (Referenztypen Reference Type)
- object: Die Wurzelbasisklasse. Jeder Wert- und Referenztyp leitet sich davon ab, Kern des Boxing-Mechanismus;
- string: Spezieller unveränderlicher Referenztyp. Der leere String
""ist eine gültige Standardinstanz; - dynamic: Zur Kompilierzeit findet keine Typüberprüfung statt, Mitglieder werden zur Laufzeit aufgelöst. Es gibt keine feste .NET-Zuordnung, hauptsächlich zur Zusammenarbeit mit dynamischen Sprachen wie Python/Ruby verwendet; man verzichtet auf Kompilier-Sicherheit für mehr Flexibilität.
static void Main(string[] args)
{
// 1. 8-Bit-Ganzzahlen
sbyte sByteNum = -60;
byte byteNum = 200;
// 2. 16-Bit-Ganzzahlen
short shortNum = -12000;
ushort uShortNum = 50000;
// 3. 32-Bit-Ganzzahlen
int intNum = -888888;
uint uIntNum = 3000000000U;
// 4. 64-Bit-Ganzzahlen
long longNum = -7000000000000L;
ulong uLongNum = 12000000000000000UL;
// 5. Gleitkommatypen
float floatNum = 3.14f;
double doubleNum = 2.71828;
decimal decMoney = 999.99m;
// 6. Boolescher Typ
bool flag = true;
// 7. Unicode-Zeichen
char ch = 'A';
// 8. Vordefinierte nicht einfache Typen
object obj = 123;
string str = "FOXDEVELOP.COM";
dynamic dy = "jack";
}Code-Sprache: JavaScript (javascript)
Eingebaute Typen