Estoy leyendo el blog de Eric Liperts sobre Mutating Readonly Structs y veo muchas referencias aquí en SO a este blog como argumento por qué los tipos de valores deben ser inmutables. Pero todavía hay algo que no está claro, dice que cuando se accede tipo de valor que siempre obtenga la copia del mismo y aquí está el ejemplo:tipos de valores inmutables
struct Mutable
{
private int x;
public int Mutate()
{
this.x = this.x + 1;
return this.x;
}
}
class Test
{
public readonly Mutable m = new Mutable();
static void Main(string[] args)
{
Test t = new Test();
System.Console.WriteLine(t.m.Mutate());
System.Console.WriteLine(t.m.Mutate());
System.Console.WriteLine(t.m.Mutate());
}
}
Y la pregunta es ¿por qué cuando cambio la
public readonly Mutable m = new Mutable();
a
public Mutable m = new Mutable();
todo empieza a trabajar es de esperar .
Por favor, puede explicar más claro por qué los tipos de valores deben ser inmutables. Sé que es bueno para la seguridad de la hebra, pero en este caso, puede aplicarse a los tipos de referencia.
No sabría cómo responder esto sin solo copiar y pegar más citas de la misma publicación de blog a la que se ha vinculado. 'm' siendo' readonly' es lo que hace 't.m' un valor, que, al no ser una variable, se coloca en una variable temporal, y es esta variable temporal la que es' this' dentro del método 'Mutate'. Quitar 'readonly', y los factores restantes ya no se aplican, por lo que' this' dentro de 'Mutate' puede ser' m'. –