¿Por qué los diseñadores de C# no permitieron algo como esto?¿Por qué no hay inmutabilidad declarativa en C#?
public readonly class ImmutableThing
{
...
}
Una de las formas más importantes para el seguro multi-threading es el uso de los objetos inmutables/clases, sin embargo, no hay manera de declarar una clase como inmutable. Sé que puedo hacer que sea inmutable mediante una implementación adecuada, pero hacer que la declaración de clase lo haga cumplir lo haría mucho más fácil y seguro. Comentar una clase como inmutable es, en el mejor de los casos, una solución de "soporte de puerta".
Una ojeada a una declaración de clase e inmediatamente sabría que era inmutable. Si tuviera que modificar el código de otra persona, sabría que una clase no permite cambios por intención. Solo puedo ver ventajas aquí, pero no puedo creer que nadie haya pensado en esto antes. Entonces, ¿por qué no es compatible?
EDITAR
Algunos dicen que esto no es una característica muy importante, pero que en realidad no me convence. Procesadores multinúcleo aparecieron porque el aumento del rendimiento por frecuencia golpeó una pared. Los supercomputadores son máquinas muy multiprocesador. El procesamiento en paralelo es cada vez más importante y es una de las principales formas de mejorar el rendimiento. El soporte para multihilo y procesamiento paralelo en .NET es significativo (varios tipos de bloqueo, grupo de subprocesos, tareas, llamadas asincrónicas, colecciones concurrentes, bloqueo de colecciones, foreach paralelo, PLINQ, etc.) y me parece todo lo que te ayuda a escribir paralelamente el código más fácilmente da una ventaja. Incluso si no es trivial de implementar.
Porque no hay. Sin embargo, estaría bien, y parecería abrir ventanas en el futuro si quieren mejorar el idioma. –
¿No es esto lo que es una 'struct'? (Una clase como entidad con semántica de valor) – FishBasketGordo
@FishBasketGordo, no. –