Я пытаюсь это сделать, но я думаю, что библиотека слишком молода, чтобы ее можно было серьезно использовать в больших проектах, по крайней мере с включенными статическими проверками: компиляция идет очень медленно, а конкретные предупреждения не очень понятны для чтения.
Проверки во время выполнения могут использоваться без проблем, потому что они, кажется, реализованы как Debug.Assert. По крайней мере, вы документируете методы.
Чтобы добавить контракты к свойствам, я бы добавил ограничения к свойству set, но в этом конкретном случае я думаю, что было бы лучше написать класс, который мог бы на самом деле инкапсулировать требования, позволяя создавать только хорошие объекты. В любом случае:
private decimal _Percentage;
decimal Percentage
{
get{ return _Percentage;}
set
{
CodeContract.RequiresAlways(value <= 1);
CodeContract.RequiresAlways(value >= 0);
_Percentage = value;
}
}
p.s: Мне кажется, что тенденция в C # идет в направлении динамической типизации, а не в сторону методов строгой и строгой типизации. Я думаю, что DbC * 1009 * лучше работает со строгой типизацией, хотя бы потому, что она позволяет добавлять больше требований к типам и функциям.