vendredi 13 février 2026

record

 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é with pour 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

public record Person(string FirstName, string LastName);
  • Ceci crée automatiquement :

    • Propriétés publiques FirstName et LastName

    • Constructeur

    • Méthodes Equals() et GetHashCode() basées sur les valeurs

    • ToString() lisible : "Person { FirstName = John, LastName = Doe }"

Exemple d’utilisation :

var p1 = new Person("John", "Doe"); var p2 = new Person("John", "Doe"); Console.WriteLine(p1 == p2); // True, comparaison par valeur

3. Copier avec with

  • Vous pouvez créer une nouvelle instance basée sur une existante avec certaines modifications :

var p3 = p1 with { LastName = "Smith" }; Console.WriteLine(p3); // Person { FirstName = John, LastName = Smith }

4. Variantes importantes

a) record class (référence)

  • Le type par défaut, comparable par valeur

  • Exemple :

public record class PersonClass(string Name, int Age);

b) record struct (C# 10+)

  • Valeur type, comparable par valeur

  • Idéal pour petites données immuables

public readonly record struct Point(int X, int Y);

c) positional record

  • Déjà montré : propriétés et constructeur en une seule ligne

public record Person(string FirstName, string LastName);

d) record with mutable properties

  • Vous pouvez avoir des propriétés modifiables, mais la comparaison reste par valeur

public record Person { public string Name { get; set; } public int Age { get; set; } }

5. Avantages du record

  1. Comparaison par valeur (utile pour tests et collections)

  2. Syntaxe concise pour déclarer des objets de données

  3. Immutabilité facile avec init :

public record Person { public string Name { get; init; } // Peut être défini uniquement à l'initialisation }
  1. Supporte with pour copier et modifier des objets sans changer l’original


En résumé :

TypeComparaisonImmuable par défautExemple syntaxe
record classpar valeurOuirecord Person(string Name, int Age);
record structpar valeurOuirecord 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éristiquestructclassrecord
TypeValeur (value type)Référence (reference type)Référence par défaut (record class) ou valeur (record struct)
StockageStack (ou inline dans un objet)HeapHeap (record class) / Stack (record struct)
CopieCopie les donnéesCopie la référenceCopie par valeur (record struct) ou par référence (record class)
ComparaisonPar champs si override EqualsPar référence par défautPar valeur (tous les champs sont comparés)
MutabilitéMutable par défaut, peut être readonlyMutable par défaut, mais peut être immutableImmutable par défaut (record class/struct), modifiable avec init
HéritageNe peut pas hériter d’une struct/classSupporte héritageSupporte héritage (record class)
with support✅ (crée une copie avec modification)
Usage idéalPetits objets, performances, structs légersObjets complexes avec logique et héritageObjets de données immuables, modèles DTO, configuration

2. Exemples pratiques

a) Struct

struct Point { public int X, Y; } Point p1 = new Point { X = 1, Y = 2 }; Point p2 = p1; // Copie p2.X = 10; Console.WriteLine(p1.X); // 1

b) Class

class Person { public string Name; } Person person1 = new Person { Name = "Alice" }; Person person2 = person1; // Même référence person2.Name = "Bob"; Console.WriteLine(person1.Name); // Bob

c) Record (C# 9+)

record PersonRecord(string Name, int Age); var r1 = new PersonRecord("Alice", 30); var r2 = r1 with { Age = 31 }; // Copie avec modification Console.WriteLine(r1); // PersonRecord { Name = Alice, Age = 30 } Console.WriteLine(r2); // PersonRecord { Name = Alice, Age = 31 } Console.WriteLine(r1 == r2); // False, comparaison par valeur

3. Résumé rapide

ConceptQuand l’utiliser ?
structPetits objets simples, copies fréquentes, performances critiques
classObjets complexes, héritage, logique métier
recordObjets de données immuables, comparaison par valeur, DTOs, API responses

💡 Astuce :

  • Si tu manipules des données immuablesrecord

  • Si tu as un objet lourd avec héritageclass

  • Si tu as une petite structure légèrestruct

Aucun commentaire:

Enregistrer un commentaire

record Lượt xem: