¿Por qué C # no admite const en un nivel de clase / método?

Me he estado preguntando por un momento por qué C # no es compatibleconst en una clase o un nivel de método. Sé que Jon Skeet ha querido soporte para la inmutabilidad durante mucho tiempo, y reconozco que el uso de la sintaxis C ++ de la función const podría ayudar en eso. Al agregar una palabra clave const en un nivel de clase tendríamos soporte total.

Ahora, mi pregunta es, ¿cuál es la razón para que el equipo de C # no haya desarrollado este tipo de soporte?

Me imagino que todo se podría crear con una verificación en tiempo de compilación o mediante atributos, sin necesidad de cambiar el CLR. No me importa que el código sea capaz de anular el comportamiento constante mediante la reflexión.

Imagina esto:

<code>const class NumberContainer
{
    public int Number { get; }
}
</code>

.. Una clase así solo podría ser poblada en el momento de la construcción, por lo que necesitaríamos un constructor para tomar un int.

Otro ejemplo es const en un nivel de método:

<code>public int AddNumbers(NumberContainer n1, NumberContainer n2) const
{
   return n1.Number + n2.Number;
}
</code>

Los métodos de nivel constante no deberían poder alterar el estado en su propia clase o las instancias de los tipos de referencia que se les pasan. Además, las funciones de nivel constante solo pueden invocar otras funciones de nivel constante mientras estén dentro de su alcance.

No estoy realmente seguro de si las lambdas y los delegados harían todo lo difícil (o imposible) de lograr, pero estoy seguro de que alguien con más experiencia en lenguaje y diseño de compiladores podría decírmelo.

Como señaló Steve B en los comentarios, la existencia dereadonly Hace las cosas un poco más complejas, como const yreadonly están cerca de lo mismo duranteruntime, peroreadonly Los valores no se pueden determinar durante el tiempo de compilación. Supongo que podríamos tenerconst yreadonly nivel pero eso podría ser demasiado confuso?

Entonces, ¿cuál es la razón para no implementar esto? Preocupaciones de usabilidad (comprender la constancia en C ++ por lo general es bastante difícil para los nuevos usuarios), inquietudes sobre el diseño del lenguaje (no se puede hacer) o simplemente inquietudes prioritarias (los días de la inmutabilidad-el zumbido han terminado)

Respuestas a la pregunta(6)

Su respuesta a la pregunta