C# propose 16 types prédéfinis intégrés, divisés en 13 types simples et 3 types non simples. Tous les noms des types prédéfinis s’écrivent entièrement en minuscules.
graph TD
A[Types prédéfinis] --> B[Simples]
A --> C[object]
A --> D[string]
A --> E[dynamic]
B --> F[Non numériques]
B --> G[Numériques]
F --> H[bool]
F --> I[char]
G --> J[Entiers]
G --> K[Virgule flottante]
J --> L[8 bits]
J --> M[16 bits]
J --> N[32 bits]
J --> O[64 bits]
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]
%% Colorier les feuilles en vert
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 types simples
- Types numériques (11 au total) : 8 entiers
sbyte/byte, short/ushort, int/uint, long/ulong; 3 types à virgule flottantefloat, double, decimal(decimal dédié aux calculs monétaires haute précision) - Types non numériques (2 au total) :
char(caractère Unicode unique),bool(seules valeurs true ou false)
Caractéristique : contrairement au C/C++, les valeurs numériques de C# ne peuvent pas être utilisées directement comme condition booléenne.
3 types référence non simples
string (suite de caractères), object (classe racine de tous les types), dynamic (interopérabilité avec langages dynamiques)
Types C# et types .NET
Chaque type prédéfini mappe directement sur un type sous-jacent .NET. Les mots-clés de type C# ne sont que des alias des types .NET correspondants. Le code compile si vous utilisez les noms complets des classes .NET, mais les conventions officielles le déconseillent. Sur du code C#, privilégiez systématiquement les alias mots-clés natifs plutôt que les noms complets .NET.
Types simples prédéfinis
| Mot-clé C# | Description | Plage de valeurs | Type .NET sous-jacent | Valeur par défaut |
|---|---|---|---|---|
| sbyte | Entier signé 8 bits | -128 ~ 127 | System.SByte | 0 |
| byte | Entier non signé 8 bits | 0 ~ 255 | System.Byte | 0 |
| short | Entier signé 16 bits | -32768 ~ 32767 | System.Int16 | 0 |
| ushort | Entier non signé 16 bits | 0 ~ 65535 | System.UInt16 | 0 |
| int | Entier signé 32 bits | -2147483648 ~ 2147483647 | System.Int32 | 0 |
| uint | Entier non signé 32 bits | 0 ~ 4294967295 | System.UInt32 | 0 |
| long | Entier signé 64 bits | -9223372036854775808 ~ 9223372036854775807 | System.Int64 | 0 |
| ulong | Entier non signé 64 bits | 0 ~ 18446744073709551615 | System.UInt64 | 0 |
| float | Virgule flottante simple précision | 1,5×10⁻⁴⁵ ~ 3,4×10³⁸ | System.Single | 0.0f |
| double | Virgule flottante double précision | 5×10⁻³²⁴ ~ 1,7×10³⁰⁸ | System.Double | 0.0d |
| bool | Type booléen | true / false | System.Boolean | false |
| char | Caractère Unicode | U+0000 ~ U+FFFF | System.Char | \x0000 (caractère nul) |
| decimal | Décimal haute précision (28 chiffres significatifs) | ±1,0×10⁻²⁸ ~ ±7,9×10²⁸ | System.Decimal | 0m |
Types non simples prédéfinis
| Mot-clé C# | Description | Type .NET sous-jacent |
|---|---|---|
| object | Classe racine de tous les types, y compris les types valeur simples | System.Object |
| string | Chaîne composée de zéro ou plusieurs caractères Unicode | System.String |
| dynamic | Type dynamique pour compatibilité avec des assemblys de langages dynamiques | Aucun type .NET fixe associé |
int est strictement équivalent à System.Int32 et string à System.String ; le compilateur les reconnaît et convertit mutuellement automatiquement.
Les règles de codage imposent d’utiliser les mots-clés C# (préférez int plutôt que Int32) pour améliorer la lisibilité du code.
Les types simples sont aussi appelés types valeur (Value Type)
Ils stockent une unique valeur et sont alloués sur la pile mémoire ;
Lorsqu’une variable est déclarée sans affectation manuelle, elle reçoit automatiquement la valeur par défaut indiquée dans le tableau ;
Tous les types simples héritent directement de object et prennent en charge les opérations de boxing et unboxing (détaillées plus loin).
Famille des entiers
- Types préfixés par
u(uint/ushort/ulong/byte) : non signés, ne stockent que des nombres positifs ou nuls ; - sbyte/short/int/long : signés, acceptent entiers positifs et négatifs.
Famille des nombres à virgule flottante
float: simple précision, suffixef. Peu précis mais calculs rapides, adapté aux graphismes et rendus 3D ;double: double précision, suffixed. Type littéral flottant par défaut pour calculs scientifiques génériques ;decimal: décimal haute précision, suffixem. Conçu pour la finance et devises, sans perte de précision sur les flottants.
Type booléen et type caractère
bool: deux valeurs uniquement, conversion implicite interdite avec les nombres ;char: stocke un seul caractère Unicode, représenté en interne par un entier 16 bits non signé.
Types non simples (types référence Reference Type)
- object : classe racine universelle. Tous les types valeur et référence en héritent, cœur du mécanisme de boxing ;
- string : type référence spécial immuable. La chaîne vide
""est une instance par défaut valide ; - dynamic : pas de vérification de type à la compilation, résolution des membres à l’exécution. Aucun mapping .NET fixe, utilisé principalement pour interagir avec Python/Ruby et autres langages dynamiques ; sacrifie la sûreté de compilation pour plus de flexibilité.
static void Main(string[] args)
{
// 1. Entiers 8 bits
sbyte sByteNum = -60;
byte byteNum = 200;
// 2. Entiers 16 bits
short shortNum = -12000;
ushort uShortNum = 50000;
// 3. Entiers 32 bits
int intNum = -888888;
uint uIntNum = 3000000000U;
// 4. Entiers 64 bits
long longNum = -7000000000000L;
ulong uLongNum = 12000000000000000UL;
// 5. Types virgule flottante
float floatNum = 3.14f;
double doubleNum = 2.71828;
decimal decMoney = 999.99m;
// 6. Type booléen
bool flag = true;
// 7. Caractère Unicode
char ch = 'A';
// 8. Types prédéfinis non simples
object obj = 123;
string str = "FOXDEVELOP.COM";
dynamic dy = "jack";
}Langage du code : JavaScript (javascript)
Types intégrés