Recherche…


Remarques

Les contrats de code permettent de compiler ou d'exécuter des conditions pré / post des méthodes et des conditions invariantes pour les objets. Ces conditions peuvent être utilisées pour garantir que les appelants et la valeur de retour correspondent à des états valides pour le traitement de l'application. Les autres utilisations des contrats de code incluent la génération de documentation.

Conditions préalables

Les conditions préalables permettent aux méthodes de fournir des valeurs minimales requises pour les paramètres d'entrée

Exemple...

void DoWork(string input)
{
    Contract.Requires(!string.IsNullOrEmpty(input));

    //do work
}

Résultat d'analyse statique ...

entrer la description de l'image ici

Postconditions

Les postconditions garantissent que les résultats renvoyés par une méthode correspondent à la définition fournie. Cela fournit à l'appelant une définition du résultat attendu. Les postconditions peuvent permettre des implémentations simplifiées, car certains résultats possibles peuvent être fournis par l'analyseur statique.

Exemple...

string GetValue()
{
    Contract.Ensures(Contract.Result<string>() != null);

    return null;
}

Résultat d'analyse statique ...

entrer la description de l'image ici

Contrats pour interfaces

En utilisant des contrats de code, il est possible d'appliquer un contrat à une interface. Cela se fait en déclarant une classe abstraite qui implémente les interfaces. L'interface doit être étiquetée avec le ContractClassAttribute et la définition du contrat (la classe abstraite) doit être balisée avec ContractClassForAttribute

C # Exemple ...

[ContractClass(typeof(MyInterfaceContract))]
public interface IMyInterface
{
    string DoWork(string input);
}
//Never inherit from this contract defintion class
[ContractClassFor(typeof(IMyInterface))]
internal abstract class MyInterfaceContract : IMyInterface
{
    private MyInterfaceContract() { }

    public string DoWork(string input)
    {
        Contract.Requires(!string.IsNullOrEmpty(input));
        Contract.Ensures(!string.IsNullOrEmpty(Contract.Result<string>()));
        throw new NotSupportedException();
    }
}
public class MyInterfaceImplmentation : IMyInterface
{
    public string DoWork(string input)
    {
        return input;
    }
}

Résultat d'analyse statique ...

entrer la description de l'image ici

Installation et activation de contrats de code

Alors que System.Diagnostics.Contracts est inclus dans le .Net Framework. Pour utiliser des contrats de code, vous devez installer les extensions Visual Studio.

Sous Extensions and Updates recherchez les Code Contracts puis installez les Code Contracts Tools

Outils de contrat de code install

Une fois les outils installés, vous devez activer les Code Contracts dans votre solution Project. Au minimum, vous voulez probablement activer la Static Checking (vérifier après la construction). Si vous implémentez une bibliothèque qui sera utilisée par d'autres solutions, vous pouvez également envisager d'activer la Runtime Checking .

Paramètres du projet



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow