Я хотел попробовать немного дизайна контракта в моем последнем приложении C# и хотел иметь синтаксис, сродни:
public string Foo()
{
set {
Assert.IsNotNull(value);
Assert.IsTrue(value.Contains("bar"));
_foo = value;
}
}
Я знаю, что могу получить статические методы как это от платформы модульного теста, но я хотел знать, было ли что-то вроде этого уже встроено на язык или если уже была некоторая платформа, плавающая вокруг. Я могу записать, что мои собственные Утверждают функции, просто не хотят изобретать велосипед.
Для моего текущего проекта (февраль 2010 г., VS 2008) я выбрал http://lightcontracts.codeplex.com/
Просто, это просто проверка во время выполнения, без какой-либо странной сложности, вы не необходимо унаследовать от каких-то «странных» базовых классов, без AOP, интеграции с VS, которая не будет работать на некоторых рабочих станциях разработчиков и т. д.
Простота важнее сложности.
В .net Fx 4.0 есть ответ:
System.Diagnostics.Contracts
http://msdn.microsoft.com/en-us/library/dd264808.aspx
Contract.Requires(newNumber > 0, “Failed contract: negative”);
Contract.Ensures(list.Count == Contract.OldValue(list.Count) + 1);