Qu'est-ce qu'un Record en C# ?
Le Record, introduit en C# 9, est un type de référence spécialement conçu pour représenter des données immutables. Ils offrent une syntaxe concise et des fonctionnalités intégrées pour la comparaison par valeur, la sérialisation et la création de copies modifiées.
Syntaxe de base
Voici comment déclarer un Record simple :
Avec cette déclaration, le compilateur génère automatiquement :
- Des propriétés en lecture seule
- Un constructeur avec tous les paramètres (tous les paramètres sont obligatoires.)
- Les méthodes
Equals
,GetHashCode
etToString
(la méthodeToString
imprime les valeurs de toutes les propriétés publiques de l'objet.) - L'opérateur
==
et!=
pour la comparaison par valeur - Un support pour la déconstruction
Avantages des Records
Immutabilité par défaut : Les Records encouragent l'écriture de code plus sûr en rendant les données immutables. Cela réduit les erreurs liées aux modifications non intentionnelles d'objets partagés.
Comparaison par valeur : Contrairement aux classes classiques qui comparent les références, les Records comparent automatiquement les valeurs de leurs propriétés.
Suport automatique de la déconstruction : Les records peuvent être automatiquement déconstruit en tuples.
Modifications avec la syntaxe 'with'
Bien que les Records soient immutables, vous pouvez créer de nouvelles instances avec des valeurs modifiées
en utilisant l'expression with
:
Records vs Classes : Quand les utiliser ?
Dans votre code il est conseiller d'utiliser des Records quand :
- Vos données sont principalement immutables
- Vous avez besoin de comparaisons par valeur
- Vous manipulez des DTOs (Data Transfer Objects)
- Vous travaillez avec des modèles de domaine simples
Préférez les classes quand vous avez besoin de :
- Héritage complexe
- Contrôle fin sur l'encapsulation
- De mutabilité
Conclusion
En adoptant les Records dans vos projets .NET, vous bénéficiez d'un code plus concis, plus sûr et plus maintenable. Ils s'intègrent parfaitement dans les architectures modernes et les patterns comme DDD (Domain-Driven Design).