喜IAM試圖把我的代碼合同接口上我的課,我寫的是這樣的:代號合約在接口財產
[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中的get從未使用 –