Me he estado preguntando por un tiempo por qué C# no es compatible con const
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 tendremos soporte total.¿Por qué el soporte de C# no es const en un nivel de clase/método?
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 a través de la reflexión.
Imagínese esto:
const class NumberContainer
{
public int Number { get; }
}
.. Tal clase sólo puede estar ocupados en el tiempo de construcción, por lo que necesitaríamos un constructor de tomar en un int.
Otro ejemplo es const en un nivel de método:
public int AddNumbers(NumberContainer n1, NumberContainer n2) const
{
return n1.Number + n2.Number;
}
métodos de nivel Const no deben ser capaces de alterar el estado en su propia clase o las instancias de los tipos de referencia se pasan a ellos. Además, las funciones de nivel constante solo pueden invocar otras funciones de nivel constante mientras están en su alcance.
No estoy seguro si lambdas y los delegados harían todo demasiado difícil (o imposible) de lograr, pero estoy seguro de que alguien con más experiencia en diseño de lenguaje y compilación podría decirme.
Como Steve B señaló en los comentarios, la existencia de readonly
hace las cosas un poco más complejo, como const y readonly
están cerca de la misma durante runtime
, pero readonly
valores no se pueden determinar durante el tiempo de compilación. Supongo que podríamos tener const
y readonly
de nivel, pero eso podría ser muy confuso.
Entonces, ¿cuál es el motivo para no implementar esto? Las preocupaciones sobre la usabilidad (entender la constness en C++ suele ser bastante difícil para los usuarios nuevos), las preocupaciones sobre el diseño del lenguaje (no se puede hacer) o simplemente las preocupaciones prioritarias (los días de la inmutabilidad-zumbido han terminado)?
¿no maneja la palabra clave 'readonly' su requerimiento? –
Oups, mi mal ... También he pensado mucho en leer solo, pero me olvidé de publicarlo. Actualizaré mi proceso de pensamiento. – cwap
Básicamente, estás preguntando "¿por qué el lenguaje no tiene la función X"? Simple: o bien no se ha propuesto + considerado + aprobado + ámbito + diseñado + implementado + probado + documentado + implementado (comparado con otros usos posibles para ese recurso, y el impacto de la hinchazón del lenguaje), o * algo * de eso fue considerado y fue rechazado como indeseable o diferido. No es automático que cada idioma tenga todas las características imaginables. –