2011-08-10 39 views
4

我真的很想嘗試Visual Studio 2010中的新代碼合同,但我不想安裝Visual Studio的附加擴展(因爲我的代碼與我的同事分享)。 現在,當針對.NET 4.0時,我可以使用新的System.Diagnostics.Contracts名稱空間,但我還沒有完成任何操作。.NET 4.0中的開箱即用代碼合同

例如,使用

static void Main(string[] args) 
{ 
    Greet(null); 
    Console.ReadLine(); 
} 

private static void Greet(string name) 
{ 
    Contract.Requires(name != null); 
    Console.Out.WriteLine("Hello {0}", name); 
} 

程序編譯和運行沒有任何形式的警告(顯示「你好」)。如果我嘗試使用Contract.Requires<ArgumentNullException>(name != null),我會收到一條消息,告訴我必須使用重寫器,而不考慮名稱的值。 谷歌告訴我,當我安裝Code Contracts溢價時,我可以獲得任何魔法,但是當我沒有時,這個命名空間的目的是什麼?我可以使用代碼合同作爲開箱即用的精緻評論嗎?

回答

6

那麼,如果你定義了CONTRACTS_FULL預處理器符號,那麼各種Contract.*方法將由於重寫器不運行(根據註釋)而失敗。除非你定義了預處理符號,否則它們在編譯時會被忽略。

包括在框架的最少代碼契約類的一點是,這樣沒有額外的軟件有當部署代碼被安裝 - 但你需要爲了做安裝額外的工具建立時間後處理。

+0

定義CONTRACTS_FULL必定會使非通用版本,但當然我忘記了部署代碼*咳嗽*。謝謝! – Jens

+0

@Jens:「請求重寫者」是什麼意思?我預計它只會拋出一個異常... –

+0

我得到一個斷言失敗,並顯示消息「使用Contract.Requires時必須使用重寫器」。 – Jens

2

我想答案是你反對安裝擴展。開箱即用的合同意味着您可以全部使用您希望同事的合同,無需安裝任何擴展程序即可編譯代碼。

然後,您可以繼續安裝擴展,並從合同的真正好處,而不強加給你的同事沒有任何新要求的需要需求重寫

相關問題