2011-08-10 4 views
4

Je voudrais vraiment essayer le nouveau contrat de code dans Visual Studio 2010, mais je ne veux pas installer d'extensions supplémentaires à Visual Studio (depuis mon code en partage avec mes collègues). Maintenant, en ciblant .NET 4.0, je peux utiliser le nouvel espace de noms System.Diagnostics.Contracts, mais je ne l'ai pas encore fait.Contrats de code prêts à l'emploi dans .NET 4.0

Par exemple, en utilisant

static void Main(string[] args) 
{ 
    Greet(null); 
    Console.ReadLine(); 
} 

private static void Greet(string name) 
{ 
    Contract.Requires(name != null); 
    Console.Out.WriteLine("Hello {0}", name); 
} 

Le programme est compilé et exécuté (affichage « Bonjour ») sans aucun avertissement. Si j'essaie d'utiliser Contract.Requires<ArgumentNullException>(name != null), je reçois un message me disant que je dois utiliser la réécriture, quelle que soit la valeur du nom. Google me dit, que je peux obtenir n'importe quel type de magie quand j'installe la prime de contrats de code, mais quel est le but de cet espace de noms quand je ne le fais pas? Puis-je utiliser des contrats de code pour autre chose que des commentaires élaborés prêts à l'emploi?

Répondre

6

Eh bien, si vous définissez le symbole du préprocesseur CONTRACTS_FULL, les diverses méthodes Contract.* échoueront en raison de l'exécution du programme de réécriture (selon les commentaires). À moins que vous ne définissiez le symbole du préprocesseur, ils seront ignorés lors de la compilation.

Le point d'inclure les classes de code minimum de contrats nus dans le cadre est tellement qu'aucun logiciel supplémentaire doit être installé lors déploiement le code - mais vous faire besoin d'installer les outils supplémentaires afin de faire la post-traitement de temps de construction.

+0

Définition CONTRACTS_FULL fera même la version non générique require exiger la rewriter, mais Bien sûr, j'ai oublié de déployer le code * toux *. Merci! – Jens

+0

@Jens: Qu'entendez-vous par "exiger le réécriteur"? Je m'attendais à une exception ... –

+0

Je reçois un échec d'assertion avec le message "Doit utiliser le réécriteur lors de l'utilisation de Contract.Requires". – Jens

2

Je suppose que la réponse est dans vos objections à l'installation d'extensions. Avoir les contrats hors de la boîte signifie que vous pouvez avoir toute l'utilisation des contrats que vous souhaitez à vos collègues seront en mesure de compiler le code sans aucune extension installée.

Vous pouvez ensuite aller de l'avant et installer l'extension et obtenir les avantages réels des contrats sans imposer de nouvelles exigences sur vos collègues

Questions connexes