Types de données de base en C#
Types de données de base en C# : numériques, textuels, logiques, orientés objet et nullables.
En C#, les données sont stockées à l’aide de différents types, chaque type définissant l’utilisation de la mémoire et les opérations possibles. Ces types ont un impact direct sur le fonctionnement du programme. Dans cet article, nous aborderons les types de données numériques, textuels, logiques, dynamiques et nullable à l’aide d’exemples.
Le choix approprié du type de données est une étape essentielle dans l’apprentissage de C#. Une utilisation correcte améliore les performances, optimise la gestion de la mémoire et limite les risques d’erreurs. Maîtriser les types de données fondamentaux constitue ainsi une base solide pour le développement d’applications fiables.
Types numériques
Les types numériques servent aux entiers et aux nombres à virgule flottante. Pour les calculs financiers, on privilégie decimal.
| Type | Description | Exemple | Mémoire |
|---|---|---|---|
int | Entier (−2B - +2B) | 42 | 4 octets |
long | Entiers plus grands | 100000000 | 8 octets |
short | Petits entiers | 120 | 2 octets |
byte | 0 - 255 positif | 200 | 1 octet |
double | Flottant (double précision) | 3.14 | 8 octets |
float | Flottant (simple précision) | 2.5f | 4 octets |
decimal | Décimal pour usages financiers | 19.99m | 16 octets |
int age = 25;
double pi = 3.14159;
decimal prix = 19.99m;
Console.WriteLine(age);
Console.WriteLine(pi);
Console.WriteLine(prix);
Remarque : Pour les calculs financiers, il est préférable d’utiliser decimal plutôt que double, car il réduit les erreurs d’arrondi et offre une meilleure précision.
Types textuels
char contient un seul caractère, string une séquence de caractères.
char premiereLettre = 'M';
string message = "Bonjour";
Console.WriteLine(premiereLettre);
Console.WriteLine(message);
Type logique
bool ne peut contenir que true ou false. Très utilisé dans les conditions.
bool estEtudiant = true;
bool estDiplome = false;
Console.WriteLine(estEtudiant);
Console.WriteLine(estDiplome);
Types objet et dynamiques
object, var et dynamic servent à un usage flexible.
object donnees = 42;
var texte = "Bonjour";
dynamic variable = 5;
variable = "Maintenant une chaîne";
Console.WriteLine(donnees);
Console.WriteLine(texte);
Console.WriteLine(variable);
Types nullables
Par défaut, les types valeur (comme int, double, bool) ne peuvent pas être null. L’ajout de ? les rend nullables.
int? note = null;
if (note == null)
Console.WriteLine("Pas de note.");
else
Console.WriteLine($"Note: {note}");
Quand Utiliser Chaque Type de Donnée ?
- int : Compteurs, âges, quantités et nombres entiers
- double : Mesures physiques et calculs approximatifs
- decimal : Valeurs monétaires, prix et calculs financiers
- string : Textes saisis par l’utilisateur
- bool : Conditions, comparaisons et logique de contrôle
Affectations entre Types de Données et Conversions
En C#, il n’est pas toujours possible d’affecter directement des variables de types de données différents. Lorsque les types sont incompatibles, une erreur de compilation se produit.
Affectations Incorrectes
int nombre = 10;
string texte = nombre; // ERREUR
bool actif = true;
int valeur = actif; // ERREUR
Dans les exemples ci-dessus, les affectations échouent car les types de données ne sont pas compatibles.
Dans l’image ci-dessus, Visual Studio détecte immédiatement les affectations invalides entre types de données incompatibles. L’exemple montre une tentative d’affectation entre des types tels que bool et int, qui ne sont pas directement compatibles. L’éditeur souligne le problème en rouge et affiche une erreur de compilation comme CS0029.
Conversions Implicites
int petit = 5;
double grand = petit; // Valide
Les types numériques de plus petite taille peuvent être convertis automatiquement en types numériques plus larges.
Conversions Explicites
double pi = 3.14;
int entier = (int)pi; // 3
Les conversions susceptibles d’entraîner une perte de données ou de précision nécessitent une conversion explicite.
Résumé
- Nombres:
int,double,decimal - Texte:
char,string - Logique:
bool - Flexibles:
object,var,dynamic - Nullables: avec
?