我的例子是一種情況,繼承基接口的接口需要添加其附加字段的結果的後置條件 - 這個例子發生在我決定有一個IInitialise接口作爲從此繼承的接口,總是希望將一個前置/後置條件添加到Initialise方法中。如何將實現添加到接口代碼合同時繼承關閉接口
我可以看到問題是由於抽象實現無法避免彼此(或者由於攔截或重寫)。
[ContractClass(typeof(IInitialiseContract))]
public interface IInitialise
{
bool IsInitialised { get; }
void Initialise();
}
[ContractClassFor(typeof(IInitialise))]
public abstract class IInitialiseContract : IInitialise
{
public bool IsInitialised
{
get { return default(bool); }
}
public void Initialise()
{
Contract.Ensures(IsInitialised == true);
}
}
後來我結束了以下接口
[ContractClass(typeof(IEnginecontract))]
public interface IEngine : IInitialise
{
ICommandManager CommandManager { get; }
IDictionary<int, IEntity> World { get; }
}
[ContractClassFor(typeof(IEngine))]
public abstract class IEnginecontract : IEngine
{
public ICommandManager CommandManager
{
get
{
Contract.Ensures(Contract.Result<ICommandManager>() != null);
return default(ICommandManager);
}
}
public IDictionary<int, IEntity> World
{
get
{
Contract.Ensures(Contract.Result<IDictionary<int, IEntity>>() != null);
return default(IDictionary<int, IEntity>);
}
}
public bool IsInitialised
{
get { return default(bool); }
}
public void Initialise()
{
// I would like to put my pre and post conditions here but
// cannot because it is implemented in the base interfaces contract.
}
}
我到這裏,我想不出一個乾淨的方式來增加條件初始化()。
EDIT2:如果我把這個方法需要的,我會得到一個錯誤這樣
警告1合同類作爲其原始定義的類型不IEngine IEngine不能定義方法IInitialise.Initialise合同。改爲在IInitialise類型上定義合同。 IEngine .cs
任何想法?
有什麼確切的問題?有沒有錯誤?某處發出警告? – 2011-05-10 19:00:56
哦,這個代碼沒有警告......我想添加一個需求或確保合同類的Initialise方法。 – 2011-05-10 23:37:13