Conception de constructeurs

Remarque

Ce contenu est réimprimé avec l’autorisation de Pearson Education, Inc. à partir des Instructions de conception d’une infrastructure : conventions, idiomes et modèles des bibliothèques réutilisables .NET, 2ème édition. Cette édition a été publiée en 2008, et le livre a été entièrement révisé dans la troisième édition. Certaines informations de cette page peuvent être obsolètes.

Il existe deux types de constructeurs : les constructeurs de types et les constructeurs d’instances.

Les constructeurs de types sont statiques et sont exécutés par le CLR avant que le type ne soit utilisé. Les constructeurs d’instances s’exécutent quand une instance d’un type est créée.

Les constructeurs de types ne peuvent pas accepter de paramètres. À la différence des constructeurs d’instances. Les constructeurs d’instances qui n’acceptent aucun paramètre sont souvent appelés constructeurs sans paramètre.

Les constructeurs constituent le moyen le plus naturel de créer des instances d’un type. La plupart des développeurs recherchent et essaient d’utiliser un constructeur avant d’envisager d’autres manières de créer des instances (comme les méthodes de fabrique).

✔️ ENVISAGEZ de fournir des constructeurs simples, idéalement par défaut.

Un constructeur simple comporte un très petit nombre de paramètres, et tous les paramètres sont des primitives ou des énumérations. Ces constructeurs simples augmentent la facilité d’utilisation du framework.

✔️ ENVISAGEZ d’utiliser une méthode de fabrique statique au lieu d’un constructeur si la sémantique de l’opération souhaitée ne correspond pas directement à la construction d’une nouvelle instance, ou si le respect des instructions de conception des constructeurs ne semble pas naturel.

✔️ UTILISEZ des paramètres de constructeur comme raccourcis pour définir des propriétés principales.

Il ne doit y avoir aucune différence sémantique entre l’utilisation du constructeur vide suivi de jeux de propriétés et l’utilisation d’un constructeur avec plusieurs arguments.

✔️ UTILISEZ le même nom pour les paramètres de constructeur et une propriété si les paramètres de constructeur sont utilisés pour définir simplement la propriété.

La seule différence entre ces paramètres et les propriétés doit être la casse.

✔️ EFFECTUEZ un travail minimal dans le constructeur.

Les constructeurs ne doivent pas effectuer beaucoup de travail si ce n’est capturer les paramètres de constructeur. Le coût de tout autre traitement doit être retardé jusqu’à ce qu’il soit obligatoire.

✔️ LEVEZ des exceptions à partir des constructeurs d’instances, si nécessaire.

✔️ DÉCLAREZ explicitement le constructeur public sans paramètre dans les classes, si un tel constructeur est nécessaire.

Si vous ne déclarez pas explicitement des constructeurs sur un type, de nombreux langages (comme C#) ajoutent automatiquement un constructeur public sans paramètre. (Les classes abstraites obtiennent un constructeur protégé.)

L’ajout d’un constructeur paramétrisé à une classe empêche le compilateur d’ajouter le constructeur sans paramètre. Cela entraîne souvent des changements cassants accidentels.

❌ ÉVITEZ de définir explicitement des constructeurs sans paramètre sur des structs.

Cela accélère la création du tableau, car si le constructeur sans paramètre n’est pas défini, il n’a pas besoin d’être exécuté sur chaque emplacement du tableau. Notez que de nombreux compilateurs, y compris C#, n’autorisent pas les structs à avoir des constructeurs sans paramètre pour cette raison.

❌ ÉVITEZ d’appeler des membres virtuels sur un objet à l’intérieur de son constructeur.

L’appel d’un membre virtuel entraîne l’appel du remplacement le plus dérivé, même si le constructeur du type le plus dérivé n’a pas encore été entièrement exécuté.

Instructions relatives aux constructeurs de types

✔️ DÉFINISSEZ les constructeurs statiques comme étant privés.

Un constructeur statique, également appelé constructeur de classe, est utilisé pour initialiser un type. Le CLR appelle le constructeur statique avant que la première instance du type ne soit créée ou que des membres statiques ne soient appelés sur ce type. L’utilisateur n’a aucun contrôle sur le moment où le constructeur statique est appelé. Si un constructeur statique n’est pas privé, il peut être appelé par du code autre que le CLR. Selon les opérations effectuées dans le constructeur, cela peut entraîner un comportement inattendu. Le compilateur C# force les constructeurs statiques à être privés.

❌ NE LEVEZ PAS d’exceptions à partir de constructeurs statiques.

Si une exception est levée à partir d’un constructeur de type, le type n’est pas utilisable dans le domaine d’application actuel.

✔️ ENVISAGEZ d’initialiser des champs statiques inlined plutôt que d’utiliser explicitement des constructeurs statiques, car le runtime est capable d’optimiser les performances des types qui n’ont pas de constructeur statique défini explicitement.

Portions © 2005, 2009 Microsoft Corporation. Tous droits réservés.

Réimprimé avec l’autorisation de Pearson Education, Inc. et extrait de Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition par Krzysztof Cwalina et Brad Abrams, publié le 22 octobre 2008 par Addison-Wesley Professional dans le cadre de la série sur le développement Microsoft Windows.

Voir aussi