Contract.Requires utilisation

Voici mon problème. Je suis un très grand fan de Design by contract, j’utilise ce concept en particulier lors du développement de bibliothèques pouvant être utilisées par d’autres développeurs. Je viens de découvrir une nouvelle façon de faire: Contract.Requires au lieu d’ Exception : au lieu d’avoir:

 public void SomeMethod(ssortingng name){ if(name==null) throw new NullArgumentException("Null values not supported"); } 

J’ai maintenant:

 public void SomeMethod(ssortingng name){ Contract.Requires(name != null); } 

EDIT : Je travaille sous VS2010 en mode debug.

Problème: Contract.Requires ne fait rien, même lorsque name est null !

La documentation MSDN dit:

Spécifie un contrat de pré-condition pour la méthode ou la propriété englobante.

Mais rien n’est spécifié si la condition n’est pas remplie!

J’ai également remarqué qu’il existe d’ autres surcharges Contract.Requires qui génèrent des exceptions, affichent des messages … mais alors, pour quoi est-ce que Contract.Requires(Boolean) ?

EDIT Réponse ci-dessous a souligné qu’un plug-in doit être installé pour avoir la pleine puissance de l’API du Contract mais qu’en est-il des utilisateurs Mono qui veulent que leur code se comporte de la même façon sur différentes plates-formes?

    Vous devez faire ce qui suit:

    1. Installez le complément Code Contracts comme nfechner l’a noté
    2. Accédez aux propriétés du projet, dossier ‘Contrats de code’
    3. Cochez “Effectuer la vérification du contrat d’exécution”
    4. Basculer le «mode d’assemblage» sur «Contrat standard requirejs»
    5. Remplacez votre Contract.Requires par Contract.Requires (la première lève System.Diagnostics.ContractException tandis que la seconde lève l’exception que vous avez spécifiée, ce qui est important pour les méthodes publiques)

    C’est la configuration de base. Pour une configuration plus précise, reportez – vous au manuel

    Si vous utilisez Mono, probablement, la classe de contrat est vide. Je ne l’ai pas fait, mais le chapitre sept du manuel Contrats semble expliquer comment fournir votre propre implémentation.