1
我想爲特定接口創建代碼合同,但是我很難相信它實際上是以這種方式完成的。瞭解接口的代碼合同
[ContractClass(typeof(AsyncCacheProviderContract))]
public interface IAsyncCacheProvider {
Task<bool> GetAsync<T>(string key, out T value);
}
[ContractClassFor(typeof(AsyncCacheProviderContract))]
internal abstract class AsyncCacheProviderContract : IAsyncCacheProvider {
public Task<bool> GetAsync<T>(string key, out T value)
{
Contract.Requires(!String.IsNullOrEmpty(key));
value = default(T);
return Task.Factory.StartNew(() => false);
}
}
合同應確保1)實現該接口的所有類所需要的參數鍵爲不爲零或爲空以及2)自動生成檢查到構建,例如類似
public Task<bool> GetAsync<T>(string key, out T value) {
if(String.IsNullOrEmpty(key))
throw new ArgumentException //...
}
然而,在這種特殊情況下,它覺得很奇怪,我認爲我必須指定out
參數以及返回一個空Task
只是爲了讓編譯器高興。有沒有更直接的方式,例如使用屬性?
小問題在你的代碼無關你的問題:在'ContractClassFor'屬性應該引用的接口,這樣'[ContractClassFor(typeof運算(IAsyncCacheProvider)) ]' – Keith 2014-10-01 14:47:29