수색…
비고
코드 계약을 통해 메소드의 사전 / 사후 조건 및 객체에 대한 불변 조건을 컴파일 또는 런타임 분석 할 수 있습니다. 이러한 조건은 호출자와 반환 값이 응용 프로그램 처리를위한 유효한 상태와 일치하도록 보장하는 데 사용될 수 있습니다. 코드 계약의 다른 용도로는 문서 생성이 있습니다.
전제 조건
전제 조건을 사용하면 메소드가 입력 매개 변수에 필요한 최소값을 제공 할 수 있습니다.
예...
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
를 사용할 수도 있습니다.