2010-12-09 4 views

Répondre

25

Chaque fois que possible. Par exemple, partout où vous utiliseriez une clause de garde au début d'une méthode comme

public void Write(TextWriter tw, object o) { 
    if(tw == null) { 
     throw new ArgumentNullException("tw"); 
    } 
    if(o == null) { 
     throw new ArgumentNullException("o"); 
    } 
    tw.WriteLine(o.ToString()); 
} 

vous devriez plutôt utiliser

public void Write(TextWriter tw, object o) { 
    Contract.Requires(tw != null); 
    Contract.Requires(o != null); 
    tw.WriteLine(o.ToString()); 
} 

Ce qui est beau dans Contract est qu'ils deviennent publics et peuvent être une partie de la documentation sans travail supplémentaire de votre part où la clause de garde n'était pas publique et ne pouvait être mise dans la documentation qu'avec quelques gros travaux. Par conséquent, avec Contract vous pouvez plus clairement exprimer les exigences et les promesses dans votre code.

+3

Outre ci-dessus où les contrats sont utilisés pour vérifier les conditions préalables, de même qu'ils peuvent être utilisés pour valider les post-conditions - par exemple, après l'exécution du corps de la partie/de la méthode complète, affirmer si une variable/objet est dans l'état correct. En outre, les contrats peuvent également être évalués statiquement (au moment de la compilation). – VinayC

+0

@VinayC: Oui, c'est ce que je voulais dire avec "des promesses plus claires [...] dans ton code". Merci d'avoir élaboré pour moi. – jason

+0

+1 à vous deux; Je n'aurais pas pu mieux le dire. – koenmetsu

5

ce qui est vraiment beau avec des contrats est que vous n'avez pas à fil dur ces cordes de nom de l'argument laid ...

if(tw == null) throw new ArgumentNullException("tw"); 
+0

Eh bien, vous n'avez pas besoin de CC pour rendre ce code plus agréable. Vous pouvez facilement écrire une méthode d'aide à la 'Must.Be.NotNull (_ => someExpr); 'C'est une question de préférence personnelle qui est" plus agréable ", donc ce n'est pas le vrai avantage d'utiliser CC. – stakx

Questions connexes