Partager via


Conception du constructeur

Remarque

Ce contenu est réimprimé avec l’autorisation de Pearson Education, Inc. tiré de Lignes directrices de conception de framework : Conventions, Idiomes et Modèles pour les bibliothèques .NET réutilisables, 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 type et les constructeurs d’instance.

Les constructeurs de type sont statiques et sont exécutés par le CLR avant l’utilisation du type. Les constructeurs d’instance s’exécutent lorsqu’une instance d’un type est créée.

Les constructeurs de type ne peuvent pas prendre de paramètres. Les constructeurs d’instance peuvent. Les constructeurs d’instance qui ne prennent aucun paramètre sont souvent appelés constructeurs sans paramètre.

Les constructeurs sont le moyen le plus naturel de créer des instances d’un type. La plupart des développeurs effectuent des recherches et essaient d’utiliser un constructeur avant d’envisager d’autres façons de créer des instances (telles que des méthodes de fabrique).

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

Un constructeur simple a 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 la suite aux instructions de conception du constructeur n’est pas naturelle.

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

Il ne doit pas y avoir de différence dans la sémantique entre l’utilisation du constructeur vide suivi de certains 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 du 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 de casse.

✔️ Effectuez un travail minimal dans le constructeur.

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

✔️ Lèvez des exceptions à partir des constructeurs d’instance, le cas échéant.

✔️ Déclarez explicitement le constructeur sans paramètre public dans les classes, si un tel constructeur est requis.

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

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

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

Cela accélère la création du tableau, car si le constructeur sans paramètre n’est pas défini, il n’est pas obligé 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 au constructeur de type

✔️ Faites en sorte que les constructeurs statiques sont 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 soit créée ou que tous les membres statiques de ce type soient appelés. 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 lèvez 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 inline plutôt que d’utiliser explicitement des constructeurs statiques, car le runtime est en mesure d’optimiser les performances des types qui n’ont pas de constructeur statique défini explicitement.

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

Réimprimé par l’autorisation de Pearson Education, Inc. tiré de Framework Design Guidelines : Conventions, Idioms et Patterns pour les bibliothèques .NET réutilisables, 2e édition par Krzysztof Cwalina et Brad Abrams, publié le 22 octobre 2008 par Addison-Wesley Professional dans le cadre de la Série de développement Microsoft Windows.

Voir aussi