.NET Framework
Contratti di codice
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 ...
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 ...
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 ...
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
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
.