2010-12-09 59 views

回答

25

只要有可能。例如,任何地方,你會在方法的開頭使用保護條款像

public void Write(TextWriter tw, object o) { 
    if(tw == null) { 
     throw new ArgumentNullException("tw"); 
    } 
    if(o == null) { 
     throw new ArgumentNullException("o"); 
    } 
    tw.WriteLine(o.ToString()); 
} 

你應該使用

public void Write(TextWriter tw, object o) { 
    Contract.Requires(tw != null); 
    Contract.Requires(o != null); 
    tw.WriteLine(o.ToString()); 
} 

什麼是美麗的約Contract的是,他們成爲市民,並且可以由部分文檔中沒有額外的工作,因爲警衛條款不公開,只能通過一些繁重的工作才能將文檔放入文檔中。因此,通過Contract,您可以更清晰地在代碼中表達需求和承諾。

+3

除了以上地方合同是用來檢查先決條件,同樣可以使用它們以驗證後置條件 - 例如,在部分/完整方法體執行後,斷言某些變量/對象是否處於正確狀態。此外,合同也可以靜態評估(在編譯時)。 – VinayC 2010-12-09 04:35:18

+0

@VinayC:是的,這正是我所指的「更清晰地表達您的代碼中的承諾」。感謝您爲我詳細闡述。 – jason 2010-12-09 05:17:42

5

什麼是真正的美麗與合同是,你不必硬線那些醜陋的參數名字符串...

if(tw == null) throw new ArgumentNullException("tw"); 
相關問題