Code Contracts по сути делает то, что вы просите.(http://msdn.microsoft.com/en-us/devlabs/dd491992)
Контракты кода позволяют вам украшать ваш код атрибутами и вызовами, которые позволяют компилятору и IDE статически анализировать ваш код. Контракты кода можно найти в пространстве имен System.Diagnostics.Contracts
, но вы можете воспользоватьсяДля полной статической проверки типов вам нужен как минимум Premium SKU Visual Studio (я думаю).
Быстрый пример, ваш атрибут Functional
по сути такой же, как Pure
:
[Pure]
public void GetMessage() { return _message; }
Что говорит анализатору, что метод не вносит изменений в состояние. Вы также можете выполнять предварительные и последующие условия для своих методов, например:
public void WriteMessage(string message)
{
Contract.Requires(message != null);
}
В Code Contracts много глубины,и стоит хорошего чтения.