수색…


비고

코드 계약을 통해 메소드의 사전 / 사후 조건 및 객체에 대한 불변 조건을 컴파일 또는 런타임 분석 할 수 있습니다. 이러한 조건은 호출자와 반환 값이 응용 프로그램 처리를위한 유효한 상태와 일치하도록 보장하는 데 사용될 수 있습니다. 코드 계약의 다른 용도로는 문서 생성이 있습니다.

전제 조건

전제 조건을 사용하면 메소드가 입력 매개 변수에 필요한 최소값을 제공 할 수 있습니다.

예...

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

    //do work
}

정적 분석 결과 ...

여기에 이미지 설명을 입력하십시오.

사후 조건

사후 조건은 메소드의 리턴 된 결과가 제공된 정의와 일치하도록합니다. 이것은 호출자에게 예상 결과의 정의를 제공합니다. 정적 분석기에 의해 가능한 결과가 제공 될 수 있으므로 사후 조건은 단순한 구현을 허용 할 수 있습니다.

예...

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

    return null;
}

정적 분석 결과 ...

여기에 이미지 설명을 입력하십시오.

인터페이스 계약

코드 계약을 사용하면 인터페이스에 계약을 적용 할 수 있습니다. 이것은 인터페이스를 내포하는 추상 클래스를 선언함으로써 이루어진다. 인터페이스에는 ContractClassAttribute 태그가 지정되어야하고 계약 정의 (추상 클래스)에는 ContractClassForAttribute 태그가 지정되어야합니다

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

정적 분석 결과 ...

여기에 이미지 설명을 입력하십시오.

코드 계약 설치 및 사용

System.Diagnostics.Contracts 는 .Net Framework 내에 포함되어 있습니다. 코드 계약을 사용하려면 Visual Studio 확장을 설치해야합니다.

Extensions and Updates Code Contracts 검색에서 Code Contracts Tools 를 설치합니다.

코드 계약 도구 설치

도구를 설치 한 후에는 프로젝트 솔루션에서 Code Contracts 활성화해야합니다. 최소한 Static Checking (빌드 후 Static Checking 를 사용하고 싶을 것입니다. 다른 솔루션에서 사용할 라이브러리를 구현하는 경우 Runtime Checking 를 사용할 수도 있습니다.

프로젝트 설정



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow