Ответ 1
По возможности. Например, в любом месте, где вы бы использовали предложение охраны в начале метода типа
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
вы можете более четко выражать требования и promises в своем коде.