.NET Framework
Codecontracten
Zoeken…
Opmerkingen
Codecontracten maken compilatie of runtime-analyse van pre / post-voorwaarden van methoden en invariante voorwaarden voor objecten mogelijk. Deze voorwaarden kunnen worden gebruikt om ervoor te zorgen dat bellers en de juiste waarde overeenkomen met de retourwaarde voor de verwerking van de aanvraag. Ander gebruik voor codecontracten omvat het genereren van documentatie.
randvoorwaarden
Met Randvoorwaarden kunnen methoden worden gebruikt om minimaal vereiste waarden voor invoerparameters te bieden
Voorbeeld...
void DoWork(string input)
{
Contract.Requires(!string.IsNullOrEmpty(input));
//do work
}
Statische analyse Resultaat ...
postcondities
Postcondities zorgen ervoor dat de geretourneerde resultaten van een methode overeenkomen met de opgegeven definitie. Dit geeft de beller een definitie van het verwachte resultaat. Postcondities kunnen vereenvoudigde implementaties toelaten, omdat sommige statische resultaten door de statische analyse kunnen worden geleverd.
Voorbeeld...
string GetValue()
{
Contract.Ensures(Contract.Result<string>() != null);
return null;
}
Statische analyse Resultaat ...
Contracten voor interfaces
Met behulp van Code Contracts is het mogelijk om een contract toe te passen op een interface. Dit wordt gedaan door een abstracte klasse te declareren die de interfaces implementeert. De interface moet worden getagd met de ContractClassAttribute
en de contractdefinitie (de abstracte klasse) moet worden getagd met de ContractClassForAttribute
C # Voorbeeld ...
[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;
}
}
Statische analyse Resultaat ...
Codecontracten installeren en inschakelen
Terwijl System.Diagnostics.Contracts
is opgenomen in het .Net Framework. Als u codecontracten wilt gebruiken, moet u de Visual Studio-extensies installeren.
Zoek onder Extensions and Updates
naar Code Contracts
en installeer vervolgens de Code Contracts Tools
Nadat de instrumenten zijn geïnstalleerd moet u in staat stellen Code Contracts
binnen uw Project-oplossing. Waarschijnlijk wilt u minimaal de Static Checking
inschakelen (controle na build). Als u een bibliotheek implementeert die door andere oplossingen wordt gebruikt, kunt u overwegen om ook Runtime Checking
.