안녕 스피과 나는 같은 것을 쓰기 :코드 계약 내 클래스 인터페이스에 내 코드 계약을 넣어하려고
[ContractClass(typeof(MyClassContract))]
interface IMyClass
{
int Id { get; set; }
}
[ContractClassFor(typeof(IMyClass))]
sealed class MyClassContract : IMyClass
{
public int Id
{
get { return Id; }
set { Contract.Requires(value > 0); }
}
}
public class MyClass : IMyClass
{
private int _id;
public int Id
{
get { return _id; }
set { _id = value; }
}
}
을하지만 계약에서 GET을 정의하도록 강요하고 싶지 않아요 그는 내가
get { return "abcdrdkldbfldsk"; }
로 쓸 수 및 좋아하지 않는 것을 의미, 사용하지 않을 것 캔트
get { return ImyClass.Id; }
쓰기 때문 내부 클래스의 공공 재산을 사용하도록 강요하는
편집 :
[ContractClassFor(typeof(IMyClass))]
sealed class MyClassContract : IMyClass
{
int IMyClass.Id
{
set { Contract.Requires(value > 0); }
}
}
하는 경우 get은 결코 사용되지 않을 것입니다. 단지'int Id {set; }'인터페이스에서, 그리고 그것을 구현하지 않는'MyClassContract'도 아니다'MyClass'에서? – luiscubal
첫 번째 장소에서 get 속성을 노출하려고 할 때 ID가 0보다 작거나 같을 수 없다면 getter에이 요구 사항을 적용해야합니다. 인터페이스는 구현을 강제하지 않으므로 구체적인 클래스는 setter가 아닌 다른 메서드를 사용하여 Id 속성의 기본 값을 설정합니다. – Polity
get은 MyClass에서 사용하고 MyClassContract에서는 가져옵니다. 절대 사용하지 않음 –