Ricerca…


Osservazioni

I contratti di codice consentono l'analisi compile o runtime delle condizioni pre / post dei metodi e delle condizioni invarianti per gli oggetti. Queste condizioni possono essere utilizzate per garantire che i chiamanti e il valore restituito soddisfino gli stati validi per l'elaborazione dell'applicazione. Altri usi per i contratti di codice includono la generazione di documentazione.

presupposti

Le precondizioni consentono ai metodi di fornire i valori minimi richiesti per i parametri di input

Esempio...

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

    //do work
}

Risultato dell'analisi statica ...

inserisci la descrizione dell'immagine qui

postconditions

Le post-condizioni assicurano che i risultati restituiti da un metodo corrispondano alla definizione fornita. Ciò fornisce al chiamante una definizione del risultato atteso. Le post-condizioni possono essere consentite per le implosazioni semplificate poiché alcuni risultati possibili possono essere forniti dall'analizzatore statico.

Esempio...

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

    return null;
}

Risultato dell'analisi statica ...

inserisci la descrizione dell'immagine qui

Contratti per interfacce

Utilizzando i Contratti di codice è possibile applicare un contratto a un'interfaccia. Questo viene fatto dichiarando una classe astratta che implora le interfacce. L'interfaccia deve essere contrassegnata con ContractClassAttribute e la definizione del contratto (la classe astratta) deve essere contrassegnata con ContractClassForAttribute

C # Esempio ...

[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;
    }
}

Risultato dell'analisi statica ...

inserisci la descrizione dell'immagine qui

Installazione e attivazione dei contratti di codice

Mentre System.Diagnostics.Contracts è incluso all'interno di .Net Framework. Per utilizzare i Contratti di codice è necessario installare le estensioni di Visual Studio.

Sotto Extensions and Updates cerca i Code Contracts quindi installa gli Code Contracts Tools

Installazione degli strumenti del contratto di codice

Dopo aver installato gli strumenti, è necessario abilitare i Code Contracts all'interno della soluzione di progetto. Al minimo probabilmente vuoi abilitare il Static Checking (controlla dopo la costruzione). Se stai implementando una libreria che verrà utilizzata da altre soluzioni, potresti prendere in considerazione anche l'abilitazione del Runtime Checking .

Impostazioni del progetto



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow