Eingebaute Typen

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:#90ee90

13 einfache Datentypen

  • Numerische Typen (insgesamt 11): 8 Ganzzahlvarianten sbyte/byte, short/ushort, int/uint, long/ulong; 3 Gleitkommatypen float, 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üsselwortBeschreibungWertebereichZugrundeliegender .NET-TypStandardwert
sbyte8-Bit vorzeichenbehaftete Ganzzahl-128 ~ 127System.SByte0
byte8-Bit vorzeichenlose Ganzzahl0 ~ 255System.Byte0
short16-Bit vorzeichenbehaftete Ganzzahl-32768 ~ 32767System.Int160
ushort16-Bit vorzeichenlose Ganzzahl0 ~ 65535System.UInt160
int32-Bit vorzeichenbehaftete Ganzzahl-2147483648 ~ 2147483647System.Int320
uint32-Bit vorzeichenlose Ganzzahl0 ~ 4294967295System.UInt320
long64-Bit vorzeichenbehaftete Ganzzahl-9223372036854775808 ~ 9223372036854775807System.Int640
ulong64-Bit vorzeichenlose Ganzzahl0 ~ 18446744073709551615System.UInt640
floatEinfachgenaue Gleitkommazahl1,5×10⁻⁴⁵ ~ 3,4×10³⁸System.Single0.0f
doubleDoppelgenaue Gleitkommazahl5×10⁻³²⁴ ~ 1,7×10³⁰⁸System.Double0.0d
boolBoolescher Typtrue / falseSystem.Booleanfalse
charUnicode-ZeichenU+0000 ~ U+FFFFSystem.Char\x0000 (Nullzeichen)
decimalHochgenaue Dezimalzahl (28 signifikante Stellen)±1,0×10⁻²⁸ ~ ±7,9×10²⁸System.Decimal0m

Vordefinierte nicht einfache Typen

C# SchlüsselwortBeschreibungZugrundeliegender .NET-Typ
objectBasisklasse aller Typen, inklusive einfacher WerttypenSystem.Object
stringText aus null oder mehreren Unicode-ZeichenSystem.String
dynamicDynamischer Typ zur Kompatibilität mit Assemblys dynamischer SprachenKein 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, Suffix f. Geringere Genauigkeit, schnelle Berechnungen, geeignet für Grafik und 3D-Berechnungen;
  • double: Doppelgenau, Suffix d. Standardtyp für Gleitkommaliterale, universell für wissenschaftliche Berechnungen;
  • decimal: Hochgenaue Dezimalzahl, Suffix m. 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)

  1. object: Die Wurzelbasisklasse. Jeder Wert- und Referenztyp leitet sich davon ab, Kern des Boxing-Mechanismus;
  2. string: Spezieller unveränderlicher Referenztyp. Der leere String "" ist eine gültige Standardinstanz;
  3. 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

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert