Для этой цели атрибут [Pure] был добавлен в пространство имен System.Diagnostic.Contracts .См. здесь для дальнейшего объяснения.Однако вы не можете предотвратить изменение одного свойства.Метод не может изменять состояние объекта вообще (например, C ++ const).
EDIT: К сожалению, атрибут Pure не работает с текущими инструментами.Я реализовал тест со следующим кодом, без сообщений об ошибках ни при статической, ни при проверке типа во время выполнения:
public class Test
{
private int x = 0;
[Pure]
public void Foo()
{
x++;
}
}
Что касается документации проверки * Pure будут поддерживаться «в будущем»».Когда бы это ни было («Команда Code Contracts усердно работает над этим, чтобы в будущем выпустить проверку чистоты».).
Я использовал атрибут, полагая, что он работает правильно.В документации говорится, что все методы, вызываемые в контракте, должны быть объявлены как чистые.Здесь не сказано, проверено это или нет.
Поэтому ответ на ваш вопрос таков: в настоящее время это не поддерживается, но может быть в будущем.