2010-09-26 21 views
34

En C++, puede definir un método constante, así:métodos const en C#

int func_that_does_not_modify_this(int arg) const {} 

Colocar const al final de la función que impide modificar accidentalmente cualquiera de las propiedades internas, y hace saber la persona que llama que esta función no modificará el objeto.

¿Hay algún concepto como este en C#?

Respuesta

42

No, no hay nada como eso en C#. Se ha hablado mucho de esto, pero es bastante difícil lograr que el funcionamiento funcione de tal manera que sea verificable en tiempo de compilación, que no se pueda descartar como en C++, y que aún sea razonablemente fácil de usar sin tener que hacerlo perfectamente bien cuando diseñan sus propias clases.

Por supuesto, si diseña sus propios tipos para que sean inmutables (como string), entonces todos los métodos de la instancia son efectivamente const. Esto no siempre es práctico, pero es una técnica importante para usar cuando sea apropiado.

8

No. No hay nada similar en C#.

No const & cualquiera.

Como señala Jon, obviamente puede implementar un método const, pero no hay forma más allá de la documentación para que la persona que llama sepa que un método es const.

11

Code Contract debe proporcionar una función de este tipo en el futuro. Actualmente, puede marcar un método como [Pure], lo que significa que no tiene ningún efecto secundario (es decir, no modifica ninguno de los miembros de la clase). Lamentablemente, la versión actual de las herramientas no hace cumplir esta regla, por lo que usar ese atributo es solo para fines de documentación. Estoy bastante seguro de que en la versión futura, se aplicará a través de análisis estático (es decir, en tiempo de compilación), o al menos eso es lo que indica la documentación.

Preguntas de SO relacionadas: Pure functions in C#

+0

Eso sería bueno :) – mpen