방금 코드 계약으로 게임을 시작 했으므로 유망한 반면 값 유형과 관련하여 몇 가지 제한 사항이있는 것 같습니다. 예 :값 형식에 대한 코드 계약
public struct Wrap<T>
where T : class
{
readonly T value;
public Wrap(T value)
{
Contract.Requires(value != null);
this.value = value;
}
public T Value
{
get
{
Contract.Requires(Value != null);
return value;
}
}
[Pure]
[ContractInvariantMethod]
void Invariant()
{
Contract.Invariant(value != null);
}
public static T BigError()
{
Contract.Ensures(Contract.Result<T>() != null);
var x = default(Wrap<T>);
Contract.Assert(x.Value != null);
return x.Value;
}
}
Wrap.BigError가 문제를 명확히 보여줍니다. 이 샘플은 4 개의 어설 션을 컴파일하고 확인하지만, 어설 션은 런타임에 분명히 실패합니다. 이러한 어설 션 중 일부는 중복되어 있으며이를 삽입하면 검증자가 지정된 지점에서 이러한 특성을 확인하고 있습니다.
나는 MS's docs for code contracts에 알려진 문제로 나열된 이런 종류의 것을 보지 못했지만, 생략하기 란 너무 분명한 것처럼 보입니다. 내가 놓친 게 있니?
"다음은 정적 계약 검사기의 알려진 버그 또는 구현되지 않은 기능 목록입니다. ** 알려진 제한 사항 ** 구조체의 불변 값은 무시됩니다." (6.6.1에서) –
고마워, 나는 그걸 놓쳤다. 만족스럽지 않은 전제 조건을 나열했기 때문에 여전히 질문에 답하지 않습니다. – naasking
어떤 전제 조건이 충족되지 않습니까? –