Background Image
TECHNOLOGIE

Constructeurs primaires (C# 12 Syntactic Sugar) : Un guide

Chris Powell
Senior Consultant

February 6, 2024 | 4 Lecture minute

Avec l'introduction de .Net8 et de C#12 en novembre 2023, de nombreux changements significatifs ont été apportés à .NET et à C#. L'une des caractéristiques de C#12 est le concept de constructeur primaire. Un constructeur primaire remplace un constructeur de classe avec des paramètres sur la classe. Les paramètres du constructeur sont disponibles n'importe où dans le corps de la classe.

Avec un constructeur primaire :

Asset - Image 1 Primary Constructors (C# 12 Syntactic Sugar): A Guide

Il est important de noter que les paramètres de la classe ne sont pas pas de la classe. Le code suivant ne sera pas compilé s'il est utilisé dans SimpleClass, car foo et bar ne sont pas disponibles sur "this".

Asset - Image 2 Primary Constructors (C# 12 Syntactic Sugar): A Guide

L'utilisation d'un constructeur primaire peut améliorer de manière significative la lisibilité de votre code, car il supprime une grande partie de l'infrastructure de code autour des constructeurs de classe. Par exemple, comparez la facilité de lecture de SimpleClass par rapport à une classe fonctionnellement équivalente qui n'utilise pas de Primary Constructor.

Sans constructeur primaire :

Asset - Image 3 Primary Constructors (C# 12 Syntactic Sugar): A Guide

Les constructeurs primaires peuvent également être utilisés pour les types "struct" et "record". Cela peut faciliter la création et la maintenance des DTO... Par exemple.

Asset - Image 4 Primary Constructors (C# 12 Syntactic Sugar): A Guide

Nous suggérons de garder à l'esprit les points suivants lors de l'utilisation d'un constructeur primaire :

Les paramètres de la classe ne sont pas directement disponibles pour les classes enfants. Ainsi, le code suivant ne sera pas compilé, car bar et foo ne sont pas disponibles pour la classe enfant, SimpleChildClass.

Asset - Image 5 Primary Constructors (C# 12 Syntactic Sugar): A Guide

Si vous souhaitez remplacer le constructeur, les paramètres de classe doivent être inclus. Pour inclure les paramètres de classe, vous devez utiliser this() sur le constructeur surchargé. Si votre classe a plusieurs constructeurs surchargés, l'utilisation d'un constructeur primaire n'est peut-être pas la meilleure solution.

Asset - Image 6 Primary Constructors (C# 12 Syntactic Sugar): A Guide

Les paramètres de classe ne sont ne sont pas pas des champs en lecture seule. Si vous utilisez ces paramètres directement avec l'injection de dépendances, il est possible de provoquer des effets de bord qui entraîneront des erreurs d'exécution. Par exemple :

Asset - Image 7 Primary Constructors (C# 12 Syntactic Sugar): A Guide

Si FooUp() est appelé avant FooBar(), alors une NullReferenceException sera levée par FooBar(). Il est préférable d'utiliser un champ en lecture seule en conjonction avec le constructeur primaire.

Asset - Image 8 Primary Constructors (C# 12 Syntactic Sugar): A Guide

Cette classe ne se compilera pas parce que _logger est en lecture seule et que FooUp ne peut pas assigner une valeur à _logger, empêchant ainsi FooBar de lancer une NullReferenceException. Les constructeurs primaires sont un petit sucre syntaxique qui a été ajouté à C#12 et qui promet de rendre vos classes un peu plus faciles à lire et d'économiser du code de constructeur répétitif. Cependant, ils ne conviennent pas à toutes les situations et il convient de faire preuve de prudence lorsque vous utilisez ces paramètres dans votre code. Les développeurs d'Improving sont passionnés par ce qu'ils font. Ils sont extrêmement compétents dans tous les domaines du codage et du développement d'applications. Quand avez-vous mis à jour vos applications pour la dernière fois ? Ce blog nous montre que les changements sont rapides, ce qui signifie que les applications peuvent rapidement devenir obsolètes. Il est essentiel de rester à l'affût de ces changements pour maintenir la bonne performance de vos applications. Si vos applications sont obsolètes, remplissez ce formulaire et quelqu'un vous contactera.

Technologie

Dernières réflexions

Explorez nos articles de blog et laissez-vous inspirer par les leaders d'opinion de nos entreprises.
Asset - Image 1 Data Storage in a Concurrent World 
DONNÉES

Data Storage in a Concurrent World 

Data storage and event ordering in concurrent systems can spark challenges, but there are ways to be prepared.