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 ...

wprowadź opis zdjęcia tutaj

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 ...

wprowadź opis zdjęcia tutaj

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 ...

wprowadź opis zdjęcia tutaj

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

Zainstalowanie narzędzi do kodu umowy

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 .

Ustawienia projektu



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow