Aller au contenu

Quand utiliser struct vs class

Contexte : Le choix entre struct et class dépend de l’utilisation prévue, de la taille et des besoins de comportement.

  • L’instance est petite (≤ 16 octets typiquement)
  • Le type est immuable (ou doit avoir une sémantique de valeur)
  • Vous avez besoin d’égalité de valeur (les copies sont indépendantes)
  • Les performances nécessitent une allocation sur la pile (ex. nombreuses instances de courte durée)
  • Le type est utilisé dans des chemins critiques pour la performance
  • Le type est grand (> 16 octets)
  • Vous avez besoin de sémantique de référence (partage, identité)
  • L’héritage est requis
  • Vous devez utiliser le type avec des vérifications null (types référence)
  • L’objet sera fréquemment stocké dans des collections (coût du boxing pour les structures)
FonctionnalitéStructClass
TypeType valeurType référence
AllocationPile / en ligneTas
HéritageNon (sauf interfaces)Oui
Égalité par défautBasée sur la valeurBasée sur la référence
NullableNullable<T> ou T?Directement null
// Bon candidat struct : petit, immuable, sémantique de valeur
public readonly struct Point(int X, int Y);
// Bon candidat class : grand, muable, besoin d’identité
public class Customer
{
public int Id { get; set; }
public string Name { get; set; }
// ...
}

Entités de base de données : Utilisez des classes car elles ont une identité (clé primaire) et sont souvent grandes. Les objets valeur (comme Money, Address) sont mieux implémentés en tant que structures ou enregistrements.

Exemple : Dans Entity Framework Core, les entités sont des classes. Les objets valeur peuvent être implémentés comme struct ou record struct.