C’est un concept introduit dans C# 9 et amélioré dans les versions suivantes. C’est devenu très populaire pour les objets immuables et les modèles de données.
1. Qu’est-ce qu’un record ?
-
Un record est un type référence (comme une
class) par défaut, mais avec des comportements spéciaux :-
Comparaison par valeur au lieu de par référence
-
Syntaxe simplifiée pour définir des propriétés immuables
-
Supporte le mot-clé
withpour créer des copies modifiées
-
En gros : un record est idéal pour représenter des données plutôt que des objets avec beaucoup de comportement métier.
2. Syntaxe de base
-
Ceci crée automatiquement :
-
Propriétés publiques
FirstNameetLastName -
Constructeur
-
Méthodes
Equals()etGetHashCode()basées sur les valeurs -
ToString()lisible :"Person { FirstName = John, LastName = Doe }"
-
Exemple d’utilisation :
3. Copier avec with
-
Vous pouvez créer une nouvelle instance basée sur une existante avec certaines modifications :
4. Variantes importantes
a) record class (référence)
-
Le type par défaut, comparable par valeur
-
Exemple :
b) record struct (C# 10+)
-
Valeur type, comparable par valeur
-
Idéal pour petites données immuables
c) positional record
-
Déjà montré : propriétés et constructeur en une seule ligne
d) record with mutable properties
-
Vous pouvez avoir des propriétés modifiables, mais la comparaison reste par valeur
5. Avantages du record
-
Comparaison par valeur (utile pour tests et collections)
-
Syntaxe concise pour déclarer des objets de données
-
Immutabilité facile avec
init:
-
Supporte
withpour copier et modifier des objets sans changer l’original
En résumé :
| Type | Comparaison | Immuable par défaut | Exemple syntaxe |
|---|---|---|---|
record class | par valeur | Oui | record Person(string Name, int Age); |
record struct | par valeur | Oui | record struct Point(int X, int Y); |
comparaison claire et complète entre struct, class et record en C#, surtout dans les versions récentes de C# (9/10+) :
1. Différences principales
| Caractéristique | struct | class | record |
|---|---|---|---|
| Type | Valeur (value type) | Référence (reference type) | Référence par défaut (record class) ou valeur (record struct) |
| Stockage | Stack (ou inline dans un objet) | Heap | Heap (record class) / Stack (record struct) |
| Copie | Copie les données | Copie la référence | Copie par valeur (record struct) ou par référence (record class) |
| Comparaison | Par champs si override Equals | Par référence par défaut | Par valeur (tous les champs sont comparés) |
| Mutabilité | Mutable par défaut, peut être readonly | Mutable par défaut, mais peut être immutable | Immutable par défaut (record class/struct), modifiable avec init |
| Héritage | Ne peut pas hériter d’une struct/class | Supporte héritage | Supporte héritage (record class) |
with support | ❌ | ❌ | ✅ (crée une copie avec modification) |
| Usage idéal | Petits objets, performances, structs légers | Objets complexes avec logique et héritage | Objets de données immuables, modèles DTO, configuration |
2. Exemples pratiques
a) Struct
b) Class
c) Record (C# 9+)
3. Résumé rapide
| Concept | Quand l’utiliser ? |
|---|---|
struct | Petits objets simples, copies fréquentes, performances critiques |
class | Objets complexes, héritage, logique métier |
record | Objets de données immuables, comparaison par valeur, DTOs, API responses |
💡 Astuce :
-
Si tu manipules des données immuables →
record -
Si tu as un objet lourd avec héritage →
class -
Si tu as une petite structure légère →
struct
Aucun commentaire:
Enregistrer un commentaire