Il existe un chapitre librement disponible sur les contrats de code dans le livre à paraître C# in Depth, deuxième édition . Par un type nommé Jon Skeet, certains d'entre vous le connaissent peut-être :)
Quant à l'usage pratique. Vous pouvez les utiliser n'importe où dans votre code, mais surtout si vous développez des bibliothèques de type framework / API que beaucoup de gens utiliseront, je m'attends à ce qu'elles soient très pratiques. La vérification statique de votre code permet d'économiser un lot de temps par rapport au fait de découvrir au moment de l'exécution que vous n'avez pas traité un cas limite.
Vous pouvez documenter l'utilisation de votre méthode autant que vous le souhaitez, mais les gens liront-ils réellement cette documentation ? Est-il autorisé que le paramètre x de la chaîne de caractères dans la méthode y soit nul, ou non ? Les contrats de code peuvent fournir ces informations, afin d'éliminer les incertitudes de l'équation.
Voici un exemple d'un tel cas :
static int CountWhitespace(string text)
{
Contract.Requires<ArgumentNullException>(text != null, "text");
return text.Count(char.IsWhiteSpace);
}
La vérification se plaindra si quelqu'un essaie de passer une chaîne de caractères à CountWhitespace
qui pourrait être nulle. En outre, une exception ArgumentNullException sera levée au moment de l'exécution.
Je n'ai que récemment converti ma bibliothèque de classes privées en .NET 4.0, mais je prévois d'y ajouter des contrats de code très bientôt.