Tech Days 2011 : CodeContrats

[ContractClass] et [ContractClassFor] permettent, par injection, de placer des contrats de code sur des interfaces, et qu’on retrouvera sur les classes d’implémentation.

[ContractInvariantMethod] et Contract.Invariant() pour les invariances de valeurs.

Pour hériter des contraintes depuis une interface, on implémente une classe sur cette interface et qui va porter les contraintes d’invariance, de pré- ou de post-condition, et on la marque avec [ContractClassFor], et on va mettre l’attribut [ContractClass(typeof(laClasseHeritantLInterface)] sur l’interface.

Vérification des contrats à la compilation dans la version Premium ou Ultimate, ou avec l’utilitaire cccheck. Contrat.Assume permet d’informer le vérificateur qu’une valeur a été validée par un autre moyen que le code (exemple : le contrôle WPF l’envoyant), et que c’est normal que le code ne prouve pas lui-même le respect de la contrainte dans cet enchaînement particulier de fonctions.

Contract.EndContractBlock() permet de délimiter la fin d’un code directement écrit en C# juste après la déclaration de fonction, et qui du coup sera pris en compte comme si c’était du CodeContract, y compris en terme d’héritage, etc.

Un outil permet d’avoir une assembly sans les règles, et une assembly séparée avec les contracs. Typiquement à utiliser après le staging, et pour avoir les performances maxi en production, par suppression des règles.

C’est le Code Contract Rewriter qui injecte les règles dans la dll intégrateur. Call-site requires checking est l’option des propriétés CodeContract qui permet d’activer ce comportement. Avant d’utiliser, il faudra bien vérifier que le problème de signature par nom fort a bien été pris en compte.

Common Compiler Infrastructure = l’API de base utilisée par FXCop, SandCastle, etc. pour parcourir le code compilé.

About JP Gouigoux

Jean-Philippe Gouigoux est Architecte Logiciel, MVP Connected Systems Developer. Il intervient régulièrement à l'Université de Bretagne Sud ainsi qu'à l'Agile Tour. Plus de détails sur la page "Curriculum Vitae" de ce blog.
This entry was posted in .NET, C#, Retours and tagged . Bookmark the permalink.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha Captcha Reload