Para este propósito, el atributo [Puro] se ha agregado al espacio de nombre System.Diagnostic.Contracts. Ver here para una explicación más detallada. Sin embargo, no puede evitar que se modifique una sola propiedad. El método no puede cambiar el estado del objeto en absoluto (como la const de C++).
EDITAR: Desafortunadamente, el atributo Pure no funciona con las herramientas actuales. He implementado una prueba con el siguiente código, ningún mensaje de error, ya sea en estático ni en la comprobación de tipos en tiempo de ejecución:
public class Test
{
private int x = 0;
[Pure]
public void Foo()
{
x++;
}
}
En cuanto a la documentación de Pure cheques será apoyado 'en el futuro'. Siempre que eso sea ("El equipo de Contratos de Código está trabajando mucho en eso, por lo tanto, para encontrar un verificador de pureza en una versión futura").
He estado usando el atributo en la creencia de que funciona correctamente. La documentación dice que todos los métodos llamados dentro de un contrato deben declararse como puros. No dice si eso está marcado o no.
Así que la respuesta a su pregunta es: No hay soporte actual para esto, pero puede ser en el futuro.
Genial, gracias. Funciona. –