Contrat.Nécessite l'utilisation de
Voici mon problème. Je suis un très grand fan de la Conception par contrat, je suis en utilisant ce concept, particulièrement lors de l'élaboration de bibliothèques qui peuvent être utilisés par d'autres développeurs. Je viens de découvrir une nouvelle façon de faire ce qui est: Contract.Requires
au lieu de Exception
:
Alors au lieu d'avoir:
public void SomeMethod(string name){
if(name==null) throw new NullArgumentException("Null values not supported");
}
J'ai maintenant:
public void SomeMethod(string name){
Contract.Requires(name != null);
}
MODIFIER: je travaille sous VS2010 sur le mode de débogage.
Problème: Contract.Requires
ne pas faire n'importe quoi, même quand name
est null
!
La MSDN documentation dit:
Spécifie un contrat de condition préalable pour l'affichage de méthode ou de
de la propriété.
Mais rien n'est précisé dans le cas où la condition n'est pas remplie!
J'ai aussi remarqué il y a d'autres Contract.Requires
surcharges que jeter l'exception, d'afficher de message... mais alors qu'est-ce que Contract.Requires(Boolean)
pour?
MODIFIER Réponse ci-dessous mis en évidence qu'un plug-in doit être installé pour avoir toute la puissance de Contract
API, mais alors qu'en Mono utilisateurs qui veulent leur code pour se comporter de la même manière sur les différentes plates-formes?
- Cela peut être utile: stackoverflow.com/questions/6483055/code-contracts-for-mono
- Merci pour l'astuce. Avec tous ces tracas, je pense que je ferais mieux de s'en tenir à la vieille manière de lever des exceptions
Vous devez vous connecter pour publier un commentaire.
Vous devez effectuer les opérations suivantes:
Contract.Requires
avecContract.Requires<SomeException>
(le premier jetteSystem.Diagnostics.ContractException
tandis que le second lève l'exception que vous avez spécifié qui est important pour les méthodes publiques)C'est la configuration de base. Pour plus de configuration exacte, reportez-vous au manuel
Si vous utilisez Mono, probablement, d'un Contrat de classe est vide. Je n'ai pas fait cela, mais le chapitre sept de l'Contrats manuel semble expliquer la façon de fournir votre propre mise en œuvre.
Contract.Requires(...)
vérifie à la fois sur Windows et Linux. La seule question est de compiler le code sur Linux, où la IL du graveur n'est pas disponible. Si vous faites tout votre développement sur Windows, puis des Contrats de Code ne sera en aucun cas affecter la compatibilité multiplate-forme.De la Classe de contrat de docs:
Avec un message comme cela, il est généralement utile de spécifier exactement ce que vous avez fait.
Par exemple, vous ne mentionnez pas dans le message d'origine si vous avez installé le VS Addon, ni que vous avez activé dans votre projet de propriétés, ou qui vous sont effectivement en cours d'exécution dans le debug vs mode de diffusion, etc.
Re
Contract.Requires
vsContract.Requires<Exception>
Contract.Requires
est recommandé.Selon le manuel de l'