Je traversais une question sur le SO qui allait new features of c# 4.0 et jon la réponse au pigeon d'argile avait Code de fonction des contrats de C# 4.0 .. Mais je ne peux vraiment pas comprendre quand les utiliser .. Toute suggestion ...Quand utiliser les contrats de code fournis avec C# 4.0?
Répondre
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.
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");
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
- 1. Donc, les contrats de code C# 4.0 font-ils réellement quelque chose?
- 2. Se lever et courir avec les contrats de code
- 3. Contrats de code, les utiliserez-vous?
- 4. Quand utiliser avec (...) {...} en C#?
- 5. Comment puis-je utiliser les contrats de code dans un projet C++/CLI?
- 6. Plusieurs contrats avec les mêmes fixations ..Comment?
- 7. meilleur ORM à utiliser avec C# 4.0
- 8. scénarios quand utiliser les fermetures
- 9. Quand utiliser mutex avec itération. C++ C++
- 10. Les contrats de code ralentissent Visual Studio 2008
- 11. Comment utiliser les espaces de noms dans les contrats WCF?
- 12. Problème avec les contrats à terme en C++ 0x
- 13. Quand utiliser les événements C# personnalisés
- 14. Quand utiliser les classes abstraites et quand utiliser les interfaces en C#
- 15. Contrats de code: Comment gérer les interfaces héritées?
- 16. Désactiver l'avertissement de contrats de code
- 17. Limitations de vérification statique lors de l'utilisation de fonctions pures dans les contrats de code C#?
- 18. Quel correcteur binaire est utilisé pour implémenter les Contrats de code de Microsoft?
- 19. Chaînes C++, quand utiliser quoi?
- 20. Comment compatible est le code C# 3.0 avec. NET 4.0
- 21. Comment utiliser NAnt avec C# 4.0 et Mono?
- 22. Utilisation de contrats de code dans le code de bibliothèque construit avec MSBuild
- 23. Existe-t-il un moyen de faire fonctionner les contrats de code avec LINQ?
- 24. Quand utiliser extern "C" en C++?
- 25. Quand utiliser des primitives en Objective-C?
- 26. Que dois-je installer pour que les contrats de code fonctionnent avec vs 2010
- 27. Les contrats de code Microsoft peuvent-ils être utilisés avec un site Web ASP.NET?
- 28. .nrt 4.0 C# sauvegarde de base de données de code
- 29. Quand doit-on utiliser les types NULL dans C#?
- 30. Quand utiliser WCF et quand utiliser les services de données ADO dans les sites Web ajax?
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
@VinayC: Oui, c'est ce que je voulais dire avec "des promesses plus claires [...] dans ton code". Merci d'avoir élaboré pour moi. – jason
+1 à vous deux; Je n'aurais pas pu mieux le dire. – koenmetsu