약식 약어를 사용할 수 있습니다. 그러나 개인적으로 나는 이런 간단한 점검을 위해 그것을하지 않을 것입니다. 여기에 우리가 사용하는 abbreviator에 대한 예는 다음과 같습니다
public static class ContractEx
{
[ContractAbbreviator]
public static void StringNullOrEmpty(string s, string parameterName)
{
Contract.Requires<ArgumentNullException>(s != null, parameterName);
Contract.Requires<ArgumentException>(s.Length != 0, parameterName);
Contract.Requires(!String.IsNullOrEmpty(s)); // required for static code analysis
}
}
사용법 :이 매개 변수가 자신의 이름을 지정해야하는 뚜렷한 단점이있다
void SomeMethod(string foo)
{
ContractEx.StringNullOrEmpty(foo, "foo");
}
참고. 이를 생략 할 수 있지만 계약 재 작성자는 실패한 조건으로 s != null
을 사용하여 예외를 방출하므로 인수 예외에 대해 아무런 의미가 없습니다.
약어는 대개 클래스의 상태를 확인하는 인스턴스 메서드로 더 적합합니다. 예 : (MSDN) :
[ContractAbbreviator]
private void DataAndStateUnchanged()
{
Contract.Ensures(this.State == Contract.OldValue(this.State));
Contract.Ensures(this.Data == Contract.OldValue(this.Data));
}
일반용을 사용할 수 있는지 확인하십시오. –
이 방법에는 제네릭을 사용할 수 없습니다. – Vlad
필자는 개인적으로이 특정한 종류의 복제를 우연의 일치라고 생각하고 그것을 남겨둔다. (그 방법은 방법이 독립적이기 때문에 : 각자의 수표에, 그것들이 동일하면 오 잘) – Alex