.NET Framework
Kontrakty kodowe
Szukaj…
Uwagi
Kontrakty kodowe pozwalają na kompilację lub analizę środowiska wykonawczego warunków przed / po metodach i niezmiennych warunków dla obiektów. Te warunki mogą być stosowane w celu zapewnienia, że obiekty wywołujące i zwracana wartość odpowiadają prawidłowym stanom przetwarzania aplikacji. Inne zastosowania kontraktów kodowych obejmują generowanie dokumentacji.
Warunki wstępne
Warunki wstępne pozwalają metodom zapewnić minimalne wymagane wartości parametrów wejściowych
Przykład...
void DoWork(string input)
{
Contract.Requires(!string.IsNullOrEmpty(input));
//do work
}
Wynik analizy statycznej ...
Warunki dodatkowe
Warunki dodatkowe zapewniają, że zwrócone wyniki metody będą pasować do podanej definicji. Zapewnia to dzwoniącemu definicję oczekiwanego wyniku. Warunki dodatkowe mogą dopuszczać uproszczone implikacje, ponieważ statyczny analizator może zapewnić pewne możliwe wyniki.
Przykład...
string GetValue()
{
Contract.Ensures(Contract.Result<string>() != null);
return null;
}
Wynik analizy statycznej ...
Kontrakty na interfejsy
Korzystając z Code Contracts, można zastosować umowę do interfejsu. Odbywa się to poprzez zadeklarowanie klasy abstrakcyjnej, która implikuje interfejsy. Interfejs powinien być oznaczony przy pomocy ContractClassAttribute
a definicja umowy (klasa abstrakcyjna) powinna zostać oznaczona przy pomocy ContractClassForAttribute
Przykład C # ...
[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;
}
}
Wynik analizy statycznej ...
Instalowanie i włączanie kontraktów kodowych
Podczas gdy System.Diagnostics.Contracts
jest zawarty w .Net Framework. Aby korzystać z Code Contracts, musisz zainstalować rozszerzenia Visual Studio.
W obszarze Extensions and Updates
wyszukaj Code Contracts
a następnie zainstaluj Code Contracts Tools
Po zainstalowaniu narzędzi należy włączyć Code Contracts
w ramach rozwiązania Project. Przynajmniej prawdopodobnie chcesz włączyć Static Checking
(sprawdź po kompilacji). Jeśli implementujesz bibliotekę, która będzie używana przez inne rozwiązania, możesz rozważyć także włączenie Runtime Checking
.