Я обсуждал вопрос о SO, который был о новых функциях С# 4.0, а ответ jon skeet имел функцию Code Contracts на С# 4.0. Но я действительно не могу понять, когда их использовать.. Любое предложение...
Когда следует использовать кодовые контракты, которые поставляются вместе с С# 4.0?
Ответ 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 в своем коде.
Ответ 2
что действительно красиво с контрактами, так это то, что вам не нужно жестко подключать эти уродливые строки имен аргументов...
if(tw == null) throw new ArgumentNullException("tw");